Ruby

(Inicio) (Artículos) (Charlas) (Documentos) (Programas) (Chorradas) (Otros)

 

Ruby es un lenguaje de programación interpretado, de muy alto nivel y orientado a objetos. ¿Por qué otro lenguaje más? Pues porque Ruby es diferente. Cuando Matz dice que Ruby es orientado a objetos, realmente quiere decir que es orientado a objetos. En este lenguaje, hasta los números y los caracteres literales son objetos, y tienen los métodos de su clase, que pueden llamarse normalmente.

Hay actualmente un esfuerzo de traducción de la documentación disponible para Ruby en http://www.ruby.org.es. Pronto habrá documentación disponible en castellano, como el libro «Programming Ruby».

Casi todos los comentarios sobre Ruby son puro elogio, y es que combina las mejores características de Smalltalk, Perl e incluso alguna cosa de programación funcional. Claro, que las palabras lo aguantan todo... veamos un poco de Ruby en acción:

puts 'content-type'.split('-').collect {|i| i.capitalize}.join (':')

Ufff... en una sola expresión hemos cogido un literal (content-type), lo hemos partido en dos por el signo igual, dejándolo en una lista, hemos procesado los elementos para crear una nueva, y los hemos vuelto a unir con el signo dos puntos. El resultado de la expresión, que se imprime por la pantalla, es Content:Type.

También podemos hacer bucles de forma simple y elegante, con el método upto de los enteros:

1.upto (10) { |i|
  puts i
}

Podemos declarar de forma sencilla listas de elementos literales, y luego mostrar una lista construida procesando la original:

a = %w(1 2 3 4 5 6 7 8 9)
puts a.join ', '
puts a.collect {|i| i.to_i+5 }.join ', '

Lo cual imprime

1, 2, 3, 4, 5, 6, 7, 8, 9
6, 7, 8, 9, 10, 11, 12, 13, 14

Debido a la naturaleza simple y dinámica de Ruby, podemos pasar nombres de clases como parámetro, añadir métodos a cualquier clase cuando queramos (y dependiendo de cualquier condición, o incluso dentro de bucles), ¡incluso a las clases básicas!

s = String.new ('s')

def construye (clase)
   clase.new
end

obj = construye (Array)

if obj.type == Array
   class String
      def mimetododeString
         puts 'Hola, mundo'
      end
   end
end

s.mimetododeString
"Literal que te pego".mimetododeString

Por si tienes miedo de que tanta flexibilidad puede dar lugar a muchos errores, no te preocupes, porque Ruby tiene un sistema completo de excepciones (en forma de clases, que se pueden heredar y definir) que permite lanzarlas, capturarlas, prepararse para recibirlas, y ejecutar cualquier programa al capturarlas:

class MiError <Exception
end

def saltaExcep (i)
   if i > 10
      raise MiError, 'saltaExcep'
   else
      puts i
   end
end

begin
   1.upto (20) { |i|
      saltaExcep i
   }
rescue MiError
   puts "El parámetro pasado a #{$!} fue mayor de 10"
end

Por último, tiene bastantes paquetes disponibles, un paquete que permite cargar paquetes de Python desde un programa en Ruby, primitivas de hilos, interfaces gráficas, funciones de red, etc.

Y ahora, algunos pequeños programas que he escrito en Ruby, a modo de ejemplo:

  • Una clase para cargar «extensores» de aplicaciones, en forma de nuevas clases (one_instance_plugin_loader.rb)
  • Un programa para renombrar ficheros con una expresión regular (rename.rb)
  • Un ejemplo de uso de iteradores en listas (array.rb)
  • Un ejemplo de paso de parámetros y de uso de referencias de objetos (assign.rb)
  • Otro ejemplo de uso de referencias (def.rb)
  • Un ejemplo de uso de ficheros (pipe.rb)
  • Una prueba rara con las variables locales de los objetos e iteradores (instance-vars.rb)

(Inicio) (Artículos) (Charlas) (Documentos) (Programas) (Chorradas) (Otros)