Preguntas generales

1. ¿Qué es Ruby?
2. Muéstrame algo de código Ruby
3. ¿Por qué el nombre de Ruby?
4. ¿Cuál es la historia de Ruby?
5. ¿Cuál es la página de Ruby?
6. ¿Existe un grupo de noticias de Ruby?
7. ¿Existe alguna lista de correo sobre Ruby?
8. ¿Cómo puedo seguir el hilo en una lista de correos con mutt?
9. ¿Cuál es lo correcto, Ruby o ruby?
10. ¿Hay algún libro sobre Ruby?
11. ¿Qué editores proporcionan soporte para Ruby?
12. ¿Cómo puedo anotar código Ruby con sus resultados?
13. ¡No entiendo Ruby aún después de leer el manual!

1. ¿Qué es Ruby?

Ruby es un lenguaje de programación orientado a objetos simple y potente creado por Yukihiro Matsumoto (que utiliza el apodo de "matz" en su documentación y en las listas de correo).

Como Perl, Ruby es bueno para procesar textos. Como SmallTalk, en Ruby todo es un objeto y Ruby tiene bloques, iteradores, metaclases y otras cosas buenas.

Se puede utilizar Ruby para escribir servidores, experimentar con prototipos, y para las tareas cotidianas de programación. Como lenguaje orientado a objetos totalmente integrado, Ruby es fácilmente ampliable.

Características de Ruby:

  • Sintaxis simple.

  • Elementos básicos de OO (clases, métodos, objetos, etc..)

  • Elementos especiales OO (Mixins, métodos singleton, renombrado...)

  • Sobrecarga de operadores.

  • Manejo de excepciones.

  • Iteradores y cierres.

  • Recolección de basura.

  • Carga dinámica.

  • Alta transportabilidad (Se ejecuta en diferentes Unixs, Windows, DOS, OSX, Amiga etc...)

2. Muéstrame algo de código Ruby

Definamos una clase llamada Persona con nombre y edad. Verificaremos el código creando algunas personas y examinándolas.

	  
	  class Persona
	    attr_accesor :name, :age
	    def initialize (name, age)
	      @name = name;
	      @age = age.to_i
	    end
	    
	    def inspect
	      "#@name (#@age)"
	    end
	  end

	  p1 = Persona.new('elmo', 4)
	  p2 = Persona.new('zoe', 7)

	  p1             # -> elmo (4)
	  p2             # -> zoe (7)
	
Ahora creemos una array de personas leyendo sus nombres y edades de un fichero que contiene líneas como:
	  bert:    8
	  cookie: 11
	  elmo:    4
	  ernie:   8
	  zoe:     7  
	
El siguiente código utiliza expresiones regulares para analizar las sucesivas líneas del fichero de entrada creando un objeto Persona para cada coincidencia y añadiendola al final del array gente.
	  
	  gente = array.new

	  File.foreach("edades") { |l|
	    gente << Persona.new($1,$2) if l =¬ /(.*):\s+(\d+)/
	  }
	  gente   # -> [bert (4), zoe (7), elmo (4), ernie (8), cookie (11)]
	
Ahora ordenemos los resultados en base a la edad de la persona. Hay muchas formas de hacer esto. Se puede definir un bloque de ordenación, que indica a Ruby como realizar comparaciones de dos personas:
	  
	  sorted = gente.sort do |a, b| a.age <=> b.age end
	  sorted  # -> [elmo (4), zoe (7), bert (8), ernie (8), cookie (11)]
	
Otra forma sería cambiar el método de comparación de la clase Persona.
	  
	  class Persona
	    def <=> (other)
	      @age <=> other.age
	    end
	  end

	  people.sort   # -> [elmo (4), zoe (7), bert (8), ernie (8), cookie(11)]
	

3. ¿Por qué el nombre de Ruby?

Matz, influenciado por Perl, quería poner el nombre de una joya a su nuevo lenguaje, así que le llamó Ruby ya que ésta era la piedra de nacimiento de un colega suyo.

Posteriormente se dió cuenta de que Ruby va por delante de Perl en varias situaciones. La perla es el piedra de nacimiento del mes de junio, Ruby la del mes de julio. La medida de los tamaños de las fuentes en Perl es 5pt y en Ruby 5.5 pt. Pensó que Ruby era un buen nombre para un lenguaje de programación más nuevo (y esperaba que mejor) que Perl.

(Basadas en unas explicaciones dadas por Matz [ruby-talk:00394] del 11 de Junio de 1999)

