|
|
Lenguaje de guiones interpretado:
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-es.org. 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, 14Debido 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 MiErrorPor ú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.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