函数命名约定

时间:2010-01-02 11:25:58

标签: function naming-conventions

我正在编写一个库,所以,我希望它的功能尽可能清晰明确地命名。目前,我使用以下原则:

  1. 不言自明的名字:a 函数getName()会告诉你 开发人员返回的内容以及 setAddress(),isMale()等
  2. 简短:函数名称必须为 尽可能短,以便它 简单易于打字 记得。一个功能 getNumberOfPagesInTheBook()不是 好的,像 getBookPageCount()更好。
  3. 使用前缀:我总是使用 函数中的前缀如 getName(),setName(),hasHair(), isBlond()等。
  4. 我很想知道我是否遗漏了一些东西。另外,你能想到除了is,has,get和set之外的其他一些前缀吗?

8 个答案:

答案 0 :(得分:55)

一个更通用但更简单的规则是:如果函数改变了程序的状态,函数名应该是动词,如果它们用于返回某个值,则名词应该是名词。

答案 1 :(得分:4)

编写库时,另一个重要的事情是每次使用相同的单词来描述相同的操作。不要在一个类中编写名为 getName 的函数,在另一个类中编写另一个名为 retrieveNumber 的函数。

答案 2 :(得分:2)

答案 3 :(得分:1)

其他前缀?可能是“isa”,但这仅适用于某些情况。

有些语言可以与其他构造进行“获取”和/或“设置”通信(具体来说,在Common Lisp中你可以制作(setf(get * ...)blah)和你想要的一样(设置* ...等等)。

答案 4 :(得分:0)

  1. Java
  2. 的命名约定
  3. .Net
  4. 的命名约定
  5. C++
  6. 的命名约定

答案 5 :(得分:0)

如果存在普遍规则,我认为应该保持一致。

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

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

func center() {
   return (a + b) / 2
}

然而,在一些明确使用“get”前缀的语言中(即Android - Java),常见的做法是使用一些动词,例如“compute”(即computeVerticalScrollOffset()

此外,在某些语言(例如swift)中,您还可以使用属性设置器,因此您实际上并未使用“set”前缀:

var x: X {
  get {
    return foo(x)
  }
  set {
    x = bar(newValue)
  }
}

// Set x
x = y

最后,有许多广泛使用的结构,例如instanceofindexOf,......

答案 6 :(得分:0)

Pro get / set

当一个类有很多方法时,最好使用动词前缀(如get / set)来区分方法。

PHP示例:

$foo->setText('Hello world!');
$foo->prependText('So. ');
$foo->appendText(' And welcome');
$x = $foo->getText();

顺便说一句,在匈牙利语中,前缀会带有一个小写字母,不会减损关键字。

计数器获取/设置

当您只需要两种方法时,在使用参数的上下文中使用相同的名词会更容易。

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或文件中):

deleteFoo(...); // Delete specified properties
insertFoo(...); // Add specified properties
replaceFoo(...); // Add or replace specified properties
updateFoo(...); // Update specified properties

对于这两种情况:

$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];

答案 7 :(得分:0)

以下是一个非常有用的资源,其建议与@Carl的答案相同:https://swift.org/documentation/api-design-guidelines/#strive-for-fluent-usage

  

根据副作用命名函数和方法

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

  •   
  • 那些有副作用的人应读为命令式动词短语,例如,   print(x)x.sort()x.append(y)

  •