Introducción a RubyIntroducción a Ruby
8vas Jornadas Regionales de Software Libre
2008-08-20
Diego Algorta Casamayou
¿Y quién es este?¿Y quién es este?
● Programando desde 1985 con mi TK-85
● Aprendiendo Ruby desde el 2003
● Traducción del sitio oficial ruby-lang.org/es
● Trabajando con Ruby desde 2007
● Area17.com, CitrusByte.com (muy poco), ActiveRain.com
ObjetivoObjetivo
Despertar el interés de los asistentes en este lenguaje de programación y sus virtudes.
¿Qué es Ruby?¿Qué es Ruby?
Un lenguaje de programación dinámico, con foco en la simplicidad y productividad.
Tiene una sintaxis elegante que se siente natural al leerla y escribirla.
OrígenesOrígenes
¿De dónde viene Ruby?
Yukihiro 'Matz' MatsumotoYukihiro 'Matz' Matsumoto
Dibujo original de WhyTheLuckyStiff.Fotografía: http://www.flickr.com/photos/rooreynolds/243810988/ Licencia: http://creativecommons.org/licenses/by-nc/2.0/
Yukihiro 'Matz' MatsumotoYukihiro 'Matz' Matsumoto
Fotografía: http://www.flickr.com/photos/john_lam/1910968816/ Licencia: http://creativecommons.org/licenses/by-nc-sa/2.0/
Yukihiro 'Matz' MatsumotoYukihiro 'Matz' Matsumoto
“Quería un lenguaje que fuera más poderoso que Perl y más orientado a objetos que Python.”
“Ruby está diseñado para hacer que la programación no sólo sea fácil sino también entretenida.”
● Mayormente influenciado por Smalltalk y Perl.
HitosHitos
● 1993 – Comienza el desarrollo
● 1995 – Lanzado al público
● 2001 – Programming Ruby 1ra edición (1.6)
● 2004 – Programming Ruby 2da edición (1.8)
● 2004 – El catalizador: Ruby on Rails
● 2008 – Programming Ruby 3ra edición (1.9)
CaracterísticasCaracterísticas
● Orientado a objetos
● Tipado dinámico
● Herencia simple
● Módulos
● Mixins (casi herencia múltiple)
● Tendencia a la programación declarativa
● Afín a la creación de lenguajes específicos de dominio (DSL)
Algunos ejemplosAlgunos ejemplos
¿Cómo se ve el código?
ConvencionesConvenciones
● var_local
● @var_de_instancia
● @@var_de_clase
● $var_global
● Clase
● CONSTANTE
● :symbol
● objeto.metodo_de_instancia
● Clase.metodo_de_clase
● soy_peligroso!
● es_o_no_es?
● # Comentario
Todo es un objetoTodo es un objeto
'Hola Mundo'.length #=> 10
'Soy un String'.index('u') #=> 4
-1234.abs #=> 1234
1234 + 1 == 1234.+(1) #=> true
1234.to_s #=> '1234'
1234.to_s.reverse #=> '4321'
1234.to_s.reverse.to_i #=> 4321
Clases, Accesores y ModificadoresClases, Accesores y Modificadores
class Persona def nombre return @nombre end def nombre=(nombre) @nombre = nombre return @nombre endend
Clases, Accesores y ModificadoresClases, Accesores y Modificadores
class Persona def nombre @nombre end def nombre=(nombre) @nombre = nombre endend
Shortcuts: attr_*Shortcuts: attr_*
class Persona attr_accessor :nombre, :apellido attr_reader :id attr_writer :notasend
● Programación declarativa● Clases 'abiertas'
Varios conceptos en un ejemploVarios conceptos en un ejemplo
class Persona def nombre_completo(pre = '') 'Yo soy: ' + pre + "#{apellido.upcase}, #{nombre}" endend
p = Persona.newp.nombre, p.apellido = 'Diego', 'Algorta'puts p.nombre_completo#=> "Yo soy: ALGORTA, Diego"puts p.nombre_completo('Lic. ')#=> "Yo soy: Lic. ALGORTA, Diego"
Arrays y HashesArrays y Hashes
animales = ['perro', 'gato', 'caballo']cosas = ['un string', 243, Persona.new]datos = { :nombre => 'Diego', :apellido => 'Algorta', 'hijos' => ['Florencia', 'Facundo']}datos[:nombre] -> 'Diego'datos['hijos'][0] -> 'Florencia'
BloquesBloques
● Trozos de código que se pueden asociar a la invocación de un método, como un parámetro más.
{ # este es un bloque inline }
do # este es otro bloque # con más lineasend
IteradoresIteradores
# animales = ['perro', 'gato', 'caballo']animales = %w( perro gato caballo )animales.each do |animal| print animal, ' 'end #=> 'perro gato caballo '2.times { print 'hola' } #=> 'holahola'3.upto(5) { |i| puts "numero #{i + 1} " }#=>"numero 4""numero 5""numero 6"
Expresiones regularesExpresiones regulares
● Aclaración: estos ejemplos no le hacen justicia al poder de las expresiones regulares
a = Regexp.new('^\s*[a-z]')b = /^\s*[a-z]/a == b #=> true'Ejemplo de String' =~ /plo/ #=> 4
Más sobre expresiones regularesMás sobre expresiones regulares
a = 'mi frase de ejemplo'a.gsub(/[aeiou]/, 'X')#=> 'mX frXsX dX XjXmplX'a#=> 'mi frase de ejemplo'a.gsub!(/[aeiou]/) do |vocal| vocal.upcaseend#=> 'mI frAsE dE EjEmplO'a#=> 'mI frAsE dE EjEmplO'
MódulosMódulos
● Los módulos son la forma de agrupar métodos, clases y constantes.
● Proveen 2 funcionalidades
– Espacio de nombres (namespace)
– Compartición de código mediante Mixins
MixinsMixins
● Los módulos se pueden incluir dentro de la definición de una clase para que ésta automáticamente incorpore la funcionalidad provista por el módulo.
● Se lo puede ver como una forma de tener herencia múltiple, aunque no es exactamente lo mismo.
Ejemplo de MixinEjemplo de Mixin
class Alumno < Persona # Incorporamos: <, <=, ==, >=, >, between? include Comparable # Mixin desde un módulo attr_accessor :nro # Comparable requiere este método. def <=>(otro_alumno) self.nro <=> otro_alumno.nro endend# Asignación paralelaa, b, c = Alumno.new, Alumno.new, Alumno.newa.nro, b.nro, c.nro = 25, 30, 15a >= b #=> falsea.between?(c, b) #=> true
Más allá del lenguajeMás allá del lenguaje
¿Qué pasa al rededor de Ruby?
ImplementacionesImplementaciones
● MRI (C, Matz Ruby Implementation) < 1.9
● YARV (C, la nueva “oficial”) >= 1.9
● JRuby (Java, financiado por Sun)
● IronRuby (.NET, financiado por Microsoft)
● MagLev (basado en la VM de smalltalk de GemStone)
● Rubinius (poco C++, mucho Ruby, financiado por EngineYard)
RubySpecRubySpec
● www.rubyspec.org
– Es un proyecto para escribir una especificación completa y ejecutable del lenguaje de programación Ruby.
– Originado por Rubinius, pero hoy en día todas las implementaciones aportan para lograr una base común.
IDEsIDEs
● TextMate (Mac), VIM, EMACS, gedit, scite, etc.
● NetBeans – www.netbeans.org/products/ruby
● Eclipse + RDT – rubyeclipse.sourceforge.net
● RadRails – www.aptana.com/rails
LibrosLibros
● Pragmatic Programmers
– PickAxe: Programming Ruby, Learn to Program, From Java to Ruby, Enterprise Integration with Ruby, RubyQT, Best of RubyQuiz, y varios más.
● O'Reilly
– The Ruby Programming Language, Ruby Cookbook, Learning Ruby, y varios más.
● Addison-Wesley Professional Ruby Series
– The Ruby way, The Rails Way, y más.
● Manning
– Ruby in Practice, Ruby for Rails, y más.
RubyConfRubyConf
● Conferencia anual organizada por RubyCentral– 2001
– 2002
– 2003
– 2004
– 2005
– 2006
– 2007
– 2008
WebFrameworksWebFrameworks
Arrow – Borges – Camping – Cerise – Coset – Halcyon –
IOWA – Mack – Maveric – merb – Nitro – Rack –
Ramaze – Ruby on Rails – Sinatra – ServerSide – Unicycle – Vintage – Waves – Wee –
Wisteria – Wuby
Fuente: http://ramaze.net/
WebFrameworksWebFrameworks
Arrow – Borges – Camping – Cerise – Coset – Halcyon –
IOWA – Mack – Maveric – merb – Nitro – Rack –
Ramaze – Ruby on Rails – Sinatra – ServerSide – Unicycle – Vintage – Waves – Wee –
Wisteria – Wuby
Fuente: http://ramaze.net/
GUIGUI
Tk – FXRuby – wxRuby – Ruby/GTK – Ruby/Gnome2 – Ruby/QT – Shoes
¿Preguntas?¿Preguntas?
www.rubyuruguay.org
www.rubyargentina.com.ar
www.ruby-lang.org/es:Ruby en 20 minutos
Ruby desde otros lenguajes
Creative CommonsCreative Commons
Esta obra está licenciada bajo una Licencia AtribuciónNo ComercialCompartir Obras Derivadas Igual 3.0 Unported de
Creative Commons. Para ver una copia de esta licencia, visite http://creativecommons.org/licenses/byncsa/3.0/ o envíenos una carta a Creative Commons, 171 Second Street, Suite 300, San
Francisco, California, 94105, USA.