4. ¿Cuál es la historia de Ruby?

El siguiente resumen proviene de un envío realizado por Matz [ruby-talk:00382] el 4 de Junio de 1999. (La fecha de nacimiento de Ruby esta corregida en [ruby-list:15977]).

Bien, Ruby nació el 24 de Febrero de 1993. Estaba hablando con un colega sobre la posibilidad de crear un lenguaje de guiones orientado a objetos. Conocia Perl (Perl4, no Perl5) pero en realizada no me gustaba porque tenía un tufillo a lenguaje de juguete (aún lo tiene). Un lenguaje de guiones orientado a objetos parecía muy prometedor.

También conocía Python. Pero tampoco me gustaba debido a que pensaba que no era un verdadero lenguaje orientado a objetos - sus características OO fueron añadidas a posteriori. Como maniático de los lenguajes y fan de la orientación a objetos durante 15 años, quería un lenguaje de guiones fácil de utilizar y genuínamente orientado a objetos. Busque, pero no lo encontré.

Por lo tanto, decidí hacerlo. me llevó varios meses hacer que funcionase el interprete. Le puse las características que deseaba tuviese mi lenguaje, tales como iteradores, manejo de excepciones, recolección de basura.

Luego, reorganicé las características de Perl en librerías de clase y las implementé. Envié Ruby 0.95 al grupo de noticias doméstico Japones en Diciembre de 1995.

Desde entonces se han creado listas de correo muy activas y páginas web.

5. ¿Cuál es la página de Ruby?

La página oficial de Ruby es http://www.ruby-lang.org/ (en inglés) y http://www.ruby-lang.org/ja/ (en japones).

También se puede encontrar información sobre Ruby en http://www.ruby-central.com. En particular existe una guía de referencia completa en http://www.ruby-central.com/ref/index.html de las clases y métodos de Ruby.

6. ¿Existe un grupo de noticias de Ruby?

comp.lang.ruby fundado en Mayo de 2000 (gracias a los esfuerzos de Conrad Schneiker ).

7. ¿Existe alguna lista de correo sobre Ruby?

Actualmente existen cinco listas de correo que tratan Ruby. La primera es en Inglés, las restantes en Japones.

  • ruby-talk: Discusiones sobre Ruby en idioma Inglés.

  • ruby-list: Discusiones sobre Ruby en idioma Japones.

  • ruby-dev: Lista para desarrolladores de Ruby.

  • ruby-ext: Lista de personas que escriben extesiones para o con Ruby

  • ruby-math: Ruby en las matemáticas

Ver unirse a la lista de correos en http://ww.ruby-lang.org/en/ml.html.

Se pueden examinar los archivos de las listas de correo utilizando http://blade.nagaokaut.ac.jp/ruby/ruby-talk/index.shtml/. (válido para ruby-talk; para el resto modificar la url según sea necesario).

8. ¿Cómo puedo seguir el hilo en una lista de correos con mutt?

Las listas de correo de Ruby añaden un prefijo a las líneas de tema, por ejemplo [ruby-talk:1234]. Esto a veces confunde a algunos agentes de usuario de correo para seguir el hilo de una discusión.

En mutt, se puede hacer que esto funciones utilizando la siguiente asignación de variables.

	    
	    # reply_regexp, para permitir ML como ruby-talk
	    set reply_regexp = "^(\[[a-z0-9:-]+\][[:space:]]*)?(re([\[0-9\]+])*|aw):[[:space:]]*"
	  

9. ¿Cuál es lo correcto, Ruby o ruby?

Oficialmente el lenguaje se llama "Ruby". En la mayoría de los sistema se invoca con el comando ruby. Es correcto utilizar ruby en vez de Ruby.

Por favor, no utiliza RUBY como nombre del lenguaje.

Originalmente, o históricamente, se le llamó "ruby".

10. ¿Hay algún libro sobre Ruby?

  • Programming Ruby: The Pragmatic Programmer's Guide http://www.awlonline.com/peoduct/0,2627,0201710897.html por David Thomas y Andrew Hunt: ISBN 0-20171-089-7, Addison-Wesley, Octubre de 2000

  • Un libro de referencia del lenguaje Ruby en Japonés de Matz et al. y publicado por ASCII disponible en Japón (ISBN 4-7561-3254-5). Está realizandose, por Addison Wesley una tradución al Inglés "The Ruby Programming Language http://www.awlonline.com/product/0,2627,020171096X,00.html"

  • Además, "Mastering Regular Expressionshttp://www.oreilly.com/catalog/regex/" de Jeffrey Friedl: ISBN 1-56592-257-3 de O'Reilly & Associates, es un libro de referencia que cubre el arte e implementación de expresiones regulares en varios lenguajes de programación. La mayor parte de él es aplicable a las expresiones regulares de Ruby.

