0
Ruby
                              Edgar J. Suárez
                               e@dgar.org




México on Rails
http://Me...
Historia
Historia

• Yukihiro “Matz” Matsumoto

                              http://en.wikipedia.org/wiki/
                       ...
Historia

• Yukihiro “Matz” Matsumoto
• 1995
                              http://en.wikipedia.org/wiki/
                 ...
Historia

• Yukihiro “Matz” Matsumoto
• 1995
• 1.8, 1.9                    http://en.wikipedia.org/wiki/
                 ...
Inspiraciones
Inspiraciones

• Perl
Inspiraciones

• Perl
• Smalltalk
Inspiraciones

• Perl
• Smalltalk
• Eiffel
Inspiraciones

• Perl
• Smalltalk
• Eiffel
• Ada
Inspiraciones

• Perl
• Smalltalk
• Eiffel
• Ada
• Lisp
Implementaciones
Implementaciones

• YARV
Implementaciones

• YARV
• JRuby
Implementaciones

• YARV
• JRuby
• Rubinius
Implementaciones

• YARV
• JRuby
• Rubinius
• IronRuby
Implementaciones
Implementaciones


• MacRuby
Implementaciones


• MacRuby
• HotRuby
Filosofía
Filosofía

“We need to focus on humans, on how humans
care about doing programming or operating the
aplication of the mach...
Filosofía

“We need to focus on humans, on how humans
care about doing programming or operating the
aplication of the mach...
Iteraciones
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...
Símbolos
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_...
Rangos
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.new
persona.class # => Persona
arreglo = Array.new
arreglo.class # => Array
Todo es un objeto
persona = Persona.new
persona.class # => Persona
arreglo = Array.new
arreglo.class # => Array
arreglo = ...
Todo es un objeto
Todo es un objeto

1.class # => Fixnum
3.2.class # => Float
Todo es un objeto

1.class # => Fixnum
3.2.class # => Float
nil.class # => NilClass
true.class # => TrueClass
false.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 # => true
    0 ? true : false ...
La verdad

•   Todo lo que no sea nil o false, es
    verdadero.
    “hola” ? true : false # => true
    0 ? true : false ...
Clases

class Persona

 def nombre
   puts “Edgar”
 end

end
Constructor
Constructor

class Persona

 def initialize(nombre)

 end

end
Constructor

class Persona

 def initialize(nombre)
   @nombre = nombre
 end

end
Variables
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
 def metodo_de_instancia
 end



end
Métodos
class Persona
  def metodo_de_instancia
  end
  def self.metodo_de_clase
  end
end
Métodos descriptivos
Métodos descriptivos

def es_administrador?
  true
end
Métodos descriptivos

def es_administrador?
  true
end
def destruir_mundo!
  Gente.destroy_all
end
Modificadores de acceso
class Persona
  def metodo_publico
  end

  protected
  def metodo_protegido
  end

  def otro_meto...
Modificadores de acceso
class Persona
  def metodo_publico
  end

  def metodo_protegido
  end

  def metodo_privado
  end
...
Clases abiertas
Clases abiertas
class Persona
  def pedro
    puts “Pedro”
  end
end
p = Persona.new
p.pedro # => Pedro
Clases abiertas
class Persona
  def pedro
    puts “Pedro”
  end
end
p = Persona.new
p.pedro # => Pedro

class Persona
  d...
Bloques
Bloques
3.times do |i|
  puts i
end
Bloques
3.times do |i|
  puts i
end
b = Proc.new { puts “Hey” }
Bloques
3.times do |i|
  puts i
end
b = Proc.new { puts “Hey” }
b = lambda { puts “Hey” }
Bloques
3.times do |i|
  puts i
end
b = Proc.new { puts “Hey” }
b = lambda { puts “Hey” }
b.call # => “Hey”
Bloques
Bloques
def saludo
  yield
end
Bloques
def saludo
  yield
end
saludo { puts “Hola Ruby” }
# => “Hola Ruby”
Bloques
def saludo
  yield
end
saludo { puts “Hola Ruby” }
# => “Hola Ruby”
saludo { 1 + 3 }
# => 4
Bloques
Bloques

def saludo
  world = “Mundo”
  yield(world)
end
Bloques

def saludo
  world = “Mundo”
  yield(world)
