jueves, 7 de junio de 2012

Notas sobre lenguajes de programación

Estas notas sobre lenguajes de programación pueden llegar a ser muy diversas y me gustaría que los lectores del tema mandaran sus propias notas con el objetivo de ver actuar distintos lenguajes sobre un problema especifico.

1. Problema: Invertir el orden de los campos de una cadena separada por punto (.)
    Caso: podemos imaginarnos un servicio DHCP que ejecuta un shell script para actualizar dinamicamente el DNS.  El hostname y dirección IP son pasados como argumentos al shell script. Se requiere invertir el orden de la direccion IP para llenar el registro inverso del DNS.

Solución con awk:

echo "192.168.0.1"| awk -F "." '{print $4"."$3"."$2"."$1 }'

Solución con el mandato read nativo de shell script

IFS="."; echo 192.168.0.1|read a b c d;  echo "$d.$c.$b.$a"

En ambos casos se define el separador de campo y el orden es establecido conforme lo necesario, la solución usando read se ejecuta en la mitad del tiempo (0.002seg)  que la de awk.

Es notable que la cantidad de caracteres utilizados para escribir ambas lineas de código es casi la misma, siendo la de read apenas mas corta, la semántica es idéntica  y pese a las diferencias en la sintaxis, en composición son perfectamente análogas.

Llama la atención que la existencia de la función read dentro del shell script parece equipararlo con awk, al menos en este caso.

2. Problema: Convertir una serie de registro de una base de datos a la notacion de JSON únicamente con SQL

SELECT 
     CONCAT("[",
          GROUP_CONCAT(
               CONCAT("{username:'",username,"'"),
               CONCAT(",email:'",email),"'}")
          )
     ,"]") 
AS json FROM users
Resultando en:




 [  {username:'mike',email:'mike@mikesplace.com'},
     {username:'jane',email:'jane@bigcompany.com'},
     {username:'stan',email:'stan@stanford.com'}  
]
En un lenguaje de propósito general bastaría o se tendría que usar variables auxiliares para acomular los registros previamente formateados.

No hay comentarios:

Publicar un comentario