【问题标题】:_iVar vs. iVar_ for variable naming [closed]_iVar 与 iVar_ 用于变量命名[关闭]
【发布时间】:2012-01-12 08:37:29
【问题描述】:

我以前使用前缀下划线来命名实例变量,以区别于局部变量。

我偶然看到“Google Objective-C Style Guide”,发现它建议使用尾随下划线(参考HERE),但没有详细解释原因。

我知道这是一个编码风格问题,但我想知道使用尾随下划线有什么好处吗?

【问题讨论】:

  • 哦...不适合 SO?请发表评论。 :(
  • 更多的是主观讨论问题,而不是“正确答案”
  • 谢谢@jrturton,但我确实需要一个好的答案来解释iVar_ 的一些原因,所以我可以把这个展示给我的同事并与他讨论。 :p
  • @Jano,我知道前缀下划线,这也是我曾经使用它的原因。不管怎么说,还是要谢谢你! :)
  • hm...为什么它被关闭为“不具有建设性”?为什么我们遵循 Google 的 Objective-C 风格而不是 Apple 的 Objective-C 风格?

标签: iphone objective-c ios coding-style


【解决方案1】:

相关:Question about @synthesize(请参阅答案底部的块引用)
优点是:_var 是私有的约定(C99,Cocoa 准则),但它很常见(即使在 Apple 模板上)Apple 使用双下划线 __var。谷歌通过使用尾随下划线来解决它。

我用更多的理由更新了另一个答案...

在 C++ 中也不鼓励使用前导下划线(参见 What are the rules about using an underscore in a C++ identifier?) 和核心数据属性 (尝试在模型中添加一个前导下划线,你会得到“名称 必须以字母开头")。

尾随下划线似乎是明智的选择,但如果您愿意 别的东西,碰撞不太可能发生,如果发生了, 你会收到来自编译器的警告。

【讨论】:

  • !这是我认为的关键点!
  • Apple 对 ivars 使用单前导下划线,这样它们的变量名就不会与我们的冲突。当您命名您的 ivars 时,请使用除单个前导下划线之外的任何内容。 正如 @NSResponder 所说,Google 只需使用尾随下划线来解决此冲突吗?
  • 他们没有说,但有多种理由认为。
【解决方案2】:

前缀下划线通常用于系统/SDK库中。所以使用前缀下划线可能会导致超类中的变量被覆盖,这样的错误并不容易被发现。 看看系统提供的任何类,比如 NSView,你就会发现。

【讨论】:

  • 是的,我听说过,但我注意到 XCode4 更新了应用程序模板以在实例变量之前包含下划线。
【解决方案3】:

Apple 对 ivars 使用单前导下划线,这样它们的变量名就不会与我们的冲突。当您命名您的 ivars 时,请使用 单个前导下划线之外的任何内容。

【讨论】:

  • Google 只是使用尾随下划线(而不是单个前导下划线)来解决这个冲突?
【解决方案4】:

使用尾随下划线没有任何好处。我们遵循编码风格,以简化代码的可读性。下划线在这种情况下帮助我们区分 iVar 和局部变量。据我所知,_iVariVar_更显眼

【讨论】:

  • 妈妈..我也想遵循编码风格,但我的同事更喜欢_iVar。我需要一个很好的理由来说服他。 :p
  • 你为什么要说服他使用iVar_。 _iVar 没有任何问题
  • 同意。我也看不出有什么优势。
  • @ShantiK,只是为了确保我们使用相同的编码风格。这发生在几天前,最后我们使用_iVar。但是最近,我发现很多项目都使用iVar_。 :S
  • @ZhangChn 也许jano的回答会显示出优势。 :)
【解决方案5】:

几乎所有基于英语的编程语言,我们从左到右书写和阅读。
使用前导下划线可以更轻松地查找 iVar,并识别变量是 iVar。

【讨论】:

  • 是的,_iVar 更方便找到 ivars。但是,如您所见,Google Objective-C 样式指南建议iVar_..
  • Google 文档没有解释为什么他们建议使用尾随下划线。
    另外,我不同意在命名局部变量时放弃匈牙利符号的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-22
  • 1970-01-01
  • 2014-03-29
  • 2022-11-04
  • 2016-05-04
相关资源
最近更新 更多