end
saludo { |w| puts “Hola #{w}” }
# => “Hola Mundo”
Bloques
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
Operadores
3 + 1 # => 4
Operadores
3 + 1 # => 4
3.+(1) # => 4
Operadores
3 + 1 # => 4
3.+(1) # => 4
x = [1, 2, 3]
x[0] # => 1
x.[](0) # => 1
Operadores
3 + 1 # => 4
3.+(1) # => 4
x = [1, 2, 3]
x[0] # => 1
x.[](0) # => 1
x[1] = ‘dos’
x.[]=(1, ‘dos’)
Operadores
Operadores
class Fixnum
  def +(i)
    self - i
  end

  def ==(otro)
    self == otro.to_i
  end
end
Metaprogramación
Metaprogramación

eval <<-eof
  def meta
    puts “No existo”
  end
eof
Metaprogramación

eval <<-eof
  def meta
    puts “No existo”
  end
eof
meta # => “No existo”
Metaprogramación
Metaprogramación
3.times do |i|
  eval <<-eof
    def metodo_#{i}
      #{i}
    end
  eof
end
Metaprogramación
3.times do |i|
  eval <<-eof
    def metodo_#{i}
      #{i}
    end
  eof
end
metodo_0 # => 0
metodo_1 # ...
Ruby
                              Edgar J. Suárez
                               e@dgar.org




México on Rails
http://Me...
Upcoming SlideShare
Loading in...5
×

Workshop Camp México 09 - Introducción a Ruby

587

Published on

Introducción a Ruby en el WorkshopCamp México 09

Published in: Technology
1 Comment
0 Likes
Statistics
Notes
  • Está dañado el archivo, no se puede ver al descargarlo.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

No Downloads
Views
Total Views
587
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
6
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide
  • Transcript of "Workshop Camp México 09 - Introducción a Ruby"

    1. 1. Ruby Edgar J. Suárez e@dgar.org México on Rails http://MexicoOnRails.com.mx
    2. 2. Historia
    3. 3. Historia • Yukihiro “Matz” Matsumoto http://en.wikipedia.org/wiki/ Yukihiro_Matsumoto
    4. 4. Historia • Yukihiro “Matz” Matsumoto • 1995 http://en.wikipedia.org/wiki/ Yukihiro_Matsumoto
    5. 5. Historia • Yukihiro “Matz” Matsumoto • 1995 • 1.8, 1.9 http://en.wikipedia.org/wiki/ Yukihiro_Matsumoto
    6. 6. Inspiraciones
    7. 7. Inspiraciones • Perl
    8. 8. Inspiraciones • Perl • Smalltalk
    9. 9. Inspiraciones • Perl • Smalltalk • Eiffel
    10. 10. Inspiraciones • Perl • Smalltalk • Eiffel • Ada
    11. 11. Inspiraciones • Perl • Smalltalk • Eiffel • Ada • Lisp
    12. 12. Implementaciones
    13. 13. Implementaciones • YARV
    14. 14. Implementaciones • YARV • JRuby
    15. 15. Implementaciones • YARV • JRuby • Rubinius
    16. 16. Implementaciones • YARV • JRuby • Rubinius • IronRuby
    17. 17. Implementaciones
    18. 18. Implementaciones • MacRuby
    19. 19. Implementaciones • MacRuby • HotRuby
    20. 20. Filosofía
    21. 21. Filosofía “We need to focus on humans, on how humans care about doing programming or operating the aplication of the machine.
    22. 22. 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”
    23. 23. Iteraciones
    24. 24. Iteraciones [“uno”, “dos”, “tres”].each do |item|
    25. 25. Iteraciones [“uno”, “dos”, “tres”].each do |item| puts “#{item}...”
    26. 26. Iteraciones [“uno”, “dos”, “tres”].each do |item| puts “#{item}...” end
    27. 27. Iteraciones # => “uno...” # => “dos...” # => “tres...”
    28. 28. Todo tiene un valor
    29. 29. Todo tiene un valor x = if 1 > 2 “no es cierto” else “correcto” end
    30. 30. Todo tiene un valor x = if 1 > 2 “no es cierto” else “correcto” end x # => “correcto”
    31. 31. Todo tiene un valor
    32. 32. Todo tiene un valor x = “uno NO es mayor” unless 2 > 1
    33. 33. Todo tiene un valor x = “uno NO es mayor” unless 2 > 1 x # => nil
    34. 34. Hashes • Colección de pares llave-valor
    35. 35. Hashes • Colección de pares llave-valor h = {:x => 3, :y => 3.4, :name => “coords”}
    36. 36. Hashes • Colección de pares llave-valor h = {:x => 3, :y => 3.4, :name => “coords”} h.keys # => [:x, :name, :y]
    37. 37. 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]
    38. 38. Símbolos
    39. 39. Símbolos • Quién y no qué
    40. 40. Símbolos • Quién y no qué “nombre”.object_id == “nombre”.object_id # => false
    41. 41. Símbolos • Quién y no qué “nombre”.object_id == “nombre”.object_id # => false :nombre.object_id == :nombre.object_id # => true
    42. 42. Rangos
    43. 43. Rangos (1..2) # => 1..2
    44. 44. Rangos (1..2) # => 1..2 (1..3).each { |i| puts i } # => 1 2 3
    45. 45. Rangos (1..2) # => 1..2 (1..3).each { |i| puts i } # => 1 2 3 (1...3).each { |i| puts i } # => 1 2
    46. 46. Rangos (1..2) # => 1..2 (1..3).each { |i| puts i } # => 1 2 3 (1...3).each { |i| puts i } # => 1 2
    47. 47. Todo es un objeto
    48. 48. Todo es un objeto persona = Persona.new persona.class # => Persona arreglo = Array.new arreglo.class # => Array
    49. 49. Todo es un objeto persona = Persona.new persona.class # => Persona arreglo = Array.new arreglo.class # => Array arreglo = [] arreglo.class # => Array obj = Object.new obj.class # => Object
    50. 50. Todo es un objeto
    51. 51. Todo es un objeto 1.class # => Fixnum 3.2.class # => Float
    52. 52. Todo es un objeto 1.class # => Fixnum 3.2.class # => Float nil.class # => NilClass true.class # => TrueClass false.class # => FalseClass Class.class # => Class
    53. 53. La verdad • Todo lo que no sea nil o false, es verdadero.
    54. 54. La verdad • Todo lo que no sea nil o false, es verdadero. “hola” ? true : false # => true 0 ? true : false # => true
    55. 55. La verdad • Todo lo que no sea nil o false, es verdadero. “hola” ? true : false # => true 0 ? true : false # => true nil ? true : false # => false false ? true : false # => false
    56. 56. Clases class Persona def nombre puts “Edgar” end end
    57. 57. Constructor
    58. 58. Constructor class Persona def initialize(nombre) end end
    59. 59. Constructor class Persona def initialize(nombre) @nombre = nombre end end
    60. 60. Variables
    61. 61. Variables • mi_variable = “Hola mundo”
    62. 62. Variables • mi_variable = “Hola mundo” • @edad = 76
    63. 63. Variables • mi_variable = “Hola mundo” • @edad = 76 • @@contador = 3
    64. 64. Métodos class Persona end
    65. 65. Métodos class Persona def metodo_de_instancia end end
    66. 66. Métodos class Persona def metodo_de_instancia end def self.metodo_de_clase end end
    67. 67. Métodos descriptivos
    68. 68. Métodos descriptivos def es_administrador? true end
    69. 69. Métodos descriptivos def es_administrador? true end def destruir_mundo! Gente.destroy_all end
    70. 70. Modificadores de acceso class Persona def metodo_publico end protected def metodo_protegido end def otro_metodo_protegido end private def metodo_privado end end
    71. 71. Modificadores de acceso class Persona def metodo_publico end def metodo_protegido end def metodo_privado end protected :metodo_protegido private :metodo_privado end
    72. 72. Clases abiertas
    73. 73. Clases abiertas class Persona def pedro puts “Pedro” end end p = Persona.new p.pedro # => Pedro
    74. 74. Clases abiertas class Persona def pedro puts “Pedro” end end p = Persona.new p.pedro # => Pedro class Persona def paco puts “Paco” end end p.paco # => Paco
    75. 75. Bloques
    76. 76. Bloques 3.times do |i| puts i end
    77. 77. Bloques 3.times do |i| puts i end b = Proc.new { puts “Hey” }
    78. 78. Bloques 3.times do |i| puts i end b = Proc.new { puts “Hey” } b = lambda { puts “Hey” }
    79. 79. Bloques 3.times do |i| puts i end b = Proc.new { puts “Hey” } b = lambda { puts “Hey” } b.call # => “Hey”
    80. 80. Bloques
    81. 81. Bloques def saludo yield end
    82. 82. Bloques def saludo yield end saludo { puts “Hola Ruby” } # => “Hola Ruby”
    83. 83. Bloques def saludo yield end saludo { puts “Hola Ruby” } # => “Hola Ruby” saludo { 1 + 3 } # => 4
    84. 84. Bloques
    85. 85. Bloques def saludo world = “Mundo” yield(world) end
    86. 86. Bloques def saludo world = “Mundo” yield(world) end saludo { |w| puts “Hola #{w}” } # => “Hola Mundo”
    87. 87. Bloques
    88. 88. Bloques def por_dos(x) yield(x * 2) end
    89. 89. Bloques def por_dos(x) yield(x * 2) end por_dos(2) { |i| i + 1 } # => 5
    90. 90. Operadores
    91. 91. Operadores 3 + 1 # => 4
    92. 92. Operadores 3 + 1 # => 4 3.+(1) # => 4
    93. 93. Operadores 3 + 1 # => 4 3.+(1) # => 4 x = [1, 2, 3] x[0] # => 1 x.[](0) # => 1
    94. 94. Operadores 3 + 1 # => 4 3.+(1) # => 4 x = [1, 2, 3] x[0] # => 1 x.[](0) # => 1 x[1] = ‘dos’ x.[]=(1, ‘dos’)
    95. 95. Operadores
    96. 96. Operadores class Fixnum def +(i) self - i end def ==(otro) self == otro.to_i end end
    97. 97. Metaprogramación
    98. 98. Metaprogramación eval <<-eof def meta puts “No existo” end eof
    99. 99. Metaprogramación eval <<-eof def meta puts “No existo” end eof meta # => “No existo”
    100. 100. Metaprogramación
    101. 101. Metaprogramación 3.times do |i| eval <<-eof def metodo_#{i} #{i} end eof end
    102. 102. Metaprogramación 3.times do |i| eval <<-eof def metodo_#{i} #{i} end eof end metodo_0 # => 0 metodo_1 # => 1 metodo_2 # => 2
    103. 103. Ruby Edgar J. Suárez e@dgar.org México on Rails http://MexicoOnRails.com.mx
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×