gpt4 book ai didi

java - 命名 block 限制变量范围 : good idea?

转载 作者:IT老高 更新时间:2023-10-28 20:38:22 26 4
gpt4 key购买 nike

多年来,我一直使用命名 block 来限制临时变量的范围。我从未在其他任何地方看到过这样做,这让我怀疑这是否是一个坏主意。特别是因为 Eclipse IDE 默认将这些标记为警告。

我认为,在我自己的代码中,我已经使用它取得了很好的效果。但是由于它是不习惯的,以至于优秀的程序员在看到它时会不信任它,所以我真的有两条路可以走:

  1. 避免这样做,或者
  2. 推广它,希望它会成为一个成语。

示例(在更大的方法中):

final Date nextTuesday;
initNextTuesday: {
GregorianCalendar cal = new GregorianCalendar();
... // About 5-10 lines of setting the calendar fields
nextTuesday = cal.getTime();
}

这里我使用 GregorianCalendar 只是为了初始化一个日期,并且我想确保我不会意外重用它。

有些人评论说您实际上不需要命名 block 。虽然这是真的,但原始 block 看起来更像是一个错误,因为意图尚不清楚。此外,命名某些东西会鼓励您考虑 block 的意图。此处的目标是识别不同的代码部分,而不是为每个临时变量赋予其自己的范围。

许多人评论说最好直接使用小方法。我同意这应该是你的第一直觉。但是,可能有几个缓解因素:

  • 即使考虑一个命名 block ,代码也应该是简短的一次性代码,永远不会在其他地方调用。
  • 命名 block 是一种组织超大方法的快速方法,无需创建带有十几个参数的一次性方法。当一个类在不断变化时尤其如此,并且输入可能会因版本而异。
  • 创建新方法会鼓励其重复使用,如果用例不完善,这可能是不明智的做法。命名 block 更容易(至少在心理上)被丢弃。
  • 特别是对于单元测试,您可能需要为一次性断言定义十几个不同的对象,它们的不同之处足以让您(还)无法找到一种方法将它们整合到少数方法中,你也想不出用一英里长的名字来区分它们的方法。

使用命名作用域的优点:

  1. 不能意外重用临时变量
  2. 有限范围为垃圾收集器和 JIT 编译器提供了有关程序员意图的更多信息
  3. block 名称提供了对代码块的注释,我发现它比开放式注释更具可读性
  4. 更容易将代码从大方法重构为小方法,反之亦然,因为命名 block 比非结构化代码更容易分离。

缺点:

不是惯用的:没有见过命名 block 的这种用法的程序员(即除了我之外的所有人)认为这是错误的,因为他们找不到对 block 名称的引用。 (就像 Eclipse 所做的那样。)让某些东西变得惯用是一场艰苦的战斗。

可以作为不良编程习惯的借口,比如:

  • 制作庞大的单一方法,其中几个小方法会更清晰。
  • 缩进层太深,难以阅读。

注意:我根据一些深思熟虑的回答对这个问题进行了广泛的编辑。谢谢!

最佳答案

我会直接重构为更小的方法。如果一个方法足够大以至于需要像这样分解,那么如果完全可能的话,它确实需要分解成多个方法。

虽然限制范围很好,但这并不是命名 block 的真正用途。这是单调的,这很少是一件好事。

关于java - 命名 block 限制变量范围 : good idea?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/205458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com