Muchas convenciones de nomenclatura recomiendan que los métodos que devuelven un valor booleano (también llamados métodos predicados ) se nombren después de una pregunta . Mi pregunta es: ¿no significan realmente que los métodos deben nombrarse después de una afirmación ?
La diferencia puede ser sutil, pero terminas con nombres diferentes en algunos casos:
- pregunta : is_pixel_transparent (...)
- aserción : pixel_is_transparent (...)
A veces, esto no hace ninguna diferencia y la redacción es la misma:
- pregunta : end_of_file (...)
- aserción : end_of_file (...)
Además, parece que la mayoría de las veces, lo que las personas llaman "preguntas" son en realidad afirmaciones .
- key_exists (...) -> esto no es una pregunta, es una afirmación.
Ejemplo de uso: if (key_exists (...)) ... - array_contains_element (...) -> esto no es una pregunta, es una afirmación.
Ejemplo de uso: if (array_contains_element (...)) ...
Entonces, para reafirmar la pregunta, ¿todos quieren decir afirmación cuando dicen pregunta ?
naming
naming-standards
boolean
almiar
fuente
fuente
Respuestas:
El objetivo de las convenciones de nomenclatura no es hacer que su código se lea como inglés, por lo que podría estar analizando en exceso un poco. En muchos idiomas, es habitual prefijar un método o función que devuelve un resultado booleano o una variable booleana
is
, cuando tiene sentido. Hay otras tradiciones (por ejemplo, Lisp, Ruby), donde?
se usa un sufijo en su lugar. (Una tradición más antigua de Lisp es el sufijo-p
para predicado ).is_transparent
debe ser un método de un objeto de píxeles. Si usted está en un idioma que no tiene objetos, pero desee simular un estilo de programación orientada a objetos, entonces el tipo normalmente sería el prefijo:Pixel_is_transparent
. Tenga en cuenta que el prefijois
solo se utiliza para resaltar la naturaleza booleana de este método; ya está implícito en la llamada al método (tambiénpixel.transparent
funciona, pero esto puede volverse demasiado ambiguo con otros nombres de propiedades).at_eof
. Esto interpreta el final del archivo como una ubicación en la secuencia, mientrasstream.is_eof
que también funcionaría: aquí, el EOF es un estado específico.collection.exists(key)
sería mejor.array_contains_element
no es un buen nombre de método, ya que contiene un tipo y lo innecesarioelement
. Mejor:array.contains(elem)
.Todos los nombres que sugiero son afirmaciones, o más precisamente: predicados. Usar preguntas no tiene ningún sentido lingüístico cuando estos predicados se usan en un contexto si-entonces-otro . La palabra " afirmación " probablemente no es óptima aquí, ya que se utiliza para describir la prueba de invariantes en muchos idiomas. La palabra " predicado " sería mejor: una declaración que sea verdadera o falsa. Una declaración está redactada como si fuera verdad, no como una pregunta. La declaración
1 ∈ {}
: "1
es un elemento del conjunto vacío" o "el conjunto vacío contiene1
" es una declaración falsa. La pregunta "¿el conjunto vacío contiene el número 1?" se puede responder con sí o no, pero no es verdadero o falso.fuente