第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变量意图它表示什么当前节点2初始化何时有值可复核3命名让读者预测可复核4作用域限制可见性可复核5生命周期复查边界可复核基线:变量的意图、初值、名称、作用域和生命周期能被读者解释。证据合同:输入 · 预期 · 实际 · 首个偏离 · 复位结果当前场景:正常路径

练习与答案

练习

问题 1:改写变量。 “data”在函数中先表示请求体、后来表示缓存结果,如何修订?

问题 2:缩小作用域。 一个计数器被多个函数共享,如何判断它能否局部化?

问题 3:诊断初始化。 代码在正常输入通过,但空输入时使用了旧值。首个偏离在哪里?

术语表

名词解释

本章出现的专业名词,用大白话再讲一遍。

变量意图
变量代表的对象、单位和不变量。
初始化
第一次读取前必须满足的值与状态条件。
命名
表达对象、角色和单位的低歧义标识。
作用域
变量可访问和可修改的最小代码区域。
生命周期
变量从创建到失效期间保持合同的时间范围。

本页小结

变量质量来自可预测状态:明确意图,保证初始化,选择低歧义名称,限制作用域,并管理生命周期。正常路径不能掩盖旧值和越界状态;只有从干净基线重放,变量合同才可信。

资料与写作方式声明

本章以Steve McConnell, Code Complete, Second Edition权威目录界定学习范围,并结合正文列出的技术资料独立重写;不宣称复现原书正文,也不沿用原作表述。

原作版权归作者与出版社所有;本站原创教学结构与表述仅供学习交流。

讨论

评论区加载中…