代码之家  ›  专栏  ›  技术社区  ›  Alon Gubkin

函数应该以“get”开头?

  •  7
  • Alon Gubkin  · 技术社区  · 15 年前

    我正试图研究C编码标准,以使我的代码更加漂亮和标准,我有一个问题:根据C编码标准,函数(不是空的方法)是否应该从“get”开始?例如: GetSongOrder() “,” GetNextLine() “等等?

    谢谢。

    6 回复  |  直到 15 年前
        1
  •  24
  •   Reed Copsey    15 年前

    有两种情况:

    如果例程可以很快“获取”值,而不会在代码中产生副作用,我建议使用属性getter,并省略“get”名称:

    public SongOrder SongOrder
    {
       get { return this.songOrder; } // ie: an enum
    }
    

    但是,如果需要处理,那么使用“get…”名称的方法是合适的。这表明调用此方法可能会有副作用,例如额外的处理,或者某种状态的变化:

    public string GetNextLine()
    {
        string line = this.stream.ReadLine(); // This may cause a longer running operation, especially if it's using Disk IO/etc
        // do other work?
        return line;
    }
    
        2
  •  2
  •   Jack Marchetti    15 年前

    您的函数名应该简洁,并且有意义。不多不少。

    如果GeT适合你,那么使用GeT。如果检索有效,请使用它。

    命名约定没有真正的“标准”。

        3
  •  2
  •   Michael Bray    15 年前

    通常,函数的动词-名词命名约定很常见。get'只是你可能看到的动词之一。它也可以是'activate'、'close'、'dump'或任何…一个方法或函数通常会“对”某种类型的对象“做些什么”,这只是英语和常规编码的结果。

        4
  •  1
  •   FrustratedWithFormsDesigner    15 年前

    我还没有看到这方面的C标准,但大部分 实际的 我所看到的代码使用了“getter”属性,它们省略了函数名中的“get”一词。 例子:

    Public SongOrderList SongOrder
    {
        get
        {
          return mySongOrderList;
        }
    }
    

    使用“Get”(和“SET”)作为函数名前缀是我通常在Langues中看到的一个不具有L.NET属性的语言(例如C语言、Java语言)。

    编辑:

    …当然你也可以有二传手

    Public SongOrderList SongOrder
    {
        get
        {
          //do some processing code here
          return mySongOrderList;
        }
        set
        {
          //do some processing code here
          mySongOrderList = value; //value is a C# keyword, in case you didn't know. it is the parameter to the setter
        }
    }
    

    当然,如果你想要一个吸气剂和一个设定器,你不需要任何额外的处理,就像纯JavaBean一样,获取/设置YUC这样做:

    Public SongOrderList SongOrder
        {
            get; set;
        }
    

    如果你只想要一个公众人物,你可以这样做(我想,已经有一段时间了):

    Public SongOrderList SongOrder
        {
            public get; private set;
        }
    
        5
  •  1
  •   Guffa    15 年前

    不,没有标准可以让函数以“get”开头。

    当创建有意义的函数名时,它们通常采用这种形式,比如 GetHashCode 功能。开头的其他动词很常见,比如 ToString 函数,并且只使用 Encode 功能。

    还有其他形式,您更愿意描述函数的结果,比如 Substring 功能。

        6
  •  1
  •   Lee    15 年前

    除了其他答案-如果您有getNextLine()这样的方法,您可能还需要考虑返回枚举,例如。

    IEnumerable<Line> GetLines();