Соглашения об именах переменных и методах для логических глаголов в Java?

Я знаю, что многие предлагают это соглашение:

boolean deleted;
boolean isDeleted();

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

boolean userCanLeave
boolean isUserCanLeave()

boolean canUserLeave
boolean isCanUserLeave()

boolean userLeave
boolean isUserLeave()

boolean userLeave
boolean canUserLeave()

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

Ответ 1

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

И затем используйте метод getter как isUserAllowedToLeave().

Это, по крайней мере, использует "is" getter и звучит грамматически правильно.

Ответ 2

Использование таких булей, как это, почти всегда является плохой и запутанной идеей. Если вы хотите сделать код понятным и легко поддерживаемым, вы должны использовать перечисление для представления состояния, возможно, с сильными правилами перехода (FSM).

Предполагая, что ваша концепция "оставить" основана на том, выполнил ли пользователь задачу или набор задач, вы можете иметь

public enum UserState { inProgress, complete }

Затем вы можете реализовать метод leave в своем пользовательском классе следующим образом:

public void leave() { if (state == UserState.complete) ... }

где state является частным экземпляром перечисления, определенного выше. Затем вы можете переделать вопрос isLeableable на getState, если такая вещь необходима. Конечно, вам также понадобится метод complete(), который соответствующим образом изменит состояние и будет вызываться, когда пользователь выполнит свои задачи.

Ответ 3

Многие фреймворки по-прежнему используют вызовы методов для установки значений на beans, и эти методы должны соответствовать определенному шаблону:

isXXX или getXXX

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

Итак getUserCanLeave()? Или isUserLeavable()?