Os métodos booleanos sempre devem assumir a forma afirmativa, mesmo quando serão usados apenas na forma negativa?
Digamos que eu queira verificar se existe uma entidade antes de criar uma, meu argumento é que a primeira forma abaixo é melhor que a segunda, se o método é ou não usado na forma afirmativa.
Em resumo, acho if(!affirmative)
mais fácil ler do que if(negative)
. Eu tenho um colega que discorda, pensamentos?
Primeira forma:
int entity_id = 42;
if(!entity_exists(entity_id)) create_entity(entity_id);
Segunda forma:
int entity_id = 42;
if(entity_not_exist(entity_id)) create_entity(entity_id);
!
personagem tantas vezes, fazendo com que eu entendesse mal o código até relê-lo novamente. Então provavelmente concordo mais com seu colega de trabalho. Gosto da forma avaliada como verdadeira quando você a examina.
if (!exists) create()
pode ser visto como uma prática ruim em muitos idiomas / estruturas, pois tende a não ser seguro para threads. Geralmente, a abordagem preferida é chamar create()
e manipular exceções específicas ou códigos de retorno dizendo que a entidade já existe. Obviamente, isso não é uma resposta para a pergunta real (é por isso que é apenas um comentário).
if (not entity_exists(entity_id))