Ruby para humanos.
En esta presentación explico el poder de Ruby, y sus idiomas (expresiones propias del lenguaje) que hacen que Ruby sea flexible, expresivo y dinámico.
Presentada en el evento BarCamp Mexico 2
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ó?
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?
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