RubyConf Argentina 2012 - Charla de Ruby para programadores Java y C#
¿DÓNDE ESTÁN MIS INTERFACES?
View Slide
RUBYPARA PROGRAMADORESJAVA (Y C#)
0 EL CHARLISTA
@janogonzalez
HopIn
@dynlangchile
1 LA HISTORIA
JAPÓN 1993
·ͭͱΏ͖ͻΖ
YUKIHIRO MATSUMOTO
MATZ
“RUBY IS DESIGNEDTO MAKEPROGRAMMERS HAPPY”- MATZ
LA MEZCLASmalltalkPerlLisp
EL RESULTADO
USA 2001
PICKAXE
DINAMARCA 2005
DAVID HEINEMEIER HANSSON
DHH
RAILS 1.0
CHILE 2010
JANO
“RUBY SE VE BUENO,¿PERO CÓMO SE HACENLAS INTERFACES?”- JANO
Este slide se ha dejado en blanco de forma intencional
2 EL LENGUAJE
ES UN LENGUAJEDINÁMICO
SINTAXISCONCISA Y EXPRESIVA
ORIENTADO AOBJETOS
CON PODEROSAS CUALIDADES DEMETAPROGRAMACIÓN
ALGUNAS CARACTERÍSTICASFUNCIONALES
3 ENTENDIENDO RUBY
SINTÁXIS Y CONVENCIONES
NombreDeClaseOModuloCONSTANTE@nombre_de_atributo@@atributo_de_clase$variable_globalnombre_de_metodometodo_peligroso!metodo_que_pregunta?
OBJETOS
TODOS LOS VALORES SONOBJETOS
"RubyConf Argentina".length();Java
"RubyConf Argentina".length# => 18Ruby
Arrays.sort(new String[]{"Hugo","Paco","Luis"});Java
["Hugo","Paco","Luis"].sort# => ["Hugo","Luis","Paco"]Ruby
Math.abs(-100);Math.abs(new Integer(-100));Java
-100.abs# => 100Ruby
foo == nullJava
foo.nil?# => truenil.nil?# => trueRuby
NIL OMG
nil.class# => NilClass
Date d = new Date();Java
d = Date.newRuby
POO A VECESOCULTA
HAY MUCHOSLITERALES
# Números33.140b1000_1000
# Strings'Hola RubyConf Argentina'"Hola #{conferencia}"
# Símbolos:name:+
# Arrays['Hugo','Paco','Luis']
# Hashes{ :nombre => 'Jano',:apellido => 'González' }{ nombre: "Jano”,apellido: "González” }
# Expresiones Regulares/^[a-f]+$/
# Rangos0..10...10“a”..”z”
# Lambdaslambda { |n| n * 2 }->(n){ n * 2 }->(n=0){ n * 2 }
EN TODOS LADOS HAYMENSAJES
class Flojodef method_missing(method, *args, &block)puts "Alguien dijo que hiciera esto: #{method}"endendf = Flojo.newf.tender_la_cama# => "Alguien dijo que hiciera esto: tender_la_cama"
MÉTODOS COMOOPERADORES
4 - 3# => 1
4.send :-, 3# => 1
Arrays.asList("Hugo","Paco","Luis").remove("Luis");Java
['Hugo','Paco','Luis'] -['Luis']# => ['Hugo','Paco']Ruby
# Ejemplo Setdef -(enum)dup.substract(enum)end
# Ejemplo Setrequire 'set's = Set.new [1, 10, 100]#=> #s - [1]#=> #
EXPRESIONESx+y-z
CASI TODO RETORNA UNVALOR
if (estado.equals("Feliz")) {cara = ":)";} else if (estado.equals("Triste")) {cara = ":(";} else {cara = ":|";}Java
face = case estadowhen “Feliz” then ":)"when “Triste” then ":("else ":|"end# => ":)"Ruby
case estadowhen “Feliz” then ":)"when “Triste” then ":("else ":|"end# => ":)"Ruby
a = 3.14159# => 3.14159
def foo“bar”end# => nil
# Ejemplo gema Sequeldef schema@schema ||= get_db_schemaend
BLOQUES
3.times do |i|puts iend# 0# 1# 2# => 23.times { |i| puts i }
PROGRAMANDO DE FORMADECLARATIVA
(1..10).select { |n| n.even? }# => [2, 4, 6, 8, 10](1..10).select(&:even?)# => [2, 4, 6, 8, 10]
(1..100).map { |n| n*2 }(1..100).select { |n| (n % 3) == 0 }(1..100).reduce { |sum,n| sum + n }(1..100).reduce(:+)
AUMENTANDO LAFLUIDEZ
File.open('my.txt').each do |line|puts line if line =~ /jano/end
DUCK TYPING
public interface DuckLike {Cuack cuack();}...public void doSomething(DuckLike d) {d.cuack();...}Java
def do_something(obj)if obj.respond_to? :cuackobj.cuack...else...endendRuby
MONKEY PATCHING
class Rangedef evenself.select(&:even?)endend(0..10).even# => [2, 4, 6, 8, 10]
MÓDULOS
MÓDULOS COMONAMESPACES
module MyAPIclass User...enddef self.configuration...endend
user = MyAPI::User.newputs MyAPI::configuration
MÓDULOS COMOMIXINS
module Modeldef persist...endend
class Admin < Userinclude Model...end
3 HERRAMIENTAS
JARSJava
GEMSRuby
$ antJava
$ rakeRuby
$ mvnJava
$ gem$ bundleRuby
Java
$ rbenvo$ rvmRuby
BUSCANDO GEMAS
4 JRUBY
RUBY + JVM
LO MEJOR DE2 MUNDOS
require 'java'java_import 'java.util.Date'd = Date.newd.to_gmt_stringJRuby
Date d = new Date();d.toGMTString();Date.parse("20/03/1982");Java
d = Date.newd.to_gmt_stringDate::parse "20/03/1982"JRuby
MUCHAS OPCIONESDEPLOYMENT WEB
WARBLER
TRINIDAD
TORQUEBOX
PARAÍSOPOLÍGLOTA
JRUBY + AKKA
JRUBY + NETTY
JRUBY + HADOOP
JRUBY + STORM
JRUBY + *
1.7.0COMING SOON
5 LO QUE FALTÓ
EL MODELO DE OBJETOSMETAPROGRAMACIÓNBLOQUES, PROCS Y LAMBDASCHUNKY BACON
NOS VEMOS ENRUBYCONF AR 2013
SÍ, LOS ESTOY MIRANDO A UDSORGANIZADORES
6 CONCLUSIONES
ELIGE LA HERRAMIENTAADECUADA
Y ÚSALABIEN
7 ¡GRACIAS!