Leyendo Pickaxe: Ruby básico
Publicado el Lunes, 24 de enero de 2011Empiezo esta serie de posts para aprender Ruby con el capítulo 2 del libro Programming Ruby 1.9. El capítulo 1 describe cómo usar la línea de comando, instalar Ruby, ejecutar el código, documentación y demás. Me salteo este capítulo porque no me resulta tan divertido postear al respecto...
La "metodología" de estudio es: Estudio el material, escribo el código, lo ejecuto, lo modifico y pruebo los cambios. Después agarro el libro, el código y los apuntes, me alimento con ellos, lo proceso en mi estómago, y vomito el resultado en el Editor de entradas de WordPress que hace que se publique acá 😀
Resumen básico de Ruby
Ruby es un lenguaje "genuinamente" orientado a objetos. Todo es un objeto. La sintaxis es "limpia", no necesita punto y coma al final de una sentencia siempre y cuando se escriba cada una en una línea separada. Los comentarios se escriben con #
, y la indentación no es importante.
Los métodos se definen con def
, seguidos del nombre y los parámetros, los paréntesis para los parámetros son opcionales. Se termina el método con end
. Las variables no necesitan ser declaradas. Los paréntesis también son opcionales al pasarle parámetros a un método.
Estoy usando Emacs como editor de texto, que tiene coloreado de sintaxis y tabulación. Por ahora no necesito más. Para ir mirando un poco de sintaxis, algo así como un "Hola mundo". Para empezar, vengo corriendo los scripts desde la consola, así que agregué la ruta de ruby al principio del archivo para que encuentren cómo ejecutarse con ./
.
#!/usr/bin/ruby # -*- coding: utf-8 -*- #puts - método standard que muestra los argumentos en la consola #seguido de un salto de línea puts 'Leyendo Pickaxe...' puts 'Leyendo Pickaxe...'.length puts "El resultado de la vida, el universo y todo lo demás es par?" puts 42.even? #Pregunto si 42 es par... def saludar(nombre) resultado = "Buenos días, #{nombre.capitalize}" end puts saludar("fernando") puts saludar "alfredo" |
Podrán haber notado que el método "saludar" no tiene un retorno. En Ruby, el valor retornado por un método es el valor de la última expresión evaluada. Así que si bien podría haber puesto "return result", también podemos prescindir de él. Si les interesa ir siguiendo el código, les recomiendo ir escribiéndolo, modificándolo y viendo qué salida produce. Hay varios ejemplos de lo que comentaba más arriba.
Variables
Agrego algunos apuntes que saqué de los videos del curso de Ruby On Rails de la Universidad de Berkeley.
En Ruby cualquier variable puede guardar cualquier tipo (todo es un objeto). Siempre se pasa por referencia, al modificar el valor en un método, modificamos el original. Los nombres de las variables indican el alcance y no el tipo de variable.
El libro muestra una tabla con algunas convenciones para nombres de variables en Ruby. Como las de la presentación del curso es más extensa, hago un merge de ambos contenidos:
Tipo de variable | Nombre |
---|---|
Variable local | foo _bar _123 |
Variable de instancia | @foo @_123 |
Variable de clase | @@foo @@_123 |
Constantes | CONST Const |
Variables globales | $foo $_123 $Horse |
Constantes de módulo | Math::PI |
Integers y Bignums (? Long) | 1 2 3_000 |
Número punto flotante | 1.0 3.0 |
Función de módulo | Math::sin(x) |
Símbolos | :symbol :"A_Symbol" |
Como ven el primer caracter del nombre de la variable determina cómo se va a usar. Seguido de este caracter, los nombres pueden contener cualquier letra, dígito o subguión, con la condición de que el caracter seguido de @ no puede ser un dígito.
Las variables de instancia y nombres de métodos se escriben en minúscula con subguión para separar palabras. Las clases siguen la misma convención que Java usando MixedCase. En el curso también muestran algo de expresiones regulares, arreglos y hash, pero como el libro cubre eso más adelante, lo dejo para después.
Strings
Hay muchas formas de crearlos en Ruby, siendo los string literals las más comunes: arreglo de caracteres entre comillas simples o dobles. Como en otros lenguajes, la diferencia entre ' y " es el procesamiento realizado en la construcción del String. El más eficiente es la comilla simple, el valor del objeto es "literalmente" lo que se escribe.
Con las comillas dobles, Ruby procesa n poco más y busca substituciones como los caracteres de escape (\n y demás), e interpolación de expresiones. En el caso de secuencias "#{variable}", se reemplaza este String con el valor de la variable variable.
Array y Hashes
En Ruby los Array y Hash son colecciones indexadas, guardan objetos accesibles a través de una llave. En el caso de los arreglos, la llave es un entero, mientras que los hash soportan cualquier objeto como índice.
#!/usr/bin/ruby # -*- coding: utf-8 -*- #Inicialización de array literal a = ['Hola', 3, 'something, something, dark side...'] a[3] = 42 puts "El array se ve así: #{a.inspect}" #Atajo para array de palabras (%w): b = %w{ Luke Leia Han Chewie R2-D2 C3PO Lando } puts "Contenido del array de palabras: #{b.inspect}" #Ahora hashes: c = { 'nes' => 'Super Mario bros', 'gb' => 'Super Mario land', 'snes' => 'Super Mario world', 'n64' => 'Super Mario 64', 'gamecube' => 'Super Mario Sunshine', 'wii' => 'Super Mario Galaxy', 'nds' => 'New Super Mario Bros' } #Obviamente los keys deben ser únicos. puts "Hash: #{c.inspect}" p c['nes'] p c['n64'] p c['wii'] p c['n3ds'] #El método p funciona como puts pero muestra valores como nil explícitamente |
Como ven en el último ejemplo, al intentar a acceder a un elemento inexistente, Ruby devuelve el objeto nil
. En Ruby null se representa con nil, un objeto que no representa nada. Además al usar nil en expresiones condicionales, su valor es false
.
Voy dejando esta primera parte por acá para no hacer mucho más largo el post. Sigo estudiando por mi lado, y hago el repaso en el blog cuando vaya a postear. En el próximo post termino el segundo capítulo, mientras sigo estudiando el tercero.
14 comentarios en este post
Feed de comentarios-
Ruby básico - parte 2 | Picando Código |
26 enero. 2011 - 07:54
[…] con la segunda parte del segundo capítulo del Pickaxe. Creo que la primer parte de Ruby básico fue bastante extensa (para ser un post de un blog), pero es lógico por haber sido el principio hay […]
-
bizzit » Blog Archive » Sobre Ruby, agilidad y demás temas |
30 enero. 2011 - 13:44
[…] al blog de Picando Código, descubro tres artículos (I, II y III) que nos inician al desarrollo de Ruby. Ya sé que hay muchos tutoriales por ahí (incluso en […]
Alejandro Segovia 24 enero. 2011 - 11:01
Otro muy buen post Fernando!
Yo estaba aprendiendo Lua antes de irme de vacaciones. Voy a intentar retomar ahora que estoy devuelta 🙂
Suerte con Ruby!
Fernando 24 enero. 2011 - 19:14
¡Gracias!
Vamos a ver cómo me va…
Lo peor es que todavía no terminé con Ruby, y ya decidí mi próximo lenguaje 😛 (Scala)
Saludos y suerte con Lua.
williams 24 enero. 2011 - 21:05
Muy buen post ya me dio ganas de aprender asi que por el momento ya instale ruby en mi win7
saludos y a la espera del siguiente post
Fernando 24 enero. 2011 - 21:58
¡Buenísimo! De a poco iremos aprendiendo entonces.
Por favor, si les surgen dudas o demás, pregunten en los comentarios. Probablemente no lo sepa, así que saldremos todos en busca de respuestas 😛
Julian Franco 24 enero. 2011 - 21:39
Bueno Fernando, atendiendo tu invitación en el primer Post de Ruby, aquí estoy listo para comenzar con las clases de Ruby, que me parece fenomenal de una vez por todas descubrirlo, y además es perfecto para mi, que mañana comienzo el último semestre de Universidad 😉
Vamos pues a atender los Post que publiques, y nos ponemos todos manos a la obra 😉
Un gran abrazo Fernando, ante todo gracias!!!
Julián Franco
Fernando 24 enero. 2011 - 22:00
¡Excelente! Gracias por aceptar la invitación 😛
Espero que vayan siguiendo el estudio, entre todos es mas fácil obligarse a estudiar 😀
Repito lo de las dudas, ideas, y demás, cualquier contribución viene bien para motivarnos a buscar respuestas.
Saludos y a estudiar entonces!
Julián Franco 25 enero. 2011 - 05:32
Bueno, inicialmente comencé con la familiarización del emacs, luego de la instalación pero en Windows que realmente es elemental. De todos modos, Suse es el O/S que uso en un 95%, por lo cual preferiría trabajar directamente con la catedra pero en Linux.
Viendo los repositorios, me aparecen varios emacs para instalar, pero no estoy seguro de cual es el adecuado.
¿Cuál usas tu, Fernando en Linux?
Un gran abrazo, y nuevamente mil gracias!!!
Julián
Fernando 25 enero. 2011 - 19:02
No es relevante qué editor de texto, así que si querés usar alguno con el que esté más familiarizado, es lo mismo. De todas formas si querés aprovechar para aprender a usar Emacs, mejor 😀
Yo estoy usando el paquete
emacs
de ArchLinux que está en la versión 23.2-1.Bruno Azzinnari 27 enero. 2011 - 12:17
Buen post, ligero de leer y con suficiente información como para empezar motivado a probar algo de Ruby. Lo instalo en mi VM Ubuntu para los “tiempos de compilación” en el laburo… 🙂
Thx!
Fernando 27 enero. 2011 - 22:48
Gracias por los halagos 😀
Instalalo sí, y nos ponemos a hacer algún labs o algo…
¡Saludos!
L. Jacob 15 diciembre. 2016 - 16:19
Muy interesante el resumen de ruby que aportas.
Entretenida lectura y pruebas con ruby. ¡Saludos desde sudoeste de España!
Fernando 15 diciembre. 2016 - 16:23
Me alegra que te haya gustado, ¡gracias por leer!
Saludos desde Montevideo, Uruguay 🙂