Coding style 您对成员变量使用哪种前缀?

Coding style 您对成员变量使用哪种前缀?,coding-style,naming-conventions,member,naming,prefix,Coding Style,Naming Conventions,Member,Naming,Prefix,毫无疑问,对于理解代码来说,给成员变量一个前缀是至关重要的,这样就可以很容易地将它们与“普通”变量区分开来 但是你用什么样的前缀呢 我一直在做一些项目,我们使用m作为前缀,而在其他项目中,我们只使用下划线(我个人不喜欢,因为只有下划线还不够明确) 在另一个项目中,我们使用了一个长前缀形式,它还包括变量类型mul是member变量unsignedl类型的前缀 现在让我知道你使用哪种前缀(请给出原因) 编辑:大多数人似乎在编写代码时没有为成员变量添加特殊前缀!这取决于语言吗?根据我的经验,C++代码

毫无疑问,对于理解代码来说,给成员变量一个前缀是至关重要的,这样就可以很容易地将它们与“普通”变量区分开来

但是你用什么样的前缀呢

我一直在做一些项目,我们使用m作为前缀,而在其他项目中,我们只使用下划线(我个人不喜欢,因为只有下划线还不够明确)

在另一个项目中,我们使用了一个长前缀形式,它还包括变量类型<例如,strong>mul是member变量unsignedl类型的前缀

现在让我知道你使用哪种前缀(请给出原因)

编辑:大多数人似乎在编写代码时没有为成员变量添加特殊前缀!这取决于语言吗?根据我的经验,C++代码倾向于使用下划线或m作为成员变量的前缀。其他语言呢?

仅下划线


在我的例子中,我使用它是因为在我的工作场所,编码标准文档就是这么说的。然而,我看不出在变量的开头加上m_或一些可怕的匈牙利语有什么意义。极简主义的“仅下划线”保持了它的可读性。

您的mul_uuu示例正朝着Charles Simonyi的应用程序匈牙利符号前进

我更喜欢保持简单,这就是为什么我喜欢使用m_u作为前缀


这样做可以更容易地看到您必须去哪里才能看到原始声明。

无。我过去经常使用下划线,但在一个其他人不喜欢的项目中,我被说服不再使用下划线,也没有错过它。一个好的IDE或好的内存会告诉你什么是成员变量,什么不是。我们项目的一位开发人员坚持在每个成员变量前面加上“this.”,当我们在处理名义上属于“his”的代码区域时,我们会取悦他。如果没有必要,则不加下划线。适用于python。

我根本不使用任何前缀。如果我遇到了将局部变量或方法参数与类成员混淆的危险,则该方法或类太长,并且从拆分中获益

这(可以说)不仅使代码更具可读性和“流畅”,而且最重要的是,鼓励结构良好的类和方法。最后,它可以归结为一个与前缀或无前缀dillema完全不同的问题

更新:嗯,口味和喜好都变了,不是吗。。现在,我使用下划线作为成员变量的前缀,因为从长远来看,它在识别本地变量和成员变量方面被证明是有益的。尤其是新的团队成员有时很难辨认出这两个人

毫无疑问,对于理解代码来说,给成员变量一个前缀是至关重要的,这样就可以很容易地将它们与“普通”变量区分开来

我对这一主张提出异议。如果你的语法高亮显示有一半不错,这一点都不必要。一个好的IDE可以让您用可读的英语编写代码,还可以用其他方式显示符号的类型和范围。当插入点位于其中一个符号上时,Eclipse通过突出显示符号的声明和使用做得很好

编辑,谢谢slim:像Eclipse这样的好语法荧光笔也可以让您使用粗体或斜体文本,或者完全更改字体。例如,我喜欢静态的斜体字

另一个编辑:这样想;变量的类型和范围是次要信息。它应该是可用的,很容易找到,但不要对你大喊大叫。如果您使用前缀,如
m
或类型,如
LPCSTR
,当您只想读取主要信息时,这将成为噪音–代码的意图


第三次编辑:这适用于任何语言。

这在某种程度上取决于您使用的语言

在C#中,您可以使用'this'前缀引用任何成员,例如'this.val',这意味着不需要前缀。VB与“我”具有类似的功能

在有内置符号表示成员访问权限的语言中,我看不出使用前缀的意义。在其他语言中,我想对该语言使用任何普遍接受的约定都是有意义的


请注意,使用内置表示法的好处之一是,在访问类上的属性和方法时也可以使用它,而不会影响这些属性和方法的命名约定(这在访问非私有成员时尤为重要)。使用任何类型的指示符的主要原因是作为一个标志,表明您正在类中造成可能的副作用,因此在使用其他成员时最好使用它,而不管它们是否是字段/属性/方法/等等。

这实际上取决于语言。 我是C++的家伙,用下划线预先处理所有的东西有点棘手。在某些情况下(取决于范围),语言会为实现保留以下划线开头的内容。对双下划线也有特殊处理,或者下划线后面跟一个大写字母。所以我说,避免这种混乱,只需选择其他前缀即可“m”在我看来还行。“m”有点多,但也不可怕。真是口味的问题


但要注意那些领先的低分。您会惊讶于有多少编译器和库内部构件是这样命名的,如果您不非常小心,肯定会有发生意外和混淆的空间。只要说不。

我更喜欢使用
这个
关键字。 这意味着
this.data
this->data
而不是一些依赖于社区的命名

因为:

  • 现在IDEs键入
    this.
    popups intellinse
  • 这对每个人来说都是显而易见的,但并不知道
    class CFoo  
    {  
    private:  
        int m_nAge;  
        CString m_strAddress;  
    public:  
        int GetAge() const { return m_nAge; }  
        void SetAge(int n) { m_nAge = n; }  
        CString GetAddress() const { return m_strAddress;  
        void SetAddress(LPCTSTR lpsz) { m_strAddress = lpsz; }  
    };
    
    class foo  
    {  
    private:  
        int age_;  
        std::string address_;  
    public:  
        int age() const { return age_; }  
        void age(int a) { age_ = a; }  
        std::string address() const { return address_; }  
        void address(const std::string& str) { address_ = str; }  
    };
    
    Dim _valueName As Integer
    
    Public Property ValueName() As Integer
    
    class SomeClass {
        private int mCount;
        ...
        private void SomeFunction(string pVarName) {...}
    }
    
    private int fooBar;
    public int FooBar
    {
      get { return fooBar; }
      set { fooBar = value; }
    }
    
    TGpHttpRequest = class(TOmniWorker)
    strict private
      hrHttpClient  : THttpCli;
      hrPageContents: string;
      hrPassword    : string;
      hrPostData    : string;
    
    TGpHttpRequest = class(TOmniWorker)
    strict private
      FHttpClient  : THttpCli;
      FPageContents: string;
      FPassword    : string;
      FPostData    : string;
    
    public class Person {
      private String _name;
    
      public Person(String name) {
        _name = name;
      }
    }
    
    public class Person {
      private String name;
    
      public Person(String name) {
        this.name = name;
      }
    }