SlideShare una empresa de Scribd logo
1 de 32
Descargar para leer sin conexión
Idiomatic
             Ruby
<3 Ruby    www.mexicoonrails.com.mx
             Rubén Medellín - 2009
Love.ruby do |as, much|
 as.you :can, without
end
Programs must be written for people to read, and
   only incidentally for machines to execute.

                                - Abelson & Sussman
Método de
      clase     Llamada a
                                  Parámetros
                  bloque
                                   variables




Love.ruby do |as, *much|
 as.you :can, without
end
                                      Método o
                                      variable
           Llamada a   Símbolos
            método
Ruby como un
quot;amplificador mentalquot;
                    [Andy Hunt]
Siempre hay más de una forma
     de hacer lo mismo


                Flexibilidad

                Legibilidad

                Agilidad
for (int i = 10; i < 20; i++)
{
  do_something(i)
}
for i in xrange(10, 20):
  do_something(i)
10.upto(20){|i| do_something(i)}
Todo es un objeto
>> quot;Helloquot;.class
=> String
>> 1.class
=> Fixnum
>> nil.class
=> NilClass
>> Class.class
=> Class
>> method(:puts).class
=> Method
Tipos básicos

1
1.2
'simple string'
quot;String with #{something} insidequot;
:symbol
true
nil
[quot;arrayquot;, nil, 5, :whatever]
{ :this => true, :that => quot;Awesomeness!quot; }
/rege(x|X)p*/
10..20
Llamada a métodos

puts(quot;Hello worldquot;)                            # Built-in
[1, 2, 3, 4, 5].first                          # De instancia
Time.now                                       # De clase

quot;I'm not javaquot;.upcase( )                       # Con...
puts quot;Mira mamá, sin paréntesis!quot;              # o sin
{1 => 'uno', 2 => 'dos' }.has_key? 3           # ???
quot;ABCquot;.succ!                                    # !!!
p :implicit => Hash                            # Es un hash!

