Чи повинні булеві методи завжди приймати стверджувальну форму, навіть коли вони лише коли-небудь будуть використовуватися в негативній формі?
Скажімо, я хотів перевірити, чи існує сутність, перш ніж створити її, мій аргумент полягає в тому, що перша форма нижче є кращою за другу форму, незалежно від того, застосовується чи ні метод у позитивній формі.
Підсумовуючи, мені здається, 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))