Function 函数命名约定

Function 函数命名约定,function,naming-conventions,Function,Naming Conventions,我正在写一个库,所以,我希望它的函数被尽可能清晰和巧妙地命名。目前,我使用以下原则: 不言自明的名字:a 函数getName()将告诉 开发人员返回的内容以及 setAddress()、isMale()等 简短:函数名必须为 尽可能短,以便 简单的类型,以及易于使用 记得。函数 getNumberOfPagesInTheBook()不可用 很好,差不多 getBookPageCount()更好 前缀的使用:我总是使用 函数中的前缀,例如 getName(),setName(),hasHair()

我正在写一个库,所以,我希望它的函数被尽可能清晰和巧妙地命名。目前,我使用以下原则:

  • 不言自明的名字:a 函数getName()将告诉 开发人员返回的内容以及 setAddress()、isMale()等
  • 简短:函数名必须为 尽可能短,以便 简单的类型,以及易于使用 记得。函数 getNumberOfPagesInTheBook()不可用 很好,差不多 getBookPageCount()更好
  • 前缀的使用:我总是使用 函数中的前缀,例如 getName(),setName(),hasHair(), isBlond()等
  • 我很想知道我是否遗漏了什么。另外,除了is、has、get和set之外,你还能想到其他前缀吗?

    看看


      • 编写库时,还有一件更重要的事情要做,那就是每次都用同一个词来描述同一个动作。不要在一个类中编写名为getName的函数,在另一个类中编写名为retrieveNumber的函数。

        一个更普遍但简单的规则是:如果函数更改程序状态,函数名应该是动词;如果函数名用于返回某个值,则应该是名词

      • 的命名约定
      • 的命名约定
      • 的命名约定
      • 其他前缀?可能是“isa”,但这仅适用于某些情况


        一些语言可以与其他结构(特别是在公共Lisp中,您可以使(setf(get*..)blah)执行与您希望的(set*..blah)相同的操作)进行“get”和/或“set”通信。

        如果有一个通用规则,我认为它应该是一致的。

        还有“on”前缀,它在处理事件时被广泛使用(例如Java Android:)。其他一些广泛使用的前缀或简短和/或一般动词(如has、get和set)有:

        当涉及的逻辑很少(即属性)时,我更喜欢使用名词作为简单的getter,但对于复杂的操作,我会使用“get”前缀:

        func center() {
           return (a + b) / 2
        }
        
        然而,在一些明确使用“get”前缀被广泛扩展的语言中(即Android-Java),常见的做法是使用一些动词,如“compute”(即

        此外,在某些语言中(例如),您还可以使用属性设置器,这样您就不会真正使用“set”前缀:

        最后,还有许多广泛使用的结构,例如,…

        Pro get/set 当一个类有许多方法时,最好使用动词前缀(如get/set)来区分不同的方法

        PHP示例:

        $foo->setText('Hello world!');
        $foo->prependText('So. ');
        $foo->appendText(' And welcome');
        $x = $foo->getText();
        
        $('.foo').html();                //get
        $('.foo').html('Hello world!'); //set
        
        顺便说一句,在匈牙利符号中,前缀和一个小字母在一起,不会减损关键字

        计数器获取/设置 当您只需要两个方法时,在使用参数的上下文中使用相同的名词更容易

        jQuery示例:

        $('.foo').html();                //get
        $('.foo').html('Hello world!'); //set
        

        例子 对于以数组作为参数的函数和静态方法,我使用以下规则:

        如果更改只应在运行时发生:

        setFoo($arr); // Replace/delete all properties, i.e. if some elements are not passed, the corresponding properties will get empty values.
        setFoo([]); // Delete all properties
        setFoo(); // Set all properties by default
        delFoo($arr); // Delete specified properties
        addFoo($arr); // Add/replace specified properties
        
        如果将永远进行更改(在DB或文件中):

        对于这两种情况:

        $arr = getFoo(); // Get all properties    
        $val = getFoo($level1, $level2, ...); // You can obtain the value of the given level, placing the list of arguments
        or
        $val=getFoo()[$level1][$level2];
        

        这里有一个与@Carl的答案相同的建议:

        根据其副作用命名功能和方法

        • 没有副作用的应该读作名词短语,例如
          x.distance(to:y)
          i.succession()

        • 有副作用的应该读作祈使动词短语,例如。,
          print(x)
          x.sort()
          x.append(y)


        这在某种程度上取决于语言,因为不同的语言通常有不同的命名/编码约定。如果有太多的getter和setter,则可能表明设计不佳。@Neil Butterworth:有趣!好奇地想知道为什么以及什么是更好的方法?(这是关于getter和setter的)如果您需要许多get/set函数,这通常表明您的类只是一个没有实际行为的“记录”。@anon(2010年1月2日11:34)我不明白您的意思。问题是“什么是好的命名约定?”。你的答案似乎是对数据访问对象之类的东西半明半暗的反对?这意味着getter函数的名称都错了?。。。ie getSomeValue()@timh访问器是一种特殊情况,它们通常返回对象的属性,在C#或AS3中您只需使用属性访问语法即可。@timh是的,它们是错误的,这就是为什么C#用get修复了它们的属性;set property在具有命名闭包和计算属性的语言中,这不是一个好规则。对于具有这些特性的语言,更好的规则是始终将函数命名为动词或谓词。您必须考虑存储为闭包时函数的外观。名词没有意义;这给人的印象是它是调用的结果。动词表示动作,函数做事情。对所有函数名使用动词是合理的。当它从类变量本地获取数据或进行计算(例如
        circle.getArea()
        )时,我通常使用
        get
        ,当它必须从外部获取此数据时,我使用
        retrieve
        (例如从数据库:
        db.retrieveUserById(123))
        @davidcalanan,检索方法如何与调用方相关?@ThaJay两年后再看这个,它可能与调用方的数据来源无关,我可能会使用get-everywhere。我发现这是一个非常糟糕的惯例,因为这么多单词既是名词又是动词。即使在示例中:你可以
        距离自己,并使用某种
        纸张获得
        打印件
        。实际上,我不知道
        x.view()
        x.set()
        x.route()
        中的哪一种可能有副作用。
        $arr = getFoo(); // Get all properties    
        $val = getFoo($level1, $level2, ...); // You can obtain the value of the given level, placing the list of arguments
        or
        $val=getFoo()[$level1][$level2];