I metodi booleani dovrebbero sempre assumere la forma affermativa, anche quando saranno sempre e solo usati nella forma negativa?
Diciamo che volevo verificare se esiste un'entità prima di crearne una, il mio argomento è che la prima forma in basso è migliore della seconda forma, indipendentemente dal fatto che il metodo sia mai usato nella forma affermativa.
In sintesi, trovo if(!affirmative)
più facile da leggere di if(negative)
. Ho un collega che non è d'accordo, pensieri?
Prima forma:
int entity_id = 42;
if(!entity_exists(entity_id)) create_entity(entity_id);
Seconda forma:
int entity_id = 42;
if(entity_not_exist(entity_id)) create_entity(entity_id);
!
così tante volte il personaggio facendomi capire male il codice finché non lo rileggo di nuovo. Quindi probabilmente sono più d'accordo con il tuo collega. Mi piace la forma che valuta vera quando la esaminate.
if (!exists) create()
può essere visto come una cattiva pratica in molte lingue / framework, in quanto tende a non essere thread-safe. Di solito, l'approccio preferito è chiamare create()
e gestire specifiche eccezioni o codici di ritorno che affermano che l'entità esiste già. Questa ovviamente non è una risposta alla domanda reale (motivo per cui è solo un commento).
if (not entity_exists(entity_id))