View
958
Download
6
Category
Preview:
DESCRIPTION
Slides de mi presentación en RubyConf Uruguay 2011
Citation preview
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/dynlangchile/
● Publica el blog http://gemaroja.com
● Músico frustrado
Fila 1 Fila 2 Fila 3 Fila 40
2
4
6
8
10
12
Columna 1
Columna 2
Columna 3
● 1999: J2EE 1.2● 2001: J2EE 1.3● 2003: J2EE 1.4● 2006: Java EE 5● 2009: Java EE 6 → Un paso en la dirección correcta...
Versiones
Java
List<String> nombres = Arrays.asList("Jano", "Ian", "Juanelo", "Peyuco");
Collections.sort(nombres, new Comparator<String>() { public int compare(String x, String y) { return x.length() - y.length(); }});
for (String nombre : nombres) { System.out.println(nombre);}
Ruby
nombres = ["Jano","Ian","Juanelo","Peyuco"]
nombres.sort! { |x, y| x.length <=> y.length }
nombres.each { |nombre| puts nombre }
Javapublic interface DuckLike { String cuack();}
.
.
.
public void doSomething(DuckLike duckLike) { . . . duckLike.cuack(); }
Todo es un objeto
# El clásico string“Hola Mundo”.upcase
# No hay "tipos primitivos"!5.zero?
# Hasta el nulo es un objetonil.nil?
Hay muchos tipos de objetos# Arreglos
[1, 2, 3, 4, 5]
# Hashes
{:jano => "Alejandro", :cote => "José"}
# Rangos(1..10)
# Expresiones regulares/^[a-z]+$/
# Lambdas
lambda { |n| n * 2 }
Con métodos muy cool
# En realidad + es un método, no un operador1.+(9)
# Con un poco de azucar sintáctico1 + 9
# En otros objetos"Hola " + "Mundo"
# Con una gran cantidad de objetos![1, 2, 3] + [4, 5]
Bloques
# Un método puede recibir un bloque de código5.times do |n| puts nend
# Para casos cortos como el anterior...5.times { |n| puts n }
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(:+)
Creando tus propias clases
# Problem Java?class Persona attr_reader :nombre, :apellido def initialize(nombre, apellido) @nombre = nombre @apellido = apellido endend
jano = Persona.new("Jano", "González")jano.nombre
Modificando clases ya existentes
# Monkey patchingclass Range def even self.select { |n| n % 2 == 0 } endend
(1..100).even
Accediendo a clases Java
# Importando clases Javarequire 'java'java_import 'java.util.date'
d = Date.newd.to_gmt_string
Accediendo a clases Java
Date d = new Date(); => d = Date.new
d.toGMTString() => d.to_gmt_string
Arrays.asList() => Arrays::as_list
Fase I
● Usar jirb como REPL Java● Ant/Maven → Apache Buildr● Scripts en general● Junit/Selenium → RSpec, Cucumber
Fase II
● Servicios REST con Sinatra● DSLs para facilitar uso de bibliotecas Java● Aplicaciones Web con Ruby on Rails
Configura tu database.ymldevelopment: adapter: jdbcmysql database: startechconf_development username: root encoding: utf8
test: adapter: jdbcmysql database: startechconf_test username: root encoding: utf8
production: adapter: jdbc jndi: jdbc/stconrails
Integración con Spring
● Usa un initializer para cargar tu $CLASSPATH● Usa un initializer para cargar el ApplicationContext
Más información
● http://jruby.org● https://github.com/jruby● https://github.com/nicksieger/refactoring-to-rails
Recommended