Подтвердить что ты не робот

Соглашения об именах функций

Я пишу библиотеку, поэтому я хочу, чтобы ее функции назывались как можно яснее и умнее. В настоящее время я использую следующие принципы:

  • Самоочевидные имена: a Функция getName() сообщит разработчик, что он возвращает, а также setAddress(), isMale() и т.д.
  • Короткое: имя функции должно быть как как можно короче, чтобы простой на выбор, а также легко запомнить. Функция getNumberOfPagesInTheBook() не хорошо, что-то вроде getBookPageCount() лучше.
  • Использование префиксов: я всегда использую префиксы в таких функциях, как getName(), setName(), hasHair(), isBlond() и т.д.

Мне интересно узнать, есть ли что-то, что мне не хватает. Кроме того, можете ли вы придумать некоторые другие префиксы, отличные от is, has, get и set?

4b9b3361

Ответ 1

Одно из наиболее универсальных, но простых правил: имена функций должны быть глаголами, если функция изменяет состояние программы и существительные, если они используются для возврата определенного значения.

Ответ 2

Еще одна важная вещь, которую нужно делать при написании библиотеки, - использовать одно и то же слово для описания одного и того же действия каждый раз. не записывайте функцию с именем getName в один класс и другую функцию с именем retrieveNumber в другом классе.

Ответ 4

Другие префиксы? Возможно, "isa", хотя это применимо только в некоторых ситуациях.

Некоторые языки могут связывать "get" и/или "устанавливать" с другими конструкциями (в частности, в Common Lisp, которые вы можете сделать (setf (get *...) blah) сделать то же, что и вы хотел (комплект *... blah) делаем).

Ответ 5

  • Соглашения об именах для Java
  • Соглашения об именах для . Net
  • Соглашения об именах для С++

Ответ 6

Если существует универсальное правило, я думаю, что он должен быть последовательным.

Существует также префикс "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,...

Ответ 7

Pro get/set

Когда класс имеет много методов, лучше использовать глагольные префиксы, такие как get/set, чтобы отличать методы друг от друга.

Пример PHP:

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

Кстати, в венгерских обозначениях префиксы идут с небольшой буквой и не будут отвлекать от ключевого слова.

Счетчик get/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 или файлах):

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

Ответ 8

Вот замечательный ресурс, который советует так же, как и ответ @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).