第3部分:变量
第3部分变量:把变量意图接到初始化、命名、作用域和生命周期,让读者能够预测和复查状态变化。
学习目标
- 能从变量意图推导初始化、命名、作用域和生命周期的约束。
- 能识别未初始化、含义复用和过大作用域造成的状态风险。
- 能用正常、边界、故障和复位输入复查变量合同,并让另一位读者解释同一行为。
为什么需要这一部分
变量是程序中最小但最常见的状态边界。一个名字暗示对象,一个初值决定起点,一个作用域决定谁能改变它,一个生命周期决定旧状态何时失效;任何一个条件含糊,读者都要靠记忆猜测。把变量当成可观察合同,能减少隐藏状态和误用。
先避开三个变量误区
核心合同与操作术语
↡变量在当前任务中代表的对象、单位和不变量决定读者如何预测;↡变量第一次可被读取时必须满足的值与状态条件决定安全起点。↡能以最少歧义表达对象、角色和单位的标识减少猜测;↡变量可被访问和修改的最小代码区域限制状态扩散;↡从创建到失效期间变量保持合同的时间范围定义复查边界。
目录节点逐项深读
第3部分 变量
本部分的阅读合同是:每个变量都能说明表示什么、什么时候有值、谁可以修改、何时失效。若一个变量承担多个含义,应拆分或显式建模;若作用域过大,应先记录写入路径再收缩。
最小可重放实现
intent = state_variable_contract(object, unit, invariant)
value = initialize_before_read(intent)
name = choose_unambiguous_name(intent)
scope = restrict_visibility(name)
trace = replay_lifecycle(scope, normal, boundary, fault)
record(trace, firstDeviation, resetResult)正常轨迹确认读写合同;边界轨迹使用空值、最大值或最后一次状态;故障轨迹读取未初始化值或复用含义;复位轨迹从新实例确认生命周期回到同一基线。
先预测,再操作证据实验
先预测修改初始化、命名或作用域后哪一个节点会先变化,再只切换一个场景。组件是变量合同的教学模型,不是某种语言的完整静态分析器。
第3部分 变量 · 证据实验
变量意图 → 初始化 → 命名 → 作用域 → 生命周期与证据
固定版本、输入和观察窗口,只改变一个条件;先预测首个偏离,再用同一基线复位。
练习与答案
练习
问题 1:改写变量。 “data”在函数中先表示请求体、后来表示缓存结果,如何修订?
问题 2:缩小作用域。 一个计数器被多个函数共享,如何判断它能否局部化?
问题 3:诊断初始化。 代码在正常输入通过,但空输入时使用了旧值。首个偏离在哪里?
术语表
名词解释
本章出现的专业名词,用大白话再讲一遍。
- 变量意图
- 变量代表的对象、单位和不变量。
- 初始化
- 第一次读取前必须满足的值与状态条件。
- 命名
- 表达对象、角色和单位的低歧义标识。
- 作用域
- 变量可访问和可修改的最小代码区域。
- 生命周期
- 变量从创建到失效期间保持合同的时间范围。
本页小结
变量质量来自可预测状态:明确意图,保证初始化,选择低歧义名称,限制作用域,并管理生命周期。正常路径不能掩盖旧值和越界状态;只有从干净基线重放,变量合同才可信。