Sobre los nombres
- ✅ Los nombres deben reflejar una intención
- Deben indicarte por qué existen, qué hacen, y cómo se usarán.
- Deben representar su contexto.
- ✅ Evita usar abreviaciones.
- Utiliza
hypotenuse
en vez dehp
.
- Utiliza
- ✅ No escribas los nombres según su estructura de datos
- Usa
accounts
en vez deaccountList
.
- Usa
- ✅ No utilices nombres que no se evidencia una diferencia.
- Encontrar la diferencia entre
ControllerForEfficientHandlingOfStrings
yControllerForEfficientStorageOfStrings
… 😫
- Encontrar la diferencia entre
- ✅ No nombres las variables sólo para satisfacer al compilador.
- No utilices
name1
porquename
ya está ocupado.
- No utilices
- ✅ Evita usar palabras que generan ruido.
ProductData
yProductInfo
parecieran significar lo mismo.- De la misma manera, palabras como
a...
,an...
,the...
también son palabras que hacen ruido, por ejemplo nombrar una variableproduct
es suficiente, no necesitamostheProduct
. - Palabras redundantes también son ruidosas, usa
name
en vez denameString
.
- ✅ Distingue los nombres para que el lector sepa cuál debe utilizar.
- ✅ Utiliza nombres fáciles de pronunciar. (Difícil cuando tu idioma nativo no es inglés)
- ✅ Utiliza nombres que puedas buscar.
- Utiliza constantes en vez de valores en duro,
WORK_DAYS_PER_WEEK = 5
en vez de5
.
- Utiliza constantes en vez de valores en duro,
- ✅ Incluir unidades de medida en las variables.
- Usar
expiryTimeInSeconds
es mejor queexpiryTime
. - No es lo mismo que
expiryTimeLocalDate
donde indicamos el objeto o la estructura de datos que lo contiene.
- Usar
- ✅ El largo del nombre de una variable debe ser correspondido por su alcance. (scope)
- Puedes tener una variable
i
dentro de unfor loop
, pero noi
como variable de instancia.
- Puedes tener una variable
- ✅ Clases y objetos deben tener sustantivos o frases nominales.
- Evita palabras como
Manager
,Processor
,Data
oInfo
en el nombre de las clases, son muy genéricos y no entregan valor a lo que hace la clase. - Si el nombre de tu clase termina con
er
,or
outils
, debieras considerar la responsabilidad de la clase, si no posees una buena justificación, piensa en un nuevo nombre. - El nombre de la clase no debe ser un verbo.
- Evita palabras como
- ✅ Los métodos, en cambio, deben tener un verbo.
- ✅ Cuando los constructores sean sobrecargados, intenta usar métodos estáticos de factory con nombres que describan sus argumentos.
Complex fulcrumPoint = Complex.FromRealNumber(23.0)
es mejor queComplex fulcrumPoint = new Complex(23.0)
.
- ✅ Elige un concepto abstracto de una palabra y reutilízalo.
- Es confuso tener
fetch
,retrieve
yget
como métodos equivalentes de clases diferentes. - Si utilizarás
retrieve
para indicar el retorno de datos de un método en una clase, usa esa palabra en todas tus clases y no cambies porget
ofetch
a tu antojo.
- Es confuso tener
- ✅ No agregues contexto adicional.
- Para la aplicación “Gas Station Deluxe”, es una mala idea usar en cada clase el prefijo
GSD
. - Por ejemplo,
AccountAddress
en vez deGSDAccountAddress
.
- Para la aplicación “Gas Station Deluxe”, es una mala idea usar en cada clase el prefijo
- ✅ Está correcto utilizar términos relacionados a la informática, ciencia de datos, términos matemáticos, nombre de patrones o nombres de algoritmos.
- Usar siempre el dominio del problema para determinar nombres puede resultar complicado, por lo tanto, podemos usar los nombres del dominio de la solución según sea necesario.
- ✅ No agregues más contexto a un nombre del necesario.
- Los nombres más cortos son mejores que los largos, siempre que sean claros.
Por último, si llevas más de 10 minutos eligiendo un nombre, explica a un compañero lo que hace tu clase y pídele que te sugiera un nombre que concentre la esencia de esta. Si tus compañeros al leer el nombre de la clase, coinciden en lo que suponen que hace, el nombre que elegiste es el correcto.