Leyendo Pickaxe: Ruby básico

Publicado el Lunes, 24 de enero de 2011
Programming Ruby 1.9

Programming Ruby 1.9

Empiezo 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
  1. Avatar

    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

    • Avatar

      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 😛

  2. Avatar

    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

    • Avatar

      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!

  3. Avatar

    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

    • Avatar

      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.

  4. Avatar

    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!

  1. 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 […]

  2. 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 […]

Dejar un comentario

Toasty!