La expresividad puede definirse informalmente con la heurística “el nivel de lindez del código”. En otras palabras, escribir un código expresivo es poner atención a las cuestiones que hacen que este código fuente sea más fácil de entender por una persona.
¿Por qué por una persona y no por una pc?
Para responder esa pregunta comparemos estos dos códigos en Pascal:
Function QuieroMoverElBote(a: Array of Integer, c:Integer):Real;
Var b : Integer; d : Real; e : Integer;
Begin
For b := 1 to c do
Begin
e := e + a[b];
End;
d := e / c;
QuieroMoverElBote := d;
End.
Function Promedio(numeros: Array of Integer, cantidad:Integer):Real;
Var i : Integer; sumatoria : Integer;
Begin
For i := 1 to cantidad do
Begin
sumatoria := sumatoria + numeros[i];
End;
Promedio := sumatoria / cantidad;
End.
En la segunda implementación puede verse con claridad el objetivo de este programa, mientras que en el primero está “escondido”. Sin embargo, la computadora ejecutando este código produce exactamente el mismo resultado con cualquiera de los dos programas. La diferencia está en el programador que lee un programa ó el otro.
Es por eso que muchas veces se suele considerar a la Expresividad como algo subjetivo. Sin embargo, en líneas generales, hay formas de alcanzar la expresividad.
En general, las técnicas que favorecen la mejor comprensión del código fuente (por un programador) son técnicas que no cambian en funcionamiento del programa. Entonces, si en última instancia el programa hace lo que corresponde, ¿Por qué habríamos de consumir tiempo escribiendo código expresivo?
En la industria actual de software (de hecho, en cualquier ambiente en el que sea necesaria la producción de software) existen ciertas características / problemas a resolver, consecuencia de que los programas son cada vez más grandes, complejos, y cambiantes. En consecuencia:
En consecuencia, la labor de un programador es en su amplia mayoría, leer y corregir código existente (propio ó de otro) y en menor medida producir código nuevo.
Es por todo esto que el código fuente no puede ser exclusivamente escrito para la computadora. El más importante destino del código son las propias personas. Es por eso que no se puede descuidar la expresividad: es una de las varias formas de hacer la vida del programador más sencilla, para que pueda abordar la construcción de sistemas como el mencionado.
Hay varias formas de lograr expresividad, entre las que se destacan:
Buen resumen (en inglés) http://c2.com/cgi/wiki?GoodVariableNames
El tiempo que uno gasta en encontrar/pensar un buen nombre, es tiempo bien aprovechado.
Identar el código (separar con espacios) es una buena manera de hacer que el código sea legible. Nuevamente, no debe abusarse de ésto, ni usarlo poco. Y respetar las convenciones del lenguaje es buena idea. En el ejemplo de arriba se ve claramente cómo la identación ayuda a leer mejor el programa, y de paso se respeta la identación sugerida de Pascal.