【问题标题】:If you are using getters and setters, how should you name the private member variables?如果你使用 getter 和 setter,你应该如何命名私有成员变量?
【发布时间】:2010-09-15 05:10:09
【问题描述】:

作为this question about prefixes 的后续行动,我同意线程上大多数人的观点,即前缀不好。但是如果你使用 getter 和 setter 呢?然后,您需要将可公开访问的 getter 名称与私有存储的变量区分开来。我通常只使用下划线,但有更好的方法吗?

【问题讨论】:

    标签: setter getter prefixes


    【解决方案1】:

    这是一个完全主观的问题。没有“更好”的方法。

    一种方法是:

    private int _x;
    public get x():int { return _x; }
    public set x(int val):void { _x = val; }
    

    另一个是:

    private int x;
    public get X():int { return x; }
    public set X(int val):void { x = val; }
    

    两者都不是正确答案。每个都有风格的优点和缺点。选择您最喜欢的一个并始终如一地应用它。

    【讨论】:

      【解决方案2】:

      正如其他人所提到的,我喜欢在字段前加上下划线。

      private int _x;
      

      我认为这超出了直接的个人喜好(正如 David Arno 在此线程中所说)。我认为这样做有一些真正的客观原因:

      1. 这意味着您不必为赋值编写“this.x = x”(尤其是在 setter 和构造函数中)。
      2. 它将您的字段与本地变量/参数区分开来。这样做很重要:字段比本地人更难处理,因为它们的范围更广/生命周期更长。添加额外字符对编码人员来说是一个心理警告信号。
      3. 在某些 IDE 中,下划线会导致自动完成功能将字段排序到建议列表的顶部。这样可以更轻松地在一个块中查看该类的所有字段。这反过来会有所帮助;在大类上,您可能无法在与您正在处理的代码相同的屏幕上看到字段(通常定义在类的顶部)。将它们排序到顶部提供了方便的参考。

      (这些约定适用于 Java,但其他语言也有类似的约定)

      这些东西看起来很小,但它们的普遍存在确实让我在编码时的生活更轻松。

      【讨论】:

      • 有趣。你在那里提出了一些很好的论据,因为它不仅仅是一个纯粹的主观选择。
      • Re: 第 1 点,我更喜欢使用 this,这样我就不必使用命名约定。 :)
      • 我的解决方案效率提高了 80%!
      【解决方案3】:

      在 java 中有 this.foo 在 python 中有 self.foo 和其他语言有类似的东西,所以当我已经可以使用语言结构时,我认为不需要以特殊方式命名某些东西。在相同的上下文中,好的 IDE 和编辑器理解成员变量并给它们一个特殊的突出显示,因此您可以真正看到它而无需使用特殊名称。

      【讨论】:

        【解决方案4】:

        我只是使用区分大小写的语言:

        private int myValue;
        
        public int MyValue
        {
            get { return myValue; }
        }
        

        否则我会使用下划线

        Private _myValue As Integer
        
        Public ReadOnly Property MyValue As Integer
            Get
                Return _myValue
            End Get
        End Property
        

        【讨论】:

        • 看起来不错,但在 actionscript(我的主要语言)中,你永远不会以大写字母开头函数或变量,除非它是类名或构造函数(你可以,你只是不)。
        • 在这种情况下,我可能会使用 _myValue 作为变量,将 myValue 作为属性名称。
        【解决方案5】:

        执行此操作的方法几乎与执行此操作的程序员一样多,但一些更流行的方法包括(对于属性Foo):

        • mFoo
        • m_foo
        • _foo

        【讨论】:

          【解决方案6】:

          喜欢写“this.x = x”。我很清楚。另外,在使用 Eclipse 时,您可以通过这种方式让它自动生成您的 getter/setter。

          【讨论】:

            猜你喜欢
            • 2014-03-27
            • 1970-01-01
            • 1970-01-01
            • 2013-06-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-03-15
            • 2011-01-05
            相关资源
            最近更新 更多