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

La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
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
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
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
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramDIDIERFERNANDOGUERRE
 
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
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
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
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 

Último (20)

La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
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
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
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
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ram
 
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
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
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.
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 

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