SlideShare a Scribd company logo
1 of 32
Download to read offline
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

More Related Content

Similar to 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
Clase lenguaje c Clase lenguaje c
Clase lenguaje c Mar15marian
 
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
 
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 to 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
Clase lenguaje c Clase lenguaje c
Clase lenguaje c
 
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
 
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)
 

Recently uploaded

presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfpresentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfaxelv9257
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...axelv9257
 
Generaciones de las Computadoras..pdf...
Generaciones de las Computadoras..pdf...Generaciones de las Computadoras..pdf...
Generaciones de las Computadoras..pdf...solanocortezluisalfr
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxinfor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxgustavovasquezv56
 

Recently uploaded (14)

presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfpresentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...
 
Generaciones de las Computadoras..pdf...
Generaciones de las Computadoras..pdf...Generaciones de las Computadoras..pdf...
Generaciones de las Computadoras..pdf...
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxinfor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.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