30 agosto, 2008

Python: Reduciendo código

En estos días estuve incursionando y husmeando Python como lenguaje complementario para utilizarlo en la automatización de tareas en los servidores FreeBSD (backups de logs, actualización de los ports, chequeo de discos, etc).

Me encontre con un lenguaje comprimido y muy interesante ya que el codigo a escribir se reduce muchismo; por ejemplo no hace falta declarar variables, compilar, llamar a librerias estandar como la matematica, etc.

A modo de ejemplo traigo un programa hecho en C y su análogo en Python. El programa fue extraido de "El lenguaje de programación C" de Dennis M. RItchie y Brian W. Kernighan.

El mismo antes de mostrarlo hace una conversión entre temperaturas en Grados Celsius y Farenheit y arroja la siguiente sálida:

0 -17.8
20 -6.7
40 4.4
60 15.6
80 26.7
100 37.8
120 48.9
140 60.0
160 71.1
180 82.2
200 93.3
220 104.4
240 115.6
260 126.7
280 137.8
300 148.9

Código en C
----------------------------------------------------------------------------------------------------------------------------------------

#include
#include


main () {

float celsius, fahr;
int piso, techo, incremento;

piso = 0;
techo = 300;
incremento = 20;

fahr = piso;

while (fahr <= techo) {

celsius = (5.0/9.0)*(fahr-32.0);
printf ("%3.0f %6.1f\n", fahr, celsius);
fahr = fahr + incremento; }

}

-----------------------------------------------------------------------------------------------------------------------------------------

Código en Python
-----------------------------------------------------------------------------------------------------------------------------------------

#! /usr/bin/env python


piso = 0
techo = 300
incremento = 20

fahr = piso

while fahr <= techo:

celsius = (5.0/9.0)*(fahr-32.0)
print '%3.0f %6.1f' % (fahr, celsius)
fahr = fahr + incremento

----------------------------------------------------------------------------------------------------------------------------------------

Si lo quieren probar, en C hay que compilar (gcc -o conversor celsius.c) y luego ejecutarlo (./conversor). Para python se ejecuta directamente (./conversor.py).

La primer diferencia que salta a la vista es que el codigo se reduce drásticamente. Sin contar espacios en blanco, el programa en C abarca 14 lineas y en Python 9 lineas (un %36 menos de lineas de codigo).

La causa de esto principalmente es que en Python no hace falta declarar las variables y luego asignarles el valor por separado, sino que el interprete se encarga de declararla y nosotros sólo debemos preocuparnos por asignar el valor a dichas variables.

Otra cosa que reduce el espacio es que no se tuvo que invocar ninguna libreria dentro del programa, sino que también de eso se encarga el intéprete (sobretodo las librerias matemáticas hasta en c++ deben ser invocadas).

Por último el formato de la sálida es exactamente igual a C (restricción de decimales, justificación del texto), aunque mucho más fácil de escribir y comprender la linea de codigo, no para este sino para salidas más complejas.

En fin, un lenguaje ordenado, compacto y muy completo para utilizar y con gran cantidad de documentación y una masa de usuarios cada vez más grande.