Я знаю, что соглашение в Java для логических получателей включает префикс «is».
isEnabled
isStoreOpen
Но что, если подлежащее стоит во множественном числе? То есть, что если вместо того, чтобы знать, открыт ли магазин, я хотел знать, все ли магазины открыты?
isStoresOpen()
не имеет смысла на английском.
Мне очень хочется написать геттеры вроде:
areStoresOpen
areDogsCute
areCatsFuzzy
И я думаю , что будет иметь смысл, но мне сказали , другие , что я должен просто сосать его и отказаться от предмета глагола соглашения и использования isStoresOpen
, isDogsCute
, isCatsFuzzy
.
В любом случае, что мне делать с логическими геттерами, которые работают с субъектом множественного числа?
are*()
добытчиков.are*()
геттеры, если они грамматически правильные.is
илиhas
...Ответы:
Я не могу вспомнить, из какой это книги, но суть в том, что код будет прочитан намного больше раз, чем написан. Пишите для удобства чтения.
источник
storesAreOpen()
вероятно, будет наиболее грамматическим (из-заif(storesAreOpen())
), но логическая часть имени теперь скрыта в середине имени метода, что нарушает соглашения Java и читаемый код.Как насчет того, чтобы иметь достаточно приличный английский и следовать стандарту Java:
isEveryStoreOpen()
илиisEachCatCute()
Когда я сомневаюсь в правильности слова, я всегда обращаюсь к тезаурусу.
источник
boolean
секis
префикс конвенции. Кроме того, он предоставляет небольшую дополнительную информацию, которая будет действительно полезна для тех, кто не является носителем английского языка, но которые, как оказалось, поддерживают кодовую базу.По соглашению к методу-получателю добавляется префикс "is", а не к самой переменной.
например
private boolean enabled; public boolean isEnabled() { return enabled; }
а также
private boolean storesOpen; public boolean isStoresOpen() { return storesOpen; }
Возможно, это не имеет грамматического смысла, но соответствует соглашению и выглядит достаточно читабельным.
источник
В спецификации Java Bean говорится, что нужно использовать
get
для геттеров, если только он не используетсяboolean
затемis
.are
является нестандартным и не распознается ничем, ожидающим стандартного именования Bean.источник
Многие инструменты ожидают
is
илиget
не распознаютare
.Попробуйте перефразировать их, например,
getDogsAreFuzzy()
илиgetStoresAreOpen()
что-то подобное для лучшей совместимости и условностей.источник
-
isEnabled()
также можно записать какgetEnabled()
вJava naming conventions
.- Это просто хорошая привычка следовать соглашениям об именах, помогает, когда вы работаете
Java Beans
.источник
В общем, я считаю, что код должен быть настолько легко читаемым, насколько это возможно, чтобы метод можно было читать почти как абзац (как это принято
Clean Code
). Поэтому я бы назвал метод максимально простым звуком / чтением и следовал правилу граммераare
. В современных IDE легко найти методы, не ища специальноget
/is
.Однако Кумар хорошо подмечает бобы. Многие инструменты будут искать только
get
/is
. В этом случае я мог бы рассмотреть возможность использования обоих методов. Один для удобства чтения и один для использования инструментов.источник
На каком языке вы пишете: английский или Java ?
Когда я читаю код Java, я ожидаю, что что-то там будет, и заставить меня искать оба геттера с префиксами is и are будет сложнее, чем искать только один префикс.
Однако, с другой стороны, когда я читаю утром газету, я ничего не ищу, поэтому вы можете писать на более традиционном английском языке.
возврат 0;
источник
В вашем вопросе вы явно спрашиваете о геттерах. Получатель возвращает некоторую информацию об одном экземпляре вашего класса. Например, у вас есть класс
Store
. ТеперьisStoreOpen
это прекрасное имя метода для геттера.Затем вы упоминаете метод, который проверяет, все ли магазины открыты. Этот метод вообще не является геттером, потому что он возвращает информацию не об одном экземпляре, а обо всех. Конечно, если нет класса
Stores
. Если это так, вам следует переосмыслить свой дизайн, потому что в Java уже есть способы хранения ряда экземпляров, например массивов или коллекций, поэтому вам не нужно писать дополнительные классы.Если это не так, тогда это имя метода прекрасно. Альтернатива может быть просто
allStoresOpen
без «есть».TL; DR: если вы имеете дело с несколькими экземплярами, это не геттер. Если это так, ваш дизайн плохой.
источник
Честно говоря, я бы сказал, что забудьте об этом
are*
и придерживайтесьis*
. Думайте об этом"is"
как о значении переменной и, если возможно, придумайте лучшее имя.Я бы сказал, isStoresOpen звучит не так уж плохо, но вы можете сделать isStoresAreOpen, если это звучит лучше для вас.
Но моя общая идея - придерживаться условностей. Который использует get для геттеров и is для логических типов. Лично я думаю, что использование «есть» иногда уже проблематично. Да, это действительно хорошо выглядит в условиях «если», но иногда я просто пишу «получить» при кодировании, проверяю раскрывающийся список для моей необходимой переменной и начинаю думать, что не так и почему я не могу ее найти, тогда я понимаю это начинается с "есть" ...
источник
В объектно-ориентированном программировании это должно происходить редко, если вообще когда-либо, поскольку
Store
илиCat
или то, что у вас должно быть отдельным классом, со своим собственным методомisOpen()
илиisFuzzy()
. Если у вас более высокий тип, подумайте о разделении на более атомарный уровень, который вы фактически используете. В общем, объекты не должны быть множественного числа на самом низком уровне.источник
isStoresOpen () в этом StoresOpen выглядит как множественное число,
Когда вы следуете этому Соглашению об именах Java и Стандартам Java Beans, у них есть предопределенные префиксы для логических и других типов, поэтому вы должны следовать Соглашению об именах Java Beans.
Давайте перейдем к вашей точке зрения. Когда вы видите, что storeOpen означает «перспектива» на английском языке, да, это похоже на множественное число. Еще раз глубоко понаблюдайте за этим словом,
Вот
storeOpen - это множественное число согласно английской грамматике,
Результат isStoresOpen не во множественном числе, а в единственном числе, или вы можете сказать, что он скалярный с точки зрения соглашения о программировании.
Это логическое значение, просто правда или ложь
В отличие от вашего английского множественного числа, истинного или ложного.
Не массив истинных или ложных , или не набор истинных или ложных
Итак, здесь мы можем сказать, что здесь нас интересует значение, возвращаемое этим логическим методом bean-компонента, а не имя, присвоенное свойству класса, чтобы указывать на сущность реального мира.
Еще одна важная вещь: всякий раз, когда такие логические свойства используются в классах и они используются предопределенными библиотеками в любой структуре, тогда структура с префиксом использования ' is ' для получения логических значений,
почему это означает, что он не намного умнее вас, поскольку вы знаете грамматику английского языка, такую как множественное / единственное число, мультиплексор и т. д.
источник