Ответ 1
Одно из наиболее универсальных, но простых правил: имена функций должны быть глаголами, если функция изменяет состояние программы и существительные, если они используются для возврата определенного значения.
Я пишу библиотеку, поэтому я хочу, чтобы ее функции назывались как можно яснее и умнее. В настоящее время я использую следующие принципы:
Мне интересно узнать, есть ли что-то, что мне не хватает. Кроме того, можете ли вы придумать некоторые другие префиксы, отличные от is, has, get и set?
Одно из наиболее универсальных, но простых правил: имена функций должны быть глаголами, если функция изменяет состояние программы и существительные, если они используются для возврата определенного значения.
Еще одна важная вещь, которую нужно делать при написании библиотеки, - использовать одно и то же слово для описания одного и того же действия каждый раз. не записывайте функцию с именем getName в один класс и другую функцию с именем retrieveNumber в другом классе.
Посмотрите
Другие префиксы? Возможно, "isa", хотя это применимо только в некоторых ситуациях.
Некоторые языки могут связывать "get" и/или "устанавливать" с другими конструкциями (в частности, в Common Lisp, которые вы можете сделать (setf (get *...) blah) сделать то же, что и вы хотел (комплект *... blah) делаем).
Если существует универсальное правило, я думаю, что он должен быть последовательным.
Существует также префикс "on", который широко используется при работе с событиями (т.е. Java Android: onViewCreated
). Некоторые другие префиксы или короткие и/или общие глаголы (такие как has, get и set) широко используются:
Я предпочитаю использовать существительные для простых геттеров, когда задействована очень небольшая логика (т.е. свойства), но я бы использовал префикс "get" для сложных действий:
func center() {
return (a + b) / 2
}
Однако на некоторых языках, где явно используется префикс "get", широко распространенный (например, Android - Java), распространенная практика использует некоторый глагол, такой как "вычислять" (т.е. computeVerticalScrollOffset()
)
Кроме того, на некоторых языках (например, swift) вы также можете использовать средства определения свойств, чтобы вы действительно не использовали "набор", префикс:
var x: X {
get {
return foo(x)
}
set {
x = bar(newValue)
}
}
// Set x
x = y
И, наконец, существует много широко используемых конструкций, таких как instanceof
, indexOf
,...
Когда класс имеет много методов, лучше использовать глагольные префиксы, такие как 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];
Вот замечательный ресурс, который советует так же, как и ответ @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)
.