Java boolean getters "is" vs "являются"

Я знаю, что соглашение в Java для булевых getters включает префикс "is".

isEnabled
isStoreOpen

Но что, если предмет множественный? То есть, если вместо того, чтобы узнать, открыт ли магазин, я хотел знать, открыты ли все магазины?

isStoresOpen() не имеет смысла на английском языке.

У меня возникает соблазн написать геттеры вроде:

areStoresOpen
areDogsCute
areCatsFuzzy

И я думаю, что это имело бы смысл, но мне говорили другие, что я должен просто сосать его и отказаться от соглашения о согласии с глаголом и использовать isStoresOpen, isDogsCute, isCatsFuzzy.

Во всяком случае, что мне делать для булевых получателей, которые работают с множественным субъектом?

Ответ 1

Я не помню, из какой книги это было, но суть в том, что код будет читаться еще много раз, чем написано. Напишите для удобочитаемости.

Ответ 2

Как насчет наличия достаточно приличного английского и следующего стандарта Java:

isEveryStoreOpen() или isEachCatCute()

Когда сомневаешься в правильном слове, мне всегда нравится поражать тезаурус.

Ответ 3

Соглашение состоит в том, чтобы префикс getter-method с "is" не сам variale.

например.

private boolean enabled;

public boolean isEnabled() {
    return enabled;
}

и

private boolean storesOpen;

public boolean isStoresOpen() {
    return storesOpen;
}

isStoresOpen() не имеет смысла на английском языке.

Это может не иметь смысла грамматически, но оно следует за соглашением и выглядит достаточно читаемым.

Ответ 4

Множество инструментов ожидает is или get и вряд ли распознает are.

Попробуйте перефразировать их, например getDogsAreFuzzy() или getStoresAreOpen(), или что-то вроде этого для лучшей совместимости и условных обозначений.

Ответ 5

В спецификации Java Bean используется get для геттеров, если не используется boolean, а затем используйте is. are является нестандартным и не будет распознаваться ничем, ожидающим стандартного обозначения Bean.

Ответ 6

- isEnabled() также можно записать как getEnabled() в Java naming conventions.

-. Его просто хорошая привычка следовать правилам именования, помогите, когда вы работаете с Java Beans.

Ответ 7

В общем, я думаю, что код должен быть настолько легко читаемым, насколько это возможно, так что метод может быть почти прочитан как абзац (как описано в Clean Code). Поэтому я бы назвал способ звучать/читать как можно проще и идти с правилом грамматики are. С современными IDE легко найти методы, не особо глядя на get/is.

Однако Кумар делает хороший вывод о beans. Многие инструменты будут искать только get/is. В этом случае я мог бы рассмотреть возможность использования обоих методов. Один для удобства чтения и один для использования инструментом.

Ответ 8

На каком языке вы пишете: Английский или Java?

Когда я читаю Java-код, я ожидаю, что все будет там, заставив меня искать оба геттера, с префиксами и префиксами, будет сложнее, чем поиск только одного префикса.

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

return 0;

Ответ 9

В объектно-ориентированном программировании это должно происходить редко, если вообще когда-либо, с Store или Cat или что вы должны быть отдельным классом со своим собственным методом isOpen() или isFuzzy(). Если у вас более высокий тип, рассмотрите возможность разделения на более атомный уровень, который вы фактически используете. В общем, объекты не должны быть множественными на самом низком уровне.

Ответ 10

В вашем вопросе вы явно спрашиваете о геттерах. Геттер возвращает некоторую информацию об одном экземпляре вашего класса. Например, у вас есть класс Store. Теперь isStoreOpen - это прекрасное имя метода для получателя.

Затем вы указываете метод, который проверяет, открыты ли все магазины. Этот метод не является получателем вообще, потому что он не возвращает информацию об одном экземпляре, но для всех. Конечно, если не существует класса Stores. Если это так, вы должны переосмыслить свой дизайн, потому что Java уже имеет способы хранения нескольких экземпляров, например. массивов или коллекций, поэтому вам не нужно писать дополнительные классы.

Если это не так, то это имя метода отлично. Альтернативой может быть только allStoresOpen без "is".

TL; DR: Если вы имеете дело с несколькими экземплярами, это не геттер. Если это так, ваш дизайн плох.

Ответ 11

Честно говоря, я бы сказал, что определенно забыть о are* и придерживаться is*. Подумайте о "is" как о значении переменной и сделайте лучшее имя, если это возможно.

Я бы сказал, isstoresOpen не звучит так плохо, но вы можете сделать isStoresAreOpen, если это звучит лучше для вас.

Но моя общая идея заключалась бы в том, чтобы придерживаться конвенций. Который использует "get" для getters и "is" для булевых типов. Лично я считаю, что использование "есть" иногда бывает проблематичным. Да - он хорошо выглядит в условиях "если", но иногда я просто пишу "get" при кодировании и проверяю выпадающий список для моей необходимой переменной и начинаю задаваться вопросом, что неправильно, и почему я не могу его найти, тогда я это понимаю начинается с "is"...

Ответ 12

isStoresOpen() в этом StoresOpen выглядит как множественное число,

Когда вы следуете этим правилам Java Naming Convention и Java Beans, у них есть предопределенный префикс для булевых и других типов, поэтому вы должны следовать Java Beans Naming Convention.

Подойди к тебе Когда вы видите storeOpen, как в английской перспективе, да, это выглядит как множественное число. Еще раз глубоко заглянем в это слово,

Здесь

storeOpen - множественное число в соответствии с английской грамматикой,

Выход из isStoresOpen не является множественным, а не сингулярным, или вы можете сказать, что он является скалярным в терминах соглашения о программировании.

Это логично, просто верно или false

Не похоже на ваше английское выражение множественного числа true или false

Не массив true или false, либо не коллекции true или false

Итак, здесь мы можем сказать, что здесь мы имеем дело со значением, которое является возвратом от этого логического метода bean, а не с именем, заданным для свойства класса, чтобы указать объект реального мира.

Еще одна важная вещь: всякий раз, когда такие логические свойства используются в классах, и они используются предопределенными библиотеками в любой структуре, тогда фреймворк с префиксом pre "для получения логических значений p >

почему это означает, что он не настолько умнее вас, как вы знаете грамматику английского языка как множественное/единственное, мультиплексор и т.д.