我正在编写一个库,所以,我希望它的功能尽可能清晰明确地命名。目前,我使用以下原则:
我很想知道我是否遗漏了一些东西。另外,你能想到除了is,has,get和set之外的其他一些前缀吗?
答案 0 :(得分:55)
一个更通用但更简单的规则是:如果函数改变了程序的状态,函数名应该是动词,如果它们用于返回某个值,则名词应该是名词。
答案 1 :(得分:4)
编写库时,另一个重要的事情是每次使用相同的单词来描述相同的操作。不要在一个类中编写名为 getName 的函数,在另一个类中编写另一个名为 retrieveNumber 的函数。
答案 2 :(得分:2)
答案 3 :(得分:1)
其他前缀?可能是“isa”,但这仅适用于某些情况。
有些语言可以与其他构造进行“获取”和/或“设置”通信(具体来说,在Common Lisp中你可以制作(setf(get * ...)blah)和你想要的一样(设置* ...等等)。
答案 4 :(得分:0)
答案 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
最后,有许多广泛使用的结构,例如instanceof
,indexOf
,......
答案 6 :(得分:0)
当一个类有很多方法时,最好使用动词前缀(如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)
。