Publicidad:
Terra
La Coctelera

interactive Ruby

El camino mas simple para interactuar con Ruby es mediante el shell.
Simplemetne teclearemos la palabra "ruby" en nuestro prompt, y ya
podremos empezar a escribir código ruby.

$ ruby

puts "hola mundo"
^D

hola mundo

El mecanismo es sencillo pero muy pesado. En este caso
particular hemos escrito la sentencia puts "hola mundo", y
posteriormente le hemos indicado al interprete de ruby que a llegado al
final de fichero mediante Control + D.

Otra herramienta importante es irb (interactive ruby), la cual permite insertar código ruby interactivamente y ver los resultados inmediatamente.

Cuando tecleamos irb en nuestra consola, el prompt de irb espera una entrada. por ejemplo teclearamos lo siguiente:

1 + 3

y pulsamos Enter. lo que obtenemos es un 4,

irb(main):001:0> 1 + 3
=> 4

Si por el contrario escribimos 1 + y pulsamos enter, en la siguiente linea, irb nos indicara con un * que no hemos finalizado correctamente la linea anterior. por lo tanto ahora escribimos otro numero y pulso enter.

irb(main):002:0> 1 +
irb(main):003:0* 4
=> 5

Tambien podemos cargar un archivo *.rb con irb. Para ello entraremos en irb, y escribiremos lo siguiente:
irb(main):008:0> load "/home/pepe/codigo_rb/song.rb"

Con esto ya podemos jugar con nuestra clase Song, es decir podremos crear instancias y esas cosas. Veamso un ejemplo:

irb(main):008:0> cancion=Song.new("traelo_aqui","muchomuchacho", 298)

Clases, Objetos y Variables

Empezaremos viendo como son y como funcionan las objetos, clases y variables en Ruby.

Para ello crearemos una clase llamada “Song”

class Song
def initialize(name, artist, duration)
@name= name
@artist= artist
@duration = duration
end
end

El método initialize es especial en el código Ruby. Cuando tu llamas a Song.new para crear un nuevo objeto Song, Ruby reserva memoria para almacenar al futuro objeto, y acto seguido llama al método initialize el cual recibe parámetros (tres en nuestro caso concreto). Gracias al método initialize podemos crear los objetos por defecto.

Dentro de el método initialize hay instance variables, estas sirven para que cada instancia de una clase tenga su propias variables distintas en contenido respecto al resto de instancias de esa misma clase. En Ruby se utiliza la @ para indicar que es una instance variable. Estas variables podrán ser accedidas por todos los métodos del objeto, y como dijimos cada objeto tiene su propia copia de estas variables.

Mientras desarrollamos software seguro que queremos ver mas de una vez los valores de alguna instancia del objeto Song. Para ello haremos uso del mensaje estándar to_s. Por defecto el mensaje to_s solo muestra el object id pero nosotros vamos a redefinir este mensaje para que muestre mas información.

En Ruby las clases no son cerradas, es decir se pueden seguir añadiendo métodos a una clase existente. Usaremos como ejemplo la modificacion del mensaje to_s. Volvamos a la definicion de la clase Song y añadamos el mensaje to_s.

class Song
def to_s
"Song: #@name--#@artist (#@duration)"
end
end

usaremos el caracter # para interpolar los valores de las variables.

Ahora si le mandamos el mensaje to_s a un objeto Song, el resultado será el siguiente:

"Song: culo--pelon (334)"

HERENCIA Y MENSAJES

La herencia te permite crear clases que son una especialización de otra clase ya existente. Imaginemos la clase Jukebox, la cual tiene el concepto de canciones, las cuales están encapsuladas en la clase Song. El problema es que ahora nosotros queremos tener canciones de karaoke, este tipo de canción no tiene audio, pero tiene la letra de la canción, la cual va fluyendo por la pantalla.

Un enfoque a este problema seria crear una nueva clase karaokeSong que es igual que una canción pero con la letra de la misma.

class KaraokeSong < Song
def initialize(name, artist, duration, lyrics)
super(name, artist, duration)
@lyrics= lyrics
end
end

El “< Song” en la definición de la clase indica a Ruby que la clase KaraokeSong es una subclase de la clase Song. Si creasemos un objeto de la clase KaraokeSong y le dieramos el mensaje to_s, veriamos que ocurre lo siguiente:

cancion=KaraokeSong(“My way”,”sinatra”, 323, “And who, the...”)
cancion.to_s
=> “Song: My way--sinatra (225)”

Vemos que funciona correctamente excepto que no muestra la letra de la canción. Esto se debe a que cuando enviamos un mensaje a un objeto, este mira si su clase implementa un método con el mismo nombre que el mensaje y lo ejecuta, si no implementa un método que coincida con el mensaje, Ruby buscara el método en la clase antecesora, hasta que encuentre un método que coincida con el nombre del mensaje, o emita un error(el cual puede ser capturado para evitar errores en tiempo de ejecucion) porque no ha encontrado nada.

Manifiesto

Con este blog lo que pretendo es crear un tutorial sobre Ruby. Para ello seguire el libro: "Programming Ruby, the pragmatic programmers guide".

Empezare desde el principio, suponiendo que tenemos uno conocimientos previos de Programacion Orientada a Objetos.