2. Sobre mi
@janogonzalez
● Desarrollando en Java desde
2000, enamorado de Ruby en
2010
● Co-organizador del Meetup de
Lenguajes Dinámicos:
http://www.meetup.com/dynla
ngchile/
● Publica el blog
http://gemaroja.com
● Músico frustrado
3. polígloto, ta o poligloto, ta.
(Del gr. πολύγλωττος).
1. adj. Escrito en varias lenguas.
2. adj. Dicho de una persona: Versada en varias
lenguas.
(rae.es)
35. Todo es un objeto
# El clásico string
“Hola Mundo”.upcase
# No hay "tipos primitivos"!
5.zero?
# Hasta el nulo es un objeto
nil.nil?
36. Hay muchos tipos de objetos
# Rangos
(1..10)
# Arreglos
[1, 2, 3, 4, 5]
# Hashes
{:jano => "Alejandro", :cote => "José"}
# Expresiones regulares
/^[a-z]+$/
# Lambdas
lambda { |n| n * 2 }
37. Con métodos muy cool
# En realidad + es un método, no un operador
1.+(9)
# Con un poco de azucar sintáctico
1 + 9
# En otros objetos
"Hola " + "Mundo"
# Incluso con arreglos
[1, 2, 3] + [4, 5]
38. Bloques
# Un método puede recibir un bloque de código
5.times do
|n| puts n
end
# Para casos cortos como el anterior...
5.times { |n| puts n }
39. Bloques
# El clásico map
(1..100).map { |n| n * 2 }
# El clásico select
(1..100).select { |n| n % 3 == 0 }
# El clásico reduce
(1..100).reduce { |sum, n| sum + n }
# Incluso más corto
(1..100).reduce(:+)
40. Creando tus propias clases
# Problem Java?
class Persona
attr_reader :nombre, :apellido
def initialize(nombre, apellido)
@nombre = nombre
@apellido = apellido
end
end
jano = Persona.new("Jano", "González")
jano.nombre
41. Modificando clases ya existentes
# Monkey patching
class Range
def even
self.select { |n| n % 2 == 0 }
end
end
(1..100).even
42. Accediendo a clases Java
# Importando clases Java
require 'java'
java_import 'java.util.date'
d = Date.new
d.to_gmt_string
43. Accediendo a clases Java
Date d = new Date(); => d = Date.new
d.toGMTString() => d.to_gmt_string
48. Ejemplos de uso
● Aplicaciones Web con Ruby on Rails
● Servicios REST con Sinatra
● Rspec/Capybara para probar aplicaciones
● DSLs para facilitar uso de bibliotecas Java