Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > "is" и "are" префикс у метода


Автор: Romper 31.8.2013, 17:39
Привет.

Какое ваше имхо, всегда писать только "is"(пример: isDataCopied) или для множество надо писать "are"(пример: areAllTasksDone) ?

Cпасибо.

Автор: Arantir 31.8.2013, 18:12
Думаю, если бы твой родной язык был английским, то ты бы не спрашивал =)

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

Грамотность — это способ людей правильно понимать друг друга. Думаю и на программирование это распространяется в некоторой степени.

Автор: Stolzen 31.8.2013, 18:51
Пишите так, как правильно с точки зрения грамматики английского языка

Автор: Samotnik 1.9.2013, 21:43
Romper, кодконвеншен это не регламентирует, значит нужно пользоваться здравым смыслом smile

Автор: LSD 2.9.2013, 09:43
Я за следование code conventions. Если мне понадобится узнать boolean свойство я буду искать свойства начинающиеся на isXXX() но не areXXX().

Автор: priam220 2.9.2013, 18:26
лучше попытаться объединить конвеншн+здравый смысл - попытаться переименовать метод, в Вашем случае, допустим - isAllDone.
А подробности написать в  javadoc.

Автор: Stolzen 2.9.2013, 18:49
Цитата(priam220 @  2.9.2013,  19:26 Найти цитируемый пост)
isAllDone

isEverythingDone

Автор: Arantir 2.9.2013, 19:56
Цитата(LSD @  2.9.2013,  08:43 Найти цитируемый пост)
Если мне понадобится узнать boolean свойство я буду искать свойства начинающиеся на isXXX() но не areXXX(). 

Искать свойство среди методов очень оригинально =)


Цитата(Romper @  31.8.2013,  16:39 Найти цитируемый пост)
пример: areAllTasksDone

Какая-то инверсия получилась. Я действительно то ли не встречал подобного, то ли это было достаточно редко, то ли все пихали is для множеств.

Дело в том, что обговариваемые тут методы класса начинаются с "is" именно потому, что, обычно, относятся к одному конкретному екземпляру этого класса. И характеризуют они один объект.
isReady(), isAdmin(), isBanned(), isRed(), isBlue(), isYellowButerfly(), isMagicYellowPurplePony()...

Вероятно это и имеется ввиду в code conventions. А areAllTasksDone() — это больше похоже на какую-то независимую функцю.

В моем представлении все должно было бы заблаговременно быть как-то так:
Код

TasksQueue tasksqueue = new TasksQueue();
// ... 
if (tasksqueue.isFinished()) {


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

Автор: Samotnik 2.9.2013, 20:43
Цитата(LSD @  2.9.2013,  09:43 Найти цитируемый пост)
Я за следование code conventions. Если мне понадобится узнать boolean свойство я буду искать свойства начинающиеся на isXXX() но не areXXX(). 

если речь о getter/setter, то согласен. Но метод лучше называть осмысленно. Например: werePhotosUploaded()
Кстати, мы http://www.oracle.com/technetwork/java/codeconventions-150003.pdf codeconventions читали? Там нет инфы в данном контексте про то как называть boolean методы

Автор: priam220 2.9.2013, 21:46
Samotnik, я тоже что то не нашел на оф сайте такой инфы. Но вот http://www.cwu.edu/~gellenbe/javastyle/method.html есть.
Кроме того в бинах если не ошибаюсь имена полей должны совпадать с именами геттеров. И вариантов там может просто не быть.
Кстати придумал еще одно название для такого поля: hasRunningTasks smile

Автор: Samotnik 2.9.2013, 22:54
priam220,  smile 
Как-то университет Вашингтона слабоватый авторитет в Java для меня.

Автор: LSD 3.9.2013, 09:51
Цитата(Arantir @  2.9.2013,  20:56 Найти цитируемый пост)
Искать свойство среди методов очень оригинально =)

Не знаю кто как, но лично я пользуюсь автокомплитом в IDE.



Цитата(Samotnik @  2.9.2013,  21:43 Найти цитируемый пост)
если речь о getter/setter, то согласен. Но метод лучше называть осмысленно. Например: werePhotosUploaded()
Кстати, мы один и тот же codeconventions читали? Там нет инфы в данном контексте про то как называть boolean методы 

Если метод возвращает некое значение которое харатеризует состояние объекта и при этом само сотояние не меняется, то это вполне можно считать Java Bean property.
Понятно что есть особые случаи типа того же итератора, но в данном конкретном случае я не увидил причин писать are, was, did и т.п.


Цитата(priam220 @  2.9.2013,  22:46 Найти цитируемый пост)
Кроме того в бинах если не ошибаюсь имена полей должны совпадать с именами геттеров.

Имена свойств, но не полей, поля приватные и могут называться как угодно. Например List.isEmpty() вполне себе boolean read only property с именем empty, при этом поля там вообще нет.

Автор: Arantir 3.9.2013, 14:17
А давайте просто считать наличие надобности в префиксах are, was и т.д. плохой архитектурой приложения  smile 

Автор: Samotnik 4.9.2013, 11:48
LSD, я не про данный случай, а вообще. Если говорить о чистом code convention, то там скорее речь идет про адекватность названий, а не про то что boolean всегда должно быть is.
Вот например как в данном случае поступить?
Код

private Boolean real = true;

    public Boolean getReal() {
        return real;
    }

    public void setReal(Boolean real) {
        this.real = real;
    }

Методы без is потому что это враппер булевский. Но и называть переменную isReal тоже неправильно по code convention.

Автор: Magistrus 4.9.2013, 19:09
частенько для определение наличия множества  используется "has" например  hasTextured

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)