Sie sind auf Seite 1von 7

Estilo de programacin

Hace referencia a como formateamos el cdigo que estamos desarrollando, tales


como llaves, indentacin, parntesis, el espaciado, etc. Esto puede diferir entre
lenguajes de programacin.
Los lenguajes de programacin tienen la particularidad de cumplir un doble rol. Por
un lado sirven para comunicar humanos con computadoras. Son la forma de
transformar una serie de abstracciones como algoritmos, mdulos, tipos de datos
y sistemas en algo que una computadora pueda ejecutar. El segundo rol, y que no
se ve tanto a primera vista, es que un lenguaje de programacin sirve para
comunicar humanos con humanos. Por ejemplo, para que alguien le cuente un
algoritmo a otro. O en muchos casos para que un programador pueda maana
recuperar las ideas que volc en cdigo hoy.
Dado lo anterior, debera ser clara la motivacin para poner atencin en el
estilo de programacin. Los aspectos que normalmente se denominan "estilo" son
aspectos relacionados a los lenguajes como medio de comunicacin entre
personas, y que usualmente no influyen en la comunicacin humano-mquina.
Las reglas de estilo son flexibles. Esto no significa que uno va escribiendo y
cambiando de estilo. Es muy importante dentro de un mismo proyecto mantener
siempre las mismas reglas rgidas, aunque estas sean distintas a las que uno usa
en otros proyectos. Incluso, cuando se trabaja sobre un proyecto escrito por otro,
es mejor adaptarse al estilo en que est escrito en vez de mezclarlos.
No basta con escribir un programa que funcione. El cdigo tiene que estar
bien escrito. El problema del estilo es muy recurrente en el desarrollo de software.
Muchas veces se escribe el cdigo pensando que la nica persona que lo
modificar es el mismo programador. Y cuando llega alguien ms, y comienza a
revisar el cdigo, comienzan los problemas. Peor an es cuando se mezclan
estilos de programacin. Que si uno usa notacin hngara, que si otro emplea
camelCase, que si otro prefija las variables con el alcance de la variable, que si
para las variables miembro se les prefija con una m_, o simplemente con el guin
bajo, o no se les prefija. El no tener estilos claros podrian generar en estructuras
como:
#define _ -F<00||--F-OO--;
int F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
_-_-_-_
_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_

_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_
_-_-_-_
}

Evidentemente no queremos que nuestro cdigo sea igual de intentendible


que el anterior. El ejemplo anterior corresponde a un estilo de programacin
definida como codigo ofuscado [15], que busca no hacer compesible el codigo
fuente de los programas y resulto el ganador del International Obfuscated C Code
Contest [16] de 1988[17]
As, la meta final del programador es construir programas. Y el ideal es
construir "buenos" programas. Hay diversas cualidades generalmente aceptadas
de lo que es un programa "bueno", y cualquier herramienta, tcnica o mtodo que
nos ayude a mejorar esas cualidades es bienvenida.
Las cualidades que se ven beneficiadas de forma ms directa por un buen
estilo son [1]:

Extensibilidad: La facilidad con que se adapta el software a cambios de


especificacin. Un buen estilo de cdigo fomenta programas que no slo
resuelven el problema, sino que tambin reflejan claramente la relacin
problema/solucin. Esto tiene como efecto que muchos cambios simples en
el problema reflejen de forma obvio los cambios a hacer en el programa.
Verificabilidad: la facilidad con que pueden comprobarse propiedades de un
sistema. Si el estilo de cdigo hace obvia la estructura del programa, eso
ayuda a verificar que el comportamiento sea el esperado.
Reparabilidad: la posibilidad de corregir errores sin demasiado esfuerzo.
Capacidad de evolucin: la capacidad de adaptarse a nuevas necesidades.
Comprensibilidad: la facilidad con que el programa puede ser comprendido.

Algunas consideraciones al momento de programar con estilos [1]:

El estilo del cdigo no es un resultado final, sino algo para preservar a lo


largo de toda su escritura. Es cierto que las primeras veces escribir con
estilo requiere un esfuerzo consciente, una vez que uno se acostumbra al

estilo, seguirlo deja de ser un esfuerzo adicional. Usualmente es ms


trabajo "arreglar un cdigo despus, que escribirlo bien desde el principio".

El estilo debe ser uniforme en un mismo proyecto. Al leer un cdigo, uno se


acostumbra al estilo usado en una forma que permite entenderlo con un
vistazo general. Si hay cdigo con estilos mezclados, leer algo con un estilo
despus de haberse acostumbrado a leer algo con otro puede ser confuso.
Por ejemplo, si dos tramos de cdigo usan distintas abreviaturas para lo
mismo, o distintas formas de indentar (que pueden hacer que dos
estructuras de control iguales se vean diferentes).

El estilo de cdigo debe promover programas que pueden ser


comprendidos de forma inmediata (suponiendo el conocimiento del
problema que ste resuelve). Los problemas de computacin ya son
complejos y no hay motivo para aumentar su complejidad con cdigo
rebuscado. Los programas debern ser soluciones, no problemas.

El estilo no debe promover fragmentos de cdigo que le dan demasiada


importancia a detalles irrelevantes. Escribir demasiado, le da relevancia a
aspectos no fundamentales, y ocupa la atencin en aspectos secundarios
del programa. Un buen programa debera enfocar la atencin en lo
importante, y permitir abstraerse de los detalles.