11. ¿Qué editores proporcionan soporte para Ruby?

  • Emacs http://www.gnu.org/software/emacs/emacs.html o XEmacs http://www.xemacs.org: En la distribución de Ruby se entrega ruby-mode.el. En algunas versiones de XEmacs es necesario añadir (load "font-lock") al fichero .emacs para permitir que ruby-mode.el detecte el paquete de resaltado de sintaxis que se esté utilizando.

  • Vim http://www.vim.org: Vim 5.7 y posteriores tienen ficheros de sintaxis para Ruby por defecto en el paquete de instalación. Para versiones anteriores, se dispone de un fichero de sintaxis en http://www.xs4all.nl/¬hipster/lib/ruby/ruby.vim

  • Jedit http.//jedit.sourceforge.net: Editor portable escrito en Java, viene con soporte para Ruby.

  • Jed http://space.mit.edu/¬davis/jed.html: un fichero s-lang que soporta Ruby está disponible en http://kondara.sdri.co.jp/4g/slang/ryby.sl.

  • Nedit http://www.nedit.org: Eric Santonacci ha escrito el soporte para Ruby en Nedit, se encuentra disponible en ftp://ftp.talc.fr/pub/ruby/ruby.nedit-01.1.tar.gz

  • Barry Shultz ha escrito un fichero de definición de Ruby para TextPad, se encuentra disponible en http://www.textpad.com/add-ons/ntsys.html.

  • 12. ¿Cómo puedo anotar código Ruby con sus resultados?

    Las personas anotan normalmente el código Ruby mostrando el resultado de la ejecución de cada sentencia como un comentario añadido a la misma. Por ejemplo, en el siguiente extracto, se muestra que la sentencia de asignación genera "Billy Bob" y luego el resultado de la extracción de algunas subcadenas.

    	  
    	  str = "Billy" + "Bob"               # -> "Billy Bob"
    	  str[0,1] + str[2,1] + str[-2,2]     # -> "Blob"
    	  

    El paquete xmp de Gotoken, disponible en http://www.ruby-lang.org/en/raa-list.rhtml?name=xmp es una utilidad que anota el código fuente en Ruby de esta forma.

    Los usuarios de Emacs y Vim pueden integrar esta utilidad en sus entornos de edición, lo cual puede ser muy útil si se desea enviar, a otras personas, por correo código Ruby anotado. Una vez instalado xmp, los usuarios de Emacs deben añadir lo siguiente a su fichero .emacs:

    	    
    	    (defun ruby-xmp-region (reg-start reg-end)
    	      "Pipe the region through Ruby`s xmp utility and replace the region with the result."
    	      (interactive "r")
    	      (shell-command-on-region reg-start reg-end
    	        "ruby -r xmp -n -e 'xmp ($_, \"%1\t\t# %r\n\"'"
    		t))
    	    (global-set-key [(meta f10)] 'ruby-xmp-region')
    	  
    Los usuarios de Vim deben realizar la siguiente correspondencia (gracias a hispter).
    	    
    	    map <M-F10> :!ruby -r xmp -n -e 'xmp ($_, \"%1\t\t# %r\n\"' <CR>
    	  
    En ambos casos hay que seleccionar la región del código a anotar y pulsar Meta-F10 para anotarla.

    13. ¡No entiendo Ruby aún después de leer el manual!

    La sintaxis de Ruby ha permanecido muy estable desde la versión 1.0, aunque se le han añadido algunas funciones nuevas aquí y allá. Por lo tanto los libros y la documentación en línea está bastante ajustada.

    Si se tiene algún problema se puede preguntar en las listas de correo (sección 1.7). Generalmente se tienen respuestas puntuales del propio matz, el autor del lenguaje, de otros gurus y de gente que ha resuelto problemas similares previamente.

    Se debe incluir las salidas de ruby -v junto con cualquier extracto de código problemático.

    Si se tienen problemas con el uso de irb (ver sección 10.1) se debe estar al tanto de sus limitaciones. Ejecuta el script con irb -single-irb o directamente con el comando ruby.

    En las listas de correo pueden existir preguntas similares, es de cortesía leer los correos más recientes antes de preguntar. Pero si se pregunta en la lista, la respuesta correcta será inmediata.