Muitas convenções de nomenclatura recomendam que os métodos que retornam um booleano (também chamados de métodos de predicado ) sejam nomeados após uma pergunta . Minha pergunta é: eles realmente não significam que os métodos devem ser nomeados após uma afirmação ?
A diferença pode ser sutil, mas você acaba com nomes diferentes em alguns casos:
- pergunta : is_pixel_transparent (...)
- afirmação : pixel_is_transparent (...)
Às vezes, isso não faz diferença e o fraseado é o mesmo:
- pergunta : end_of_file (...)
- afirmação : end_of_file (...)
Além disso, parece que na maioria das vezes, o que as pessoas chamam de "perguntas" são na verdade afirmações .
- key_exists (...) -> isso não é uma pergunta, é uma afirmação.
Exemplo de uso: if (key_exists (...)) ... - array_contains_element (...) -> isso não é uma pergunta, é uma afirmação.
Exemplo de uso: if (array_contains_element (...)) ...
Então, para reafirmar a pergunta, todos estão significando afirmação quando dizem pergunta ?
Respostas:
O objetivo das convenções de nomenclatura não é fazer com que seu código seja lido como inglês; portanto, você deve estar analisando um pouco demais. Em muitos idiomas, é costume prefixar um método ou função retornando um resultado booleano ou uma variável booleana
is
quando isso faz sentido. Existem outras tradições (por exemplo, Lisp, Ruby), nas quais um sufixo?
é usado. (Uma tradição mais antiga do Lisp é o sufixo-p
do predicado ).is_transparent
deve ser um método de um objeto de pixel. Se você estiver em uma língua que não tem objetos, mas deseja simular um estilo OOP, então o tipo normalmente seria o prefixo:Pixel_is_transparent
. Observe que o prefixois
é usado apenas para destacar a natureza booleana desse método; já está implícito pela chamada do método (pixel.transparent
funciona também, mas isso pode se tornar muito ambíguo com outros nomes de propriedades).at_eof
. Isso interpreta o final do arquivo como um local no fluxo, enquantostream.is_eof
também funcionaria: aqui, o EOF é um estado específico.collection.exists(key)
seria melhor.array_contains_element
não é um bom nome de método, pois contém um tipo e o desnecessárioelement
. Melhor:array.contains(elem)
.Todos os nomes que sugiro são asserções, ou mais precisamente: predicados. O uso de perguntas não faz nenhum sentido lingüístico quando esses predicados são usados em um contexto if-then-else . A palavra “ asserção ” provavelmente não é ótima aqui, pois é usada para descrever o teste de invariantes em muitos idiomas. A palavra " predicado " seria melhor: uma afirmação verdadeira ou falsa. Uma afirmação é formulada como se fosse verdadeira, não como uma pergunta. A declaração
1 ∈ {}
- “1
é elemento do conjunto vazio” ou “o conjunto vazio contém1
” é uma declaração falsa. A pergunta "o conjunto vazio contém o número 1?" pode ser respondido com sim ou não, mas não é verdadeiro ou falso.fonte