Monday, 6 July 2009

Primera toma de contacto con Ruby

Tal como cuenta el Pragmatic Programmer, cada año hay que aprender un lenguaje de programación nuevo. Ya hace tiempo que tenía esta tarea pendiente y ahora que he hecho un poco de tiempo, he creado mi primer script con ruby. El ejemplo muy sencillo consiste en parsear un XML mediante la librería REXML y cargar una serie de registros y realizar un cálculo simple. De esta manera podemos ver si el lenguaje nos gusta, si lo encontramos fácil de manejar y si le podemos sacar provecho. En el mercado existen cientos de lenguajes de programación, y siempre me ha gustado como mínimo crear algo en éstos para ver como resuelven los diferentes problemas que te puedes encontrar con otros lenguajes (Conversiones implícitas, asignaciones, herencia múltiple, etc). El problema radica en que si aprendemos un lenguaje nuevo, tenemos que buscar el "Where to use it?".
Haciendo un poco de historia, Ruby, es un lenguaje de programación interpretado y Orientado a objetos. Éste fue creado por Yukihiro Matsumoto, y presenta trazas de Perl, Python y SmallTalk.
  • Mi Ejemplo:
Éste consiste en una lista de rectángulos los cuáles calcularé su superficie, haciendo una simple multiplicación (altura por anchura). Ésta lista está dentro de un xml, el cuál recorreré mediante la libreria ReXML y mediante el recorrido de los nodos y atributos los meteré dentro de una clase donde se realizará el cálculo. Éste es un ejemplo muy simple el cual nos puede servir para ver que con menos de 30 líneas de código tenemos hecho nuestro Script.

Fichero xml (rectangles.xml):




<rectangles>
<rectangle width="23" height="45" />
<rectangle width="45" height="75" />
<rectangle width="67" height="90" />
<rectangle width="32" height="56" />
</
rectangles>




Programa en Ruby (rectangles.rb):




# Cálculo superfície rectangulos
# @Author : Jordi Coll Corbilla
#-------------------------------------

require "rexml/document"
include REXML

class Rectangulo
def initialize(alto, ancho)
@alto = alto
@ancho = ancho
end

def superficie
puts "Alto #{@alto}, Ancho #{@ancho}, Superficie: " + String(@alto * @ancho)
end
end

#imprimimos el documento completo
doc = Document.new File.new("rectangles.xml")
print doc
print "\n\n"

#realizamos los cálculos
doc = REXML::Document.new File.new('rectangles.xml')
node = doc.elements.to_a("//rectangle")
node.each do |elem|
alto =
Integer(elem.attribute("height").value)
ancho = Integer(elem.attribute("width").value)
rec = Rectangulo.new(alto,ancho)
rec.superficie
rec = nil
end





El resultado de la ejecución:




>ruby rectangles.rb
<rectangles>
<
rectangle height='45' width='23'/>
<
rectangle height='75' width='45'/>
<
rectangle height='90' width='67'/>
<
rectangle height='56' width='32'/>
</
rectangles>

Alto 45, Ancho 23, Superficie: 1035
Alto 75, Ancho 45, Superficie: 3375
Alto 90, Ancho 67, Superficie: 6030
Alto 56, Ancho 32, Superficie: 1792
>Exit code: 0




Como podéis comprobar el script es muy sencillo y por la red podemos encontrar bastantes librerías para hacer el parsing de los xml. En los enlaces de interés hay varios ejemplos. Espero que os sirva de ayuda y a continuar aprendiendo y mejorando!.
  • Enlaces de interés:
Procesando REXML.
Parsing XML Ruby.

0 comments:

Post a Comment