"Da sentido mediante los nombres." 鉁嶐煆 Cualquier lector

馃寗 Objetivo: Claridad

Un programa expresa un proceso con detalle en un lenguaje no ambiguo. Definici贸n perfecta para el c贸digo que ejecuta un ordenador. Pero si queremos que alguien, seguramente nosotros mismos, lo podamos modificar en el futuro, entonces el lenguaje debe adem谩s ser comprensible.

Cuando elegimos un lenguaje (idioma) de alto nivel para escribir un programa es porque queremos expresar claramente lo que va a hacer durante la ejecuci贸n. Si no fuese as铆, deber铆amos escoger lenguajes optimizados para el rendimiento u otros criterios. Pero, casi todo el desarrollo empresarial moderno escoge la claridad antes que la velocidad. 驴Por qu茅 ser谩?

Los desarrolladores profesionales nos enfrentamos siempre a problemas de negocio complejos. Si fuesen sencillos no gastar铆an el dinero en nosotros. Y hablando de dinero, el presupuesto que nos asignan cubre a duras penas las necesidades reales. As铆 que no iremos sobrados de tiempo.

Luego tenemos problemas complejos y poco tiempo. 驴De verdad que adem谩s queremos c贸digo enrevesado? Por supuesto que no, queremos que el c贸digo se lea f谩cilmente y se entienda con el menor esfuerzo posible. Y para ello, si podemos, debemos elegir la claridad ante cualquier otra caracter铆stica.

Mostrar la INTENCI脫N

Al hablar de claridad en el c贸digo nos referimos a mostrar en el lenguaje escrito la intenci贸n del programador del proceso. El lenguaje (idioma) de programaci贸n suele ser de prop贸sito general. Es decir sirve para desarrollar un video juego, una tienda online o una aplicaci贸n de gesti贸n.

As铆 que el lenguaje de programaci贸n, per se, no nos va a ayudar a expresar la intenci贸n que tenemos durante el desarrollo. Tenemos que enriquecer ese lenguaje, idioma, con un vocabulario propio del modelo que estamos codificando.

Nuestra primera parada en la creaci贸n de este lenguaje (idioma) ser谩n los sustantivos. Es posible que en tu juego aparezca el concepto de partida, jugador o puntuaci贸n. En una tienda online tendremos pedidos, art铆culos y precios. Las aplicaciones de gesti贸n empresarial hablar谩n de clientes, proveedores, facturas, citas o presupuestos.

Normalmente los conceptos de negocio que acabo de recitar forman parte de una an谩lisis m谩s o menos formal del dominio del sistema. Suelen ser los nombres asignados a las entidades y sus atributos. En muchos casos aparecen en las bases de datos (estados congelados de uno o varios programas) o se accede a ellos mediante APIS (estados remotos de los programas).

Pues bien, el uso correcto de ese vocabulario es la base de la creaci贸n de un lenguaje (idioma) espec铆fico para tu prop贸sito. Y en ese lenguaje creado por ti, ser谩 mucho m谩s sencillo expresar y entender la intenci贸n del programador.

馃彫 Explica lo que vas a almacenar.

Los programas de ordenador manipulan informaci贸n almacen谩ndola en recursos de hardware. Desde la memoria vol谩til de trabajo a un disco f铆sico y remoto. Cada vez que almacenamos o recuperamos esa informaci贸n tenemos que referirnos a su localizaci贸n, su direcci贸n en t茅rminos coloquiales. Pero las direcciones de memoria, de sectores o de servidores no son aptas para el consumo humano. Son la ant铆tesis de la claridad. As铆 que para facilitar la labor usamos alias inventados para nuestro favor. H谩ganse las variables.

Una responsabilidad fundamental al programar es nombrar extraordinariamente bien las variables, constantes, clases, y propiedades de tus desarrollos. Sin excusas.

驴Y qu茅 significa hacerlo bien? Pues consiste en dar un nombre que explique claramente lo que se va a almacenar en cada caso. Para que esto no se quede en una gu铆a de buenas intenciones, tengo al intenci贸n de darte unos consejos que te sirvan de gu铆a.

Gu铆a para nombrar variables / propiedades / constantes / clases

Emplear siempre palabras completas y descriptivas.

// 馃あ Evita las abreviaturas:
cli, numInvs;// 馃崑 Usa siempre su versi贸n completa
client, numberOfInvoices;

Para que sean pronunciables y corregibles ortogr谩ficamente.

// 馃あ No hay quien lo pronuncia, ni detecte una mala escritura:
pndOrdr;// 馃崑 Usa siempre su versi贸n ortogr谩ficamente correcta
pendingOrders;

馃摎 Definiendo un vocabulario de negocio.

// 馃あ No uses distintos nombres para el mismo concepto:
client, customer;// 馃崑 establece un vocabulario m铆nimo
client;

Sin prefijos o sufijos t茅cnicos.

// 馃あ No uses distintos nombres para el mismo concepto:
ClientClass, intAmount;// 馃崑 establece un vocabulario m铆nimo
Client, amount;

Agregando valor sin redundancias.

// 馃あ no te repitas
client.clientAddress;// 馃崑 aprovecha el contexto
client.address;

Lo siento Harry, pero mejor sin magia.

// 馃敭 No magic numbers:
db = (h / 8) * 50;// 馃 Define constantes y as铆gnales el valor.
hoursByDay = 8;
amountPerHour = 50;
dailyBudget = (totalHours / hoursByDay) * amountPerHour;

wtf-naming

Reduce el n煤mero de WTF! 馃槫