Должны ли булевы методы всегда принимать утвердительную форму, даже если они будут использоваться только в отрицательной форме?
Скажем, я хотел проверить, существует ли сущность, прежде чем создавать ее, я утверждаю, что первая форма ниже лучше второй формы, независимо от того, используется ли метод когда-либо в утвердительной форме.
В итоге, мне if(!affirmative)
легче читать, чем if(negative)
. У меня есть коллега, который не согласен, мысли?
Первая форма:
int entity_id = 42;
if(!entity_exists(entity_id)) create_entity(entity_id);
Вторая форма:
int entity_id = 42;
if(entity_not_exist(entity_id)) create_entity(entity_id);
!
символ так много раз, что заставлял меня неправильно понимать код, пока я не перечитал его снова. Так что я, вероятно, больше согласен с вашим коллегой. Мне нравится форма, которая оценивается как истинная, когда вы ее изучаете.
if (!exists) create()
может рассматриваться как плохая практика во многих языках / фреймворках, так как это, как правило, не является потокобезопасным. Обычно предпочтительный подход заключается в вызове create()
и обработке определенных исключений или кодов возврата, говорящих о том, что объект уже существует. Это, конечно, не ответ на реальный вопрос (вот почему это только комментарий).
if (not entity_exists(entity_id))