los_simbolos[ { :tambien => :son} + quot;metodosquot; ]
           NoMethodError: undefined method `+' for {:tambien => :son }:Hash
Definiendo métodos



def con_enjundia!(algo)
   puts quot;#{algo}, caray!quot;
end

>> con_enjundia! quot;Hola mundoquot;
Hola mundo, caray!
=> nil

                     Último valor regresado
Bloques

Blocks.allow(you, to) do |weird, things|
  just.remember to => close(quot;Them withquot;)
end


# Un ejemplo más mundano...

[1, 2, 3, 4, 5].each do |number|
   puts number
end
Bloques

Blocks.allow(you, to) do |weird, things|
  just.remember to => close(quot;Them withquot;)
end


# Un ejemplo más mundano...

[1, 2, 3, 4, 5].each do |number|
   puts number
end
                                   ¿De dónde salió?
Yield

def cuadrados_hasta(limite)
 i=1
 cuadrado = 1
 while cuadrado <= limite
   yield cuadrado
  i += 1
                              Aquí está el truco
  cuadrado = i * i
 end
end
Yield
yield permite pasar variables locales al
contexto del bloque en donde se ejecuta

>> cuadrados_hasta 100 do |num|
>> print num, quot;.. quot;
>> end

=> 1.. 4.. 9.. 16.. 25.. 36.. 49.. 64.. 81.. 100..
Bloques
Los bloques pueden escribirse de la forma

algo do |*variables|
 # ...
end

o en su forma compacta

algo {|*variables| #... }
Algunas expresiones comunes

=== Modificadores en línea

Las condiciones if, while (y sus
complementos unless y until) se pueden
utilizar en la misma línea sin necesidad de
bloque
Algunas expresiones comunes
Por ejemplo:

if objeto.valid?
   objecto.save!
end

se convierte en:

objecto.save! if objecto.valid?
Algunas expresiones comunes


fire_missile! unless @peace

                                Variables de
x=0                             instancia
puts x until (x+=1) == 10

                                Operadores
keep_drinking while not   drunk?conjugados
Algunas expresiones comunes


=== Operadores and y or

Las palabras and y or son equivalentes a los
métodos && y ||

Se evalúan en corto circuito y devuelven el
valor que hace que se cumpla la condición
Algunas expresiones comunes


Diferentes usos:

mensaje = error.msg or quot;Algo malo pasó!quot;

comida = (refri and refri.contenido) or
        Pizzerolas.new

@respuesta_al_universo ||= 42
Algunas expresiones comunes

=== Atributos

El método attr_accesor, y sus parientes
attr_reader y attr_writer, nos proveen de un
shortcut para getters y setters.

De otra manera, uno puede definirlos por
separado (Los métodos pueden terminar en
quot;=” )!
Algunas expresiones comunes
class SuperHeroe
   attr_accessor :nombre
   attr_reader :identidad_secreta

  def initialize(id)
     @identidad_secreta = id
  end

  def identidad_secreta=(x)
     raise quot;No! #{x} es un mal nombrequot;
  end
end
Algunas expresiones comunes


=== Reflexión

Ruby se caracteriza por reflexión, es decir,
la capacidad de meter mano en sus
métodos, clases y módulos en tiempo de
ejecución
Algunas expresiones comunes

class Integer

 def method_missing(que)
  if self > 0 and self < 10
    self.downto(10) do |i|
      puts quot;#{i} #{que}s, se columpiaban...quot;
    end
  end
 end

end
Algunas expresiones comunes

=== Formas de pasar parámetros

Es común especificar parámetros con
valores default, o aceptar hashes como
último parámetro
def hamburguesa(queso = true, extra = {})
 puts quot;Sale una hamburguesa #{queso ? 'con' : 'sin'} queso!quot;
 sabor = extra[:refresco]
 puts quot;Viene con refresco de #{sabor}quot; if sabor
end
Algunas expresiones comunes

=== Formas de pasar parámetros

Es común especificar parámetros con
valores default, o aceptar hashes como
último parámetro*


* Alternativa chafa a los parámetros con nombre, pero funciona bien
Algunas expresiones comunes



def hamburguesa(queso = true, extra = {})
 puts quot;Sale una hamburguesa #{queso ? 'con' : 'sin'} queso!quot;
 sabor = extra[:refresco]
 puts quot;Viene con refresco de #{sabor}quot; if sabor
end
Lee código



No hay mejor manera de aprender un
lenguaje que practicándolo.
Leer código en Ruby hasta es
placentero!
begin
  answer while questions?
rescue
  raise EndOfPresentation
ensure
  people.map(&:thanks)
end

Más contenido relacionado

Similar a Idiomatic Ruby

Proyectos Web 3 Introduccion Php
Proyectos Web   3 Introduccion PhpProyectos Web   3 Introduccion Php
Proyectos Web 3 Introduccion PhpJose Ponce
 
¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticas¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticasjaespinmora
 
Metaprogramación (en Ruby): programas que escriben programas
Metaprogramación (en Ruby): programas que escriben programasMetaprogramación (en Ruby): programas que escriben programas
Metaprogramación (en Ruby): programas que escriben programasSergio Gil
 
Clase lenguaje c xxxxxx
Clase lenguaje c xxxxxxClase lenguaje c xxxxxx
Clase lenguaje c xxxxxxMar15marian
 
Clase lenguaje c xxxxxx
Clase lenguaje c xxxxxxClase lenguaje c xxxxxx
Clase lenguaje c xxxxxxMar15marian
 
Clase lenguaje c
Clase lenguaje c Clase lenguaje c
Clase lenguaje c Mar15marian
 
Introducción a Ruby on Rails
Introducción a Ruby on RailsIntroducción a Ruby on Rails
Introducción a Ruby on Railsguest638090
 
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...David Zapateria Besteiro
 
Presentación1
Presentación1Presentación1
Presentación1Nestor
 
Presentación1
Presentación1Presentación1
Presentación1Nestor
 
Presentación1
Presentación1Presentación1
Presentación1Nestor
 
Perl (practical extraction and report language)
Perl (practical extraction and report language)Perl (practical extraction and report language)
Perl (practical extraction and report language)Oliver Centeno
 

Similar a Idiomatic Ruby (20)

Intro a ruby
Intro a rubyIntro a ruby
Intro a ruby
 
Ruby 01
Ruby 01Ruby 01
Ruby 01
 
Ruby
Ruby Ruby
Ruby
 
Proyectos Web 3 Introduccion Php
Proyectos Web   3 Introduccion PhpProyectos Web   3 Introduccion Php
Proyectos Web 3 Introduccion Php
 
Ruby
RubyRuby
Ruby
 
¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticas¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticas
 
Php Basico
Php BasicoPhp Basico
Php Basico
 
Especialista Web J9 Php
Especialista Web J9  PhpEspecialista Web J9  Php
Especialista Web J9 Php
 
Metaprogramación (en Ruby): programas que escriben programas
Metaprogramación (en Ruby): programas que escriben programasMetaprogramación (en Ruby): programas que escriben programas
Metaprogramación (en Ruby): programas que escriben programas
 
Clase lenguaje c xxxxxx
Clase lenguaje c xxxxxxClase lenguaje c xxxxxx
Clase lenguaje c xxxxxx
 
Clase lenguaje c xxxxxx
Clase lenguaje c xxxxxxClase lenguaje c xxxxxx
Clase lenguaje c xxxxxx
 
Clase lenguaje c
Clase lenguaje c Clase lenguaje c
Clase lenguaje c
 
Introducción a Ruby on Rails
Introducción a Ruby on RailsIntroducción a Ruby on Rails
Introducción a Ruby on Rails
 
PHP
PHPPHP
PHP
 
Tema2[php]
Tema2[php]Tema2[php]
Tema2[php]
 
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
 
Presentación1
Presentación1Presentación1
Presentación1
 
Presentación1
Presentación1Presentación1
Presentación1
 
Presentación1
Presentación1Presentación1
Presentación1
 
Perl (practical extraction and report language)
Perl (practical extraction and report language)Perl (practical extraction and report language)
Perl (practical extraction and report language)
 

Último

Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...JaquelineJuarez15
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofJuancarlosHuertasNio1
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 

Último (20)

Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sof
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 

Idiomatic Ruby

  • 1. Idiomatic Ruby <3 Ruby www.mexicoonrails.com.mx Rubén Medellín - 2009
  • 2. Love.ruby do |as, much| as.you :can, without end
  • 3. Programs must be written for people to read, and only incidentally for machines to execute. - Abelson & Sussman
  • 4. Método de clase Llamada a Parámetros bloque variables Love.ruby do |as, *much| as.you :can, without end Método o variable Llamada a Símbolos método
  • 5. Ruby como un quot;amplificador mentalquot; [Andy Hunt]
  • 6. Siempre hay más de una forma de hacer lo mismo Flexibilidad Legibilidad Agilidad
  • 7. for (int i = 10; i < 20; i++) { do_something(i) }
  • 8. for i in xrange(10, 20): do_something(i)
  • 10. Todo es un objeto >> quot;Helloquot;.class => String >> 1.class => Fixnum >> nil.class => NilClass >> Class.class => Class >> method(:puts).class => Method
  • 11. Tipos básicos 1 1.2 'simple string' quot;String with #{something} insidequot; :symbol true nil [quot;arrayquot;, nil, 5, :whatever] { :this => true, :that => quot;Awesomeness!quot; } /rege(x|X)p*/ 10..20
  • 12. Llamada a métodos puts(quot;Hello worldquot;) # Built-in [1, 2, 3, 4, 5].first # De instancia Time.now # De clase quot;I'm not javaquot;.upcase( ) # Con... puts quot;Mira mamá, sin paréntesis!quot; # o sin {1 => 'uno', 2 => 'dos' }.has_key? 3 # ??? quot;ABCquot;.succ! # !!! p :implicit => Hash # Es un hash! los_simbolos[ { :tambien => :son} + quot;metodosquot; ] NoMethodError: undefined method `+' for {:tambien => :son }:Hash
  • 13. Definiendo métodos def con_enjundia!(algo) puts quot;#{algo}, caray!quot; end >> con_enjundia! quot;Hola mundoquot; Hola mundo, caray! => nil Último valor regresado
  • 14. Bloques Blocks.allow(you, to) do |weird, things| just.remember to => close(quot;Them withquot;) end # Un ejemplo más mundano... [1, 2, 3, 4, 5].each do |number| puts number end
  • 15. Bloques Blocks.allow(you, to) do |weird, things| just.remember to => close(quot;Them withquot;) end # Un ejemplo más mundano... [1, 2, 3, 4, 5].each do |number| puts number end ¿De dónde salió?
  • 16. Yield def cuadrados_hasta(limite) i=1 cuadrado = 1 while cuadrado <= limite yield cuadrado i += 1 Aquí está el truco cuadrado = i * i end end
  • 17. Yield yield permite pasar variables locales al contexto del bloque en donde se ejecuta >> cuadrados_hasta 100 do |num| >> print num, quot;.. quot; >> end => 1.. 4.. 9.. 16.. 25.. 36.. 49.. 64.. 81.. 100..
  • 18. Bloques Los bloques pueden escribirse de la forma algo do |*variables| # ... end o en su forma compacta algo {|*variables| #... }
  • 19. Algunas expresiones comunes === Modificadores en línea Las condiciones if, while (y sus complementos unless y until) se pueden utilizar en la misma línea sin necesidad de bloque
  • 20. Algunas expresiones comunes Por ejemplo: if objeto.valid? objecto.save! end se convierte en: objecto.save! if objecto.valid?
  • 21. Algunas expresiones comunes fire_missile! unless @peace Variables de x=0 instancia puts x until (x+=1) == 10 Operadores keep_drinking while not drunk?conjugados
  • 22. Algunas expresiones comunes === Operadores and y or Las palabras and y or son equivalentes a los métodos && y || Se evalúan en corto circuito y devuelven el valor que hace que se cumpla la condición
  • 23. Algunas expresiones comunes Diferentes usos: mensaje = error.msg or quot;Algo malo pasó!quot; comida = (refri and refri.contenido) or Pizzerolas.new @respuesta_al_universo ||= 42
  • 24. Algunas expresiones comunes === Atributos El método attr_accesor, y sus parientes attr_reader y attr_writer, nos proveen de un shortcut para getters y setters. De otra manera, uno puede definirlos por separado (Los métodos pueden terminar en quot;=” )!
  • 25. Algunas expresiones comunes class SuperHeroe attr_accessor :nombre attr_reader :identidad_secreta def initialize(id) @identidad_secreta = id end def identidad_secreta=(x) raise quot;No! #{x} es un mal nombrequot; end end
  • 26. Algunas expresiones comunes === Reflexión Ruby se caracteriza por reflexión, es decir, la capacidad de meter mano en sus métodos, clases y módulos en tiempo de ejecución
  • 27. Algunas expresiones comunes class Integer def method_missing(que) if self > 0 and self < 10 self.downto(10) do |i| puts quot;#{i} #{que}s, se columpiaban...quot; end end end end
  • 28. Algunas expresiones comunes === Formas de pasar parámetros Es común especificar parámetros con valores default, o aceptar hashes como último parámetro def hamburguesa(queso = true, extra = {}) puts quot;Sale una hamburguesa #{queso ? 'con' : 'sin'} queso!quot; sabor = extra[:refresco] puts quot;Viene con refresco de #{sabor}quot; if sabor end
  • 29. Algunas expresiones comunes === Formas de pasar parámetros Es común especificar parámetros con valores default, o aceptar hashes como último parámetro* * Alternativa chafa a los parámetros con nombre, pero funciona bien
  • 30. Algunas expresiones comunes def hamburguesa(queso = true, extra = {}) puts quot;Sale una hamburguesa #{queso ? 'con' : 'sin'} queso!quot; sabor = extra[:refresco] puts quot;Viene con refresco de #{sabor}quot; if sabor end
  • 31. Lee código No hay mejor manera de aprender un lenguaje que practicándolo. Leer código en Ruby hasta es placentero!
  • 32. begin answer while questions? rescue raise EndOfPresentation ensure people.map(&:thanks) end