SlideShare una empresa de Scribd logo
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

Ruby
Ruby Ruby
Ruby 01
Ruby 01Ruby 01
Proyectos Web 3 Introduccion Php
Proyectos Web   3 Introduccion PhpProyectos Web   3 Introduccion Php
Proyectos Web 3 Introduccion Php
Jose Ponce
 
Ruby
RubyRuby
Ruby
ThirdWay
 
¿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
jaespinmora
 
Php Basico
Php BasicoPhp Basico
Php Basico
Eliecer Cedano
 
Especialista Web J9 Php
Especialista Web J9  PhpEspecialista Web J9  Php
Especialista Web J9 Php
Moisés Cid Deza
 
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
Sergio Gil
 
Clase lenguaje c xxxxxx
Clase lenguaje c xxxxxxClase lenguaje c xxxxxx
Clase lenguaje c xxxxxx
Mar15marian
 
Clase lenguaje c
Clase lenguaje c Clase lenguaje c
Clase lenguaje c
Mar15marian
 
Clase lenguaje c xxxxxx
Clase lenguaje c xxxxxxClase lenguaje c xxxxxx
Clase lenguaje c xxxxxx
Mar15marian
 
Introducción a Ruby on Rails
Introducción a Ruby on RailsIntroducción a Ruby on Rails
Introducción a Ruby on Rails
guest638090
 
PHP
PHPPHP
Tema2[php]
Tema2[php]Tema2[php]
Tema2[php]
96elnoble14
 
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ón1
Nestor
 
Presentación1
Presentación1Presentación1
Presentación1
Nestor
 
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
Ruby Ruby
Ruby
 
Ruby 01
Ruby 01Ruby 01
Ruby 01
 
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
Clase lenguaje c Clase lenguaje c
Clase lenguaje c
 
Clase lenguaje c xxxxxx
Clase lenguaje c xxxxxxClase lenguaje c xxxxxx
Clase lenguaje c xxxxxx
 
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

Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial ValenciaCatalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
AMADO SALVADOR
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
coloradxmaria
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
cofferub
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
marianabz2403
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Festibity
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
AlejandraCasallas7
 
ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..
IsabelQuintero36
 
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaCatalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
AMADO SALVADOR
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
zoecaicedosalazar
 
Informació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdfInformació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdf
Festibity
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
CrystalRomero18
 
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB  S2. PARA VSATMANUAL DEL DECODIFICADOR DVB  S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
Ing. Julio Iván Mera Casas
 
modelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptxmodelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptx
evelinglilibethpeafi
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVATECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
LilibethEstupian
 
Trabajo tecnología sobre Conceptos Básicos De Programación
Trabajo tecnología sobre Conceptos Básicos De ProgramaciónTrabajo tecnología sobre Conceptos Básicos De Programación
Trabajo tecnología sobre Conceptos Básicos De Programación
SofiaCollazos
 
herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
julio05042006
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Festibity
 
Desarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdfDesarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdf
samuelvideos
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
AlejandraCasallas7
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
SamuelRamirez83524
 

Último (20)

Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial ValenciaCatalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
 
ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..
 
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaCatalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
 
Informació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdfInformació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdf
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
 
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB  S2. PARA VSATMANUAL DEL DECODIFICADOR DVB  S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
 
modelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptxmodelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptx
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVATECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
 
Trabajo tecnología sobre Conceptos Básicos De Programación
Trabajo tecnología sobre Conceptos Básicos De ProgramaciónTrabajo tecnología sobre Conceptos Básicos De Programación
Trabajo tecnología sobre Conceptos Básicos De Programación
 
herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
 
Desarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdfDesarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdf
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
 

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