布尔值是开关状态的表达结果,而非开关本身;应通过可验证事实(如硬件电平、API响应)动态生成,避免硬编码赋值;善用&&/||短路行为控制流程,具名化复合条件并采用语义化命名。

布尔值本身不是开关,而是开关状态的表达结果;直接赋 true 或 false 做“硬开关”会切断逻辑上下文,后续维护容易出错。
用条件表达式生成布尔值,而不是手动赋值
开关状态必须来自可验证的事实,比如用户输入、API响应、硬件引脚电平。硬编码 isOn = true 等于把开关焊死——它不再响应变化。
-
const isLedOn = digitalRead(13) === HIGH;(Arduino)——读取物理引脚真实电平 -
const canSubmit = form.isValid && !isSubmitting;(前端表单)——组合多个动态条件 -
const isConnected = ping('api.example.com') !== null;(网络检测)——运行时探测结果
一旦布尔值来自硬编码,if (isOn) { ... } 就退化为无条件执行,失去判断意义。
&& 和 || 的短路行为是安全开关的关键
它们不只是逻辑运算符,更是控制流“守门人”:在条件不满足时跳过后续操作,避免报错或副作用。
-
device && device.powerOn():先确认device存在,再调用方法;若为null,不执行也不报错 -
user.role === 'admin' && renderAdminTools():仅当权限满足才渲染敏感 UI,且不返回布尔值(注意:只适用于无返回值的操作) -
config.timeout || 5000:提供默认值,比config.timeout ? config.timeout : 5000更简洁,但要注意0、''、false都会被覆盖
⚠️ 返回值不是布尔型:0 || 'default' 返回 'default',不是 true;在 TypeScript 中可能触发类型错误。
避免嵌套否定和模糊命名,让开关意图一目了然
像 !(!isConnected && !isRetrying) 这种写法,没人能一眼看懂当前到底该开还是关。真正的问题不是“怎么写”,而是“怎么让人不猜”。
- 把复合条件具名化:
const shouldKeepTrying = isConnected || isRetrying; - 用德·摩根定律简化前先问团队是否熟悉——不熟就拆成两行加注释
- 命名带语义:
isMotorRunning比flag1或state明确得多;isOverheating比notSafe更直白 - 警惕 falsy 边界值:
!value对0、''、[]、{}行为不一致;不确定时用value == null或Array.isArray(value)替代隐式转换
硬件层面尤其明显:Arduino 里 digitalRead(2) 返回 HIGH/LOW(本质是整数),直接塞进 if (!pinValue) 容易误判——得先映射成明确的布尔语义,比如 const buttonPressed = digitalRead(2) === LOW;(因上拉电路按下为低电平)。

