El estilo de indentacin debe permitir ver la estructura del cdigo sin mirar
el cdigo en s (es decir, con solo ver la distribucin de espacio en blanco y
espacio escrito). Cuando se busca un tramo de programa o se lee rpido,
uno puede visualizar la distribucin de espacio blanco/no blanco pero no
tiene
tiempo
para
ver
estructuras,
o
concordancia
de
parntesis/llaves/corchetes.

El estilo de indentacin debe poder usarse de la misma forma en distintos


lenguajes y verse similar (para construcciones lingusticas similares).
Muchas veces es necesario cambiar de lenguaje (entre un proyecto o entre
varios), y preservar un estilo uniforme permite no tener que estar fabricando
reglas nuevas cada vez.

El estilo de cdigo debe permitir fcilmente realizar cambios bsicos en el


cdigo: agregar una lnea a un bloque, borrar una lea de un bloque, mover
lneas en un bloque. Este tipo de cambios es muy usual, y si el estilo
dificulta realizarlos interrumpe en la forma de trabajo.

El nombre de un objeto cualquiera del programa (funcin, variable, tipo),


debe permitir identificar el objeto de forma no ambigua rpidamente dentro
del rea de visibilidad del objeto Un estilo de esta forma permite leer el
cdigo sin tener que detenerse en cada identificador a recordar (o buscar)
donde estaba definido y que era.

Los estilo de indentacin ms importantes se muestran a continuacin:


No hay un "estilo correcto", sino que hay muchos. Definitivamente hay
distintos criterios sobre cul de ellos es el mejor, y discusiones bizantinas al
respecto. De todos modos, si hay un acuerdo bastante generalizado sobre varias
cosas que se consideran "mal estilo".

Estilo K&R
El estilo K&R es el ms usado en el lenguaje C y PHP. El estilo K&R, fue llamado
de esta forma porque fue usado por Kernighan y Ritchies en su libro The C
Programming Language [4]. Se trata de abrir la llave en la misma lnea de
declaracin de la orden, indentando los siguientes pasos al mismo nivel que la
llave y cerrando la llave en el mismo nivel que la declaracin.
Ejemplo

function saludar($val) {
if($val == 1) {
echo "HOLA";
}
else {
echo "CHAO";
}
}
La ventaja de este estilo es que la llave de apertura no requiere una linea extra y
llave de finalizacin se alinea conceptualemente a la declaracin conceptual a la
que pertenece. Una desventajade este estilo es quela llave final de un bloque
toma una linea enterf, el cual podria se parcialmente resuelto en los bloques
if/else y do/while

Estilo Allman
El estilo Allman fue definido por Eric Allman. Se trata de crear una nueva lnea
para las llaves, e identar el cdigo debajo de ellas. La llave de cierre tiene el
mismo identado que la de inicio

function saludar($val)
{
if($val == 1)
{
echo "HOLA";
}
else
{
echo "CHAO";
}
}
Ventaja de este estilo es que la indentacin del codigo claramente
diferencia las instrucciones de un bloque con la declaracin condicional.
Una desventaja de este estilo es que cada llave de finalizacin ocupa una
linea entera sin aadir ningun codigo. Este problema era importante cuando un
programador programaba codigo en un terminal que mostraba 24 lineas.

Estilo BSD KNF


Tambien conocido como estilo Kernel Normal Form, es la manera ms
usada para el codigo de la distribucin del software del sistema operativo de
Berkeley. Es un extensin del estilo K&R. Se define un tabulador duro (8 espacios)
el cual es usado para indentar bloques de codigo, mientras un tabulador suave (4
espacios) para todas las lineas continuas que exceden el espacio de vision de la
consola
function saludar($val) {
//AQUI EXISTE UNA LINEA QUE EXCEDE EL ESPACIO DE VISION DE LA
CONSOLA, AQUI EXISTE UNA
LINEA QUE EXCEDE
if($val == 1) {
echo "HOLA";
}
else {
echo "CHAO";
}
}

Estilo Whitesmiths

El estilo Whitesmiths tambien llamado estilo Wishart. Este estilo coloca las
llaves asociadas con la instrucciones de control indentada en la siguiente linea.
Este estilo pone la llave que sigue a la declaracin de un bloque se realiza
indentada en la lnea siguiente. Instrucciones dentro del bloque son indentados en
el mismo nivel que la llave.
function saludar($val)
{
if($val == 1)
{
echo "HOLA";
}
else
{
echo "CHAO";
}
}
Las ventajas obtenidas mediante la implementacin de este estilo son las
mismas del estilo Allman en que los bloques son claramente separados desde la
instruccin de control, Sin embargo en el estilo Whitesmiths, el bloque est
conectado visualmente a su declaracin de control. Otra ventaja es que la
alineacin de las llaves con el bloque entero es visto como un solo conjunto de
instrucciones. Adems, las llaves hacen hincapi en que el contenido del bloque
estn subordinados a la declaracin de control
Una desventaja de este estilo podria ser que las llaves ocupan una linea
entera.
Otro inconveniente podra ser que el la llave de cierre no se alinea con la
declaracin a la que conceptualmente pertenecen, aunque otros sostienen que el
cierre de llaves pertenece a la llave de apertura y no a la declaracin de control.

Estilo GNU
El estilo GNU coloca una llave sobre la siguiente linea. Las llaves son
indentadas por 2 espacios,y el codigo que contiene indentada por 2 espacios
adicionales.
function saludar($val)
{
if($val == 1)

{
echo "HOLA";
}
else
{
echo "CHAO";
}
}