【问题标题】:Syntax for Boolean getter/setter methods and properties布尔 getter/setter 方法和属性的语法
【发布时间】:2012-09-16 00:43:30
【问题描述】:

在编写布尔 getter/setter 方法时,这样编写它们似乎是标准的

void setValue(boolean value) { }

boolean getValue() { return true/false; }

但是我看到了一些用法,其中指出 getter 方法应根据其用法适当命名。

例如,如果我的 getter 被调用,我正在设置/获取一个名为“启用”的布尔值:

getEnabled()

isEnabled()

再次假设我正在设置/获取一个名为“节点”的布尔值,如果我的 getter 被调用:

getNodes()

hasNodes()

这只是个人喜好,还是选择一个特定的命名约定而不是另一个是一种好习惯?

【问题讨论】:

  • nodes 听起来是一个很糟糕的布尔值名称。
  • 我会说这取决于您的个人喜好(或您的团队/雇主的喜好)。但是,我只想声明,如果我看到 bool getNode() 方法,我会感到困惑......
  • 如果“nodes”是布尔值,最好使用“isNodes”,但如果“nodes”是集合,那么“hasNodes”更好
  • c# 具有作为一流概念的属性:在 c# 中通常不会有明确的 getValue / setValue - 你会有一个带有 get/set accessor的 Value >
  • 见 Jigar Joshi 的 this answer

标签: c# java oop coding-style boolean


【解决方案1】:

此答案假设问题与 Java 相关:

遵守约定总是更好。一些框架(如 Spring)与 Java Beans 约定紧密耦合。

【讨论】:

    【解决方案2】:

    在 C# 中,属性不是方法。嗯,它们是方法,但是是一种特殊类型的方法。

    你这样声明一个属性:

    public bool Enabled
    {
       get
       {
           // return your value
       }
       set
       {
          // assign your value
       }
    }
    

    【讨论】:

    • 个人喜好,但我也不喜欢我的属性过于冗长。如果这是 C# 并且我正在实现它,我将其命名为 Enabled。你说得对,它不是一种方法,所以我会回避方法约定,比如动词或动词短语作为名称。
    • 别介意你已经有一个动词或动词短语。当您说 IsEnabled 时,更明显的是您的意思是事物是否当前已启用,而不是(说)它是否在过去的某个时间启用
    【解决方案3】:

    这是我喜欢 C# 的(众多)原因之一

    public bool Enabled
    {
        get { return _enabledValue;}
        set { _enabledValue = value;}
    }
    

    调用该属性非常“自然”

    myControl.Enabled = true;
    ...
    
    if(myControl.Enabled == true)
    

    【讨论】:

    • 同上,这就是我更喜欢 C# 的原因...更多语法糖!
    • 再次,问题仍然存在,该属性应该称为 Enabled 还是 IsEnabled?
    • 我还是更喜欢Enabled。包含动词 is.... or has... 让我想起了一个动作,而我想到了类的属性等属性
    • @Steve:你知道“启用”也是一个动词,对吧?
    • 我喜欢这样评估布尔值(使用您的示例): if(myControl.Enabled)...所以对我来说 if(mycontrol.IsEnabled) 似乎更自然。不要误会我的意思,我尊重你的回答,但我试图从更大的角度了解人们喜欢什么......假设我正在写一个作为流行图书馆的一部分的课程,在我的课堂上我有一个适当的称为 IsEnabled,您认为人们会不赞成使用“Is”前缀,还是直接接受?
    【解决方案4】:

    在 Java 中:

    所有的 getter 和 setter 必须至少有 4 个字符长并且有一个大写的第四个字母。

    唯一的例外是 booleanBoolean 的 getter,它们可以是 3 个字母长,可以以 is 开头,并且第三个字符必须是大写字母。

    【讨论】:

    • 你的第一行应该说“第四”吗?
    • 为什么 getter 和 setter 的长度必须至少为 4 个字符?如果不是,程序会中断,还是应该说“应该”?
    • 我经常使用 getter 和 setter,它们只是字段的名称。我这样做是为了表明它们不是 JavaBean。但是,如果要使用基于 JavaBean 的库,则必须遵循约定,否则方法将被忽略。
    • @activwerx:Java bean 规范。根据这些规范,吸气剂的名称类似于 getSomething(或 isSomething 用于布尔值)。如果您不遵循该命名约定,IDE 和 bean 用户可能无法识别您的属性。当然,如果你不关心这个,你可以使用“is”、“has”、“may”,或者任何你想要的。
    猜你喜欢
    • 1970-01-01
    • 2011-04-14
    • 2017-09-09
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 2019-05-09
    相关资源
    最近更新 更多