代码简洁之道

已思考 15 秒

概要

根据 Google、Oracle 和《Effective Java》等权威风格指南,应当将局部变量声明在首次使用它们的地方,并尽量在声明时完成初始化,以缩小作用域、提高可读性并减少潜在错误。对仅使用一次的值,可以直接内联调用;对会重复使用的值,才在需要前声明一次。这样既符合现代 Java 最佳实践,也让代码更易维护和测试。


推荐写法

// 仅声明并初始化真正需要多次使用的局部变量
Long deviceId = deviceInfo.getId();  // 第一次且多次使用,故此处声明并初始化:contentReference[oaicite:0]{index=0}

// 如果设备在其他设备位上绑定,解绑其他设备位
if (debugFrameXAxisYAxisMapper.selectByDeviceId(deviceId) > 0) {
    debugFrameXAxisYAxisMapper.updateByDeviceId(deviceId);
}

// 直接内联获取仅用一次的 locationCode,无需提前声明
vDeviceInfoMapper.updateLocationCode(deviceId, deviceInfo.getLocationCode());

// 同理,locationCodeId 只用一次,直接内联
debugFrameXAxisYAxisMapper.bindDevice(deviceId, deviceInfo.getLocationCodeId());

详细说明

1. 缩小作用域

  • 声明位置靠近使用点:仅对需要在多处使用的变量(如 deviceId)才提前声明;而对仅使用一次的值(如 locationCodelocationCodeId),直接在调用时获取并传参,避免过度声明(Stack Overflow)(Android Open Source Project)。
  • 局部化变量作用域:让每个变量的声明区间尽可能短,既减少命名冲突,也方便阅读和理解(DEV Community)(OpenJDK)。

2. 即时初始化

  • 声明即初始化:Oracle 推荐 “在声明局部变量时就进行初始化”,除非初始化依赖于前置计算(甲骨文)。
  • 避免“悬空”声明:如果稍后才给变量赋值,可能忘记或误用未初始化的变量,导致潜在 bug 或 NPE。

3. 提升可读性与可维护性

  • 垂直本地性:读者在阅读到某个逻辑块时,可以立即看到相关变量的声明和用途,无需上下跳转查找(Stack Overflow)(Oracle 文档)。
  • 清晰意图表达:减少无用或重复的变量声明,让代码意图更直观,有助于代码审查和后续重构。

与“顶部声明”对比

特性顶部统一声明按需声明(推荐)
作用域覆盖整个方法,易误用覆盖最小代码块,安全清晰
可读性需来回跳转查找变量声明逻辑块内即可见声明,直观
初始化及时性可能延迟初始化或遗漏声明即初始化,减少 NPE 风险
重构成本变量移位或方法拆分时易遗漏或遗漏更新作用域小,重构影响范围受限

结论:在 Java 中,应当遵循“局部变量在首次使用处声明并初始化”的原则,仅对多次使用的核心变量提前声明。如此不仅对团队协作更友好,也能大幅降低维护和调试成本。

回答: 代码简洁中的测试题强调了测试代码的重要性以及测试代码应该保持整洁的原则。测试代码和生产代码一样重要,需要被思考、被设计和被照料。测试代码的整洁性对于保证生产代码的可扩展性、可维护性和可复用性至关重要。测试代码应该快速、独立、可重复、自足验证和及时编写。快速意味着测试应该能够快速运行,独立意味着测试之间应该相互独立,可重复意味着测试应该能够在任何环境中重复通过,自足验证意味着测试应该有布尔值输出,及时编写意味着单元测试应该在使其通过的生产代码之前编写。此外,基于经验和直觉推测程序中可能存在的各种错误,并根据这些错误选择测试用例也是一种常用的方法。通过列举可能的错误和容易发生错误的特殊情况,可以选择这些情况下的例子作为测试用例。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [《代码整洁之 》第九章 单元测试](https://blog.csdn.net/weixin_39924752/article/details/127931527)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [软件测试面试题(含答案)](https://blog.csdn.net/qq_42434318/article/details/114263419)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值