RubyEdgar J. Suá[email protected]
México on Railshttp://MexicoOnRails.com.mx
Historia
• Yukihiro “Matz” Matsumoto
http://en.wikipedia.org/wiki/Yukihiro_Matsumoto
Historia
• Yukihiro “Matz” Matsumoto
• 1995
http://en.wikipedia.org/wiki/Yukihiro_Matsumoto
Historia
• Yukihiro “Matz” Matsumoto
• 1995
• 1.8, 1.9http://en.wikipedia.org/wiki/
Yukihiro_Matsumoto
Inspiraciones
• Perl
Inspiraciones
• Perl
• Smalltalk
Inspiraciones
• Perl
• Smalltalk
• Eiffel
Inspiraciones
• Perl
• Smalltalk
• Eiffel
• Ada
Inspiraciones
• Perl
• Smalltalk
• Eiffel
• Ada
• Lisp
Implementaciones
• YARV
Implementaciones
• YARV
• JRuby
Implementaciones
• YARV
• JRuby
• Rubinius
Implementaciones
• YARV
• JRuby
• Rubinius
• IronRuby
Implementaciones
• MacRuby
Implementaciones
• MacRuby
• HotRuby
Filosofía
“We need to focus on humans, on how humans care about doing programming or operating the aplication of the machine.
Filosofía
“We need to focus on humans, on how humans care about doing programming or operating the aplication of the machine.
We are the masters. They are the slaves”
Iteraciones
[“uno”, “dos”, “tres”].each do |item|
Iteraciones
[“uno”, “dos”, “tres”].each do |item|
puts “#{item}...”
Iteraciones
[“uno”, “dos”, “tres”].each do |item|
puts “#{item}...”
end
Iteraciones
# => “uno...”
# => “dos...”
# => “tres...”
Todo tiene un valor
Todo tiene un valor
x = if 1 > 2 “no es cierto”else “correcto”end
Todo tiene un valor
x = if 1 > 2 “no es cierto”else “correcto”end
x # => “correcto”
Todo tiene un valor
Todo tiene un valor
x = “uno NO es mayor” unless 2 > 1
Todo tiene un valor
x = “uno NO es mayor” unless 2 > 1
x # => nil
Hashes
• Colección de pares llave-valor
Hashes
• Colección de pares llave-valor
h = {:x => 3, :y => 3.4, :name => “coords”}
Hashes
• Colección de pares llave-valor
h = {:x => 3, :y => 3.4, :name => “coords”}
h.keys # => [:x, :name, :y]
Hashes
• Colección de pares llave-valor
h = {:x => 3, :y => 3.4, :name => “coords”}
h.keys # => [:x, :name, :y]
h.values # => [3, "coords", 3.4]
Símbolos
• Quién y no qué
Símbolos
• Quién y no qué
“nombre”.object_id == “nombre”.object_id# => false
Símbolos
• Quién y no qué
“nombre”.object_id == “nombre”.object_id# => false
:nombre.object_id == :nombre.object_id# => true
Rangos
(1..2) # => 1..2
Rangos
(1..2) # => 1..2
(1..3).each { |i| puts i }# => 1 2 3
Rangos
(1..2) # => 1..2
(1..3).each { |i| puts i }# => 1 2 3
(1...3).each { |i| puts i }# => 1 2
Rangos
(1..2) # => 1..2
(1..3).each { |i| puts i }# => 1 2 3
(1...3).each { |i| puts i }# => 1 2
Todo es un objeto
Todo es un objeto
persona = Persona.newpersona.class # => Personaarreglo = Array.newarreglo.class # => Array
Todo es un objeto
persona = Persona.newpersona.class # => Personaarreglo = Array.newarreglo.class # => Array
arreglo = []arreglo.class # => Arrayobj = Object.newobj.class # => Object
Todo es un objeto
Todo es un objeto
1.class # => Fixnum3.2.class # => Float
Todo es un objeto
1.class # => Fixnum3.2.class # => Float
nil.class # => NilClasstrue.class # => TrueClassfalse.class # => FalseClassClass.class # => Class
La verdad
• Todo lo que no sea nil o false, es verdadero.
La verdad
• Todo lo que no sea nil o false, es verdadero.
“hola” ? true : false # => true0 ? true : false # => true
La verdad
• Todo lo que no sea nil o false, es verdadero.
“hola” ? true : false # => true0 ? true : false # => true
nil ? true : false # => falsefalse ? true : false # => false
Clases
class Persona def nombre puts “Edgar” end
end
Constructor
class Persona def initialize(nombre)
end
end
Constructor
class Persona def initialize(nombre)
end
end
@nombre = nombre
Variables
• mi_variable = “Hola mundo”
Variables
• mi_variable = “Hola mundo”
• @edad = 76
Variables
• mi_variable = “Hola mundo”
• @edad = 76
• @@contador = 3
Métodos
class Persona
end
Métodos
class Persona
end
def metodo_de_instanciaend
Métodos
class Persona
end
def metodo_de_instanciaend
def self.metodo_de_claseend
Métodos descriptivos
Métodos descriptivos
def es_administrador? trueend
Métodos descriptivos
def es_administrador? trueend
def destruir_mundo! Gente.destroy_allend
Modificadores de acceso
class Persona def metodo_publico end
protected def metodo_protegido end
def otro_metodo_protegido end
private def metodo_privado endend
Modificadores de acceso
class Persona def metodo_publico end
def metodo_protegido end
def metodo_privado end
protected :metodo_protegido private :metodo_privadoend
Clases abiertasclass Persona def pedro puts “Pedro” endendp = Persona.newp.pedro # => Pedro
Clases abiertasclass Persona def pedro puts “Pedro” endendp = Persona.newp.pedro # => Pedro
class Persona def paco puts “Paco” endendp.paco # => Paco
Bloques
3.times do |i| puts iend
Bloques
3.times do |i| puts iend
b = Proc.new { puts “Hey” }
Bloques
3.times do |i| puts iend
b = Proc.new { puts “Hey” }
b = lambda { puts “Hey” }
Bloques
3.times do |i| puts iend
b = Proc.new { puts “Hey” }
b = lambda { puts “Hey” }
b.call # => “Hey”
Bloques
def saludo yieldend
Bloques
def saludo yieldend
saludo { puts “Hola Ruby” }# => “Hola Ruby”
Bloques
def saludo yieldend
saludo { puts “Hola Ruby” }# => “Hola Ruby”
saludo { 1 + 3 }# => 4
Bloques
def saludo world = “Mundo” yield(world)end
Bloques
def saludo world = “Mundo” yield(world)end
saludo { |w| puts “Hola #{w}” }# => “Hola Mundo”
Bloques
def por_dos(x) yield(x * 2)end
Bloques
def por_dos(x) yield(x * 2)end
por_dos(2) { |i| i + 1 }# => 5
Operadores
3 + 1 # => 4
Operadores
3 + 1 # => 4
3.+(1) # => 4
Operadores
3 + 1 # => 4
3.+(1) # => 4
x = [1, 2, 3]x[0] # => 1x.[](0) # => 1
Operadores
3 + 1 # => 4
3.+(1) # => 4
x = [1, 2, 3]x[0] # => 1x.[](0) # => 1
x[1] = ‘dos’x.[]=(1, ‘dos’)
Operadores
class Fixnum def +(i) self - i end
def ==(otro) self == otro.to_i endend
Metaprogramación
eval <<-eof def meta puts “No existo” endeof
Metaprogramación
eval <<-eof def meta puts “No existo” endeof
meta # => “No existo”
Metaprogramación
Metaprogramación3.times do |i| eval <<-eof def metodo_#{i} #{i} end eofend
Metaprogramación3.times do |i| eval <<-eof def metodo_#{i} #{i} end eofend
metodo_0 # => 0metodo_1 # => 1metodo_2 # => 2
RubyEdgar J. Suá[email protected]
México on Railshttp://MexicoOnRails.com.mx