miércoles, 11 de enero de 2012

Conceptos básicos de Ruby

En el presente post vamos a tomar un barniz del lenguaje de programación Ruby. Para ello, se presupone que el lector ya tiene instalado Ruby en su equipo (Descarga de Ruby). Recomiendo leer mi post anterior (Primera toma de contacto con Ruby), el cual da unas nociones preliminares, y que seguro será útil para el lector.

Para entender los conceptos claramente, lo mejor es ilustrarlo con un ejemplo muy sencillo:


La línea 1 es un comentario. No ejecuta nada. Es un texto que sirve para aclarar qué se va a hacer. El comentario abarca desde que aparece el símbolo pragma (#), hasta el final de la línea.

La línea 2 (print('Escribe tu nombre: '), visualiza en pantalla el texto encerrado entre las comillas, sin realizar un retorno de carro (línea siguiente). Da igual utilizar comillas simples o dobles.

La línea 3 declara una variable (nombre), a la cual se le asigna (mediante el símbolo de "igual") la expresión que hay a la derecha, en este caso, la función gets, la cual captura mediante teclado una cadena texto, hasta que el usuario pulsa Enter. El nombre de la función se debe a "get" (obtener) y "s" ("string" o cadena de texto).

La línea 4 realiza lo mismo que la línea 2, pero con otro texto. La línea 5 define otra variable (edad), a la cual le asigna la cadena capturada por gets, pero cuyo resultado (la cadena), es convertida a un número entero mediante la función to_i ("to integer" o "a entero"). Esta línea es interesante porque se pueden explicar varias cosas interesantes. En primer lugar, las funciones suelen escribirse con paréntesis, aunque no tengan argumentos. En la línea 3 se omitieron los paréntesis, ya que Ruby lo interpreta de la misma manera. Otro punto interesante es que, en Ruby, todo es un objeto. Los objetos tienen propiedades (valores) y acciones (métodos o funciones), a los cuales se accede escribiendo un punto después del objeto, y escribiendo el nombre de la propiedad o de la acción. En este caso, gets retorna una cadena de texto, que en sí es un objeto, por lo que tienen acciones asociadas, en este caso, la acción to_i, la cual retorna un valor numérico entero correspondiente de la conversión de la cadena a número. Si no es posible la conversión, retornará un cero. Resumiendo, la variable edad capturará en un número entero que el usuario introduce por teclado.

La línea 7 muestra un texto, al igual que print, pero puts añade un retorno de carro al final, cambiando de línea para la siguiente impresión. Dentro del texto a imprimir (entre comillas), aparece la expresión #{expr}, la cual sustituye todo por el valor contenido dentro como expr, la cual puede ser una variable, un cálculo o cualquier expresión que retorne un valor. En este caso, sería el valor de la variable nombre.

La línea 8, realiza una operación similar, pero demostrando que la variable nombre es un objeto de tipo string, y accediendo al método length, el cual retorna el número de caracteres de la cadena de texto. En este caso, se observará que retorna la longitud más uno, debido a que también atrapó el carácter de retorno de línea (al pulsar Enter). Para corregir este defecto se podría utilizar la expresión "#{nombre.length-1}"

La línea 13 realiza una evaluación condicional, preguntando si el valor (if (condición) then / si (condición) entonces) de la variable edad es menor de 18, en cuyo caso imprimirá en pantalla el literal "menor", si no (else) imprimirá el literal "mayor". El bloque de condiciones termina en la línea 17, con end.

Este código se guarda en un archivo (por ejemplo: pruebaruby1.rb). Para ejecutarlo, desde la consola de comandos se lanza la siguiente sentencia:

$ ruby pruebaruby1.rb



Escribe tu nombre: Rafael
Escribe tu edad: 40
Hola, Rafael
Tu nombre tiene 7 caracteres
Eres mayor de edad, y te quedan 27 anos para jubilarte
Encantado de conocerte. ADIOS