Solo hay dos cosas difíciles en Ciencias de la Computación: invalidación de caché y nombrar cosas
_Phil Karlton
A pesar de ser una de las formas más fáciles de mejorar la calidad del código, escribir buenos nombres de variables es quizás la habilidad más pasada por alto en la caja de herramientas de un desarrollador. Afilar tus habilidades de nomenclatura es una forma segura de mejorar la legibilidad de tu código independientemente de la complejidad del proyecto.
Hay mucho consejo sobre cómo mejorar tus habilidades de nomenclatura. Recopilé una lista con los algunos de los consejos más útiles para crear nombres de variables efectivos, concisos y legibles.
Proporciona información valiosa
En el software, el nombre de una cosa tiene un solo objetivo: aclarar lo que hace y por qué existe. Las variables que te dan esta información te ahorran tener que descifrar cómo encajan en el código.
- Graba significado en cada nombre. El nombre debe describir con precisión la entidad que representa.
// Ninguno de estos nombres proporciona información útil
int d;
String n;
boolean sg;
// Estos nombres declaran claramente lo que representan
int distanceFromEarthInLightYears;
String starName;
boolean isSupergiant;
-
Incorpora conocimiento significativo del dominio en el nombre. Debe quedar claro qué entidad del dominio representa una variable. Un nombre como bitFlag no es tan significativo como isUserLoggedIn o isEngineReady. Siempre que sea posible, prefiere nombres que tengan relaciones claras con el dominio de tu problema.
-
Usa tu conocimiento de software. Factory y List son palabras con un significado especial para los desarrolladores de software. Las palabras para conceptos de programación te permiten expresar ideas complejas en pocas palabras que son fácilmente comprensibles por otros programadores. De hecho, la jerga de programación te ofrece montones de compresión de información gratis, así que siéntete libre de usarla.
Recorta lo innecesario
Los buenos nombres logran un equilibrio entre ser informativos y concisos. En otras palabras, quieres que los nombres sean instructivos y al mismo tiempo sean eficientes y legibles.
- No pongas información de tipo en el nombre. Los lenguajes modernos estáticamente tipados han hecho obsoletos nombres como stringName. Incluso cuando trabajas con lenguajes dinámicamente tipados, este enfoque solo infla el tamaño del nombre.
// En lugar de escribir nombres como estos
public class Dog{
private int intAgeInYears;
private String stringName;
private boolean boolHasOwner;
}
// Mantén la información de tipo fuera de los nombres de variables
public class Dog{
private int ageInYears;
private String Name;
private boolean hasOwner;
}
- Mantén el contexto inútil fuera. No pongas en el nombre de una variable información como la clase, paquete o módulo al que pertenece.
public class Shape{
private int shapeWidth;
private int shapeHeight;
private String shapeName;
}
//Ya sé que es una forma, no hay necesidad de repetirlo en cada variable
public class Shape{
private int Width;
private int Height;
private String Name;
}
- (¿Controvertido?) No uses prefijos en variables miembro o interfaces. En algunos lugares es común usar prefijo m en variables miembro o la letra I en interfaces. Como las herramientas modernas de edición proporcionan esta información, yo descarto este tipo de prefijo.
public interface IProduct{...}
//Salta la I, no agrega ninguna distinción significativa junto a la palabra 'interface'
public interface Product{...}
No dejes que el nombre interfiera con tus herramientas
- Usa nombres fáciles de pronunciar. Nosotros, los humanos, tenemos capacidades increíbles de procesamiento del lenguaje. Las abreviaciones impronunciables son más difíciles de ‘procesar’ que las palabras normales. Con esto en mente, esfuérzate por mantener tus nombres amigables para el cerebro.
//Evita usar abreviaciones impronunciables en un intento de acortar un nombre
private String cchdPgHdr
private String cachedPageHeader;
- Usa nombres fáciles de buscar. Hacer que tus nombres sean buscables te ayuda a ahorrar mucho tiempo. Usar números mágicos o nombres muy cortos como ‘se’ hacen que encontrar la variable que necesitas sea más difícil. Siempre que sea posible, evita nombres que devuelvan docenas de resultados cuando los busques.
Refuerza la consistencia en todos los nombres
- Usa antónimos para variables que representan lo opuesto. Esta es otra forma de usar las habilidades lingüísticas de tu cerebro a tu favor. En este caso, el mapeo palabra-concepto hace obvia la relación entre variables.
// Estos pares de variables tienen una relación obvia entre sí
private String oldCityMotto;
private String newCityMotto;
private int firstDigit;
private int lastDigit;
// Evita pares de palabras que representen conceptos opuestos indirectamente, esfuérzate por elegir el antónimo obvio
private Element first; // En vez de usar 'first' y 'tail', usa 'head' y 'tail'
private Element tail;
- Elige una palabra por concepto y manténla. Nuestros cerebros aman la consistencia. No tener que hacer malabarismos con varias palabras para un solo concepto ahorra mucho esfuerzo mental.
private ElementController valveController;
...
private ElementController switchController;
...
private ElementController turbineController;
...
//Evita usar diferentes palabras para representar el mismo concepto
private ElementController speakerManager;
- Está bien nombrar índices de bucle con i,j,k… La mayoría de las variables índice no necesitan explicación extra. Hay varias técnicas para mejorar la legibilidad de un bucle. Sin embargo, usar index o nth como índice raramente mejora algo.
Los buenos nombres son sobre empatía y acuerdo
Los buenos nombres de variables provienen del mismo lugar del que surgen todas las buenas prácticas de programación: empatía. Reconocer tu código como un medio de comunicación con tus compañeros desarrolladores es el primer paso para lograr gran calidad en tus proyectos. Con este propósito en mente, transforma cada nombre de variable que escribas en un mensaje claro para todos los que lean tu código.
Por último, las convenciones de nomenclatura son tus aliadas. Crear convenciones con las que todos en el equipo estén de acuerdo es una forma fácil de evitar dolores de cabeza. No necesitas empezar desde cero, ya que la mayoría de los lenguajes de programación tienen guías de nomenclatura que puedes consultar en cualquier momento. Solo para listar un par de ellas:
Qué hacer a continuación:
- Comparte este artículo con amigos y colegas. Gracias por ayudarme a llegar a personas que podrían encontrar útil esta información.
- Puedes encontrar más información sobre este tema en el capítulo 2 de Clean Code y el capítulo 11 de Code Complete.
- Envíame un email con preguntas, comentarios o sugerencias (está en la página Autor)