$30 off During Our Annual Pro Sale. View Details »

¿Dónde están mis interfaces?

¿Dónde están mis interfaces?

RubyConf Argentina 2012 - Charla de Ruby para programadores Java y C#

Jano González

October 20, 2012
Tweet

More Decks by Jano González

Other Decks in Programming

Transcript

  1. ¿DÓNDE ESTÁN MIS INTERFACES?

    View Slide

  2. RUBY
    PARA PROGRAMADORES
    JAVA (Y C#)

    View Slide

  3. 0 EL CHARLISTA

    View Slide

  4. @janogonzalez

    View Slide

  5. HopIn

    View Slide

  6. @dynlangchile

    View Slide

  7. 1 LA HISTORIA

    View Slide

  8. JAPÓN 1993

    View Slide

  9. ·ͭ΋ͱΏ͖ͻΖ

    View Slide

  10. YUKIHIRO MATSUMOTO

    View Slide

  11. MATZ

    View Slide

  12. “RUBY IS DESIGNED
    TO MAKE
    PROGRAMMERS HAPPY”
    - MATZ

    View Slide

  13. LA MEZCLA
    Smalltalk
    Perl
    Lisp

    View Slide

  14. EL RESULTADO

    View Slide

  15. USA 2001

    View Slide

  16. PICKAXE

    View Slide

  17. DINAMARCA 2005

    View Slide

  18. DAVID HEINEMEIER HANSSON

    View Slide

  19. DHH

    View Slide

  20. RAILS 1.0

    View Slide

  21. CHILE 2010

    View Slide

  22. JANO

    View Slide

  23. “RUBY SE VE BUENO,
    ¿PERO CÓMO SE HACEN
    LAS INTERFACES?”
    - JANO

    View Slide

  24. Este slide se ha dejado en blanco de forma intencional

    View Slide

  25. 2 EL LENGUAJE

    View Slide

  26. ES UN LENGUAJE
    DINÁMICO

    View Slide

  27. SINTAXIS
    CONCISA Y EXPRESIVA

    View Slide

  28. ORIENTADO A
    OBJETOS

    View Slide

  29. CON PODEROSAS CUALIDADES DE
    METAPROGRAMACIÓN

    View Slide

  30. ALGUNAS CARACTERÍSTICAS
    FUNCIONALES

    View Slide

  31. 3 ENTENDIENDO RUBY

    View Slide

  32. SINTÁXIS Y CONVENCIONES

    View Slide

  33. NombreDeClaseOModulo
    CONSTANTE
    @nombre_de_atributo
    @@atributo_de_clase
    $variable_global
    nombre_de_metodo
    metodo_peligroso!
    metodo_que_pregunta?

    View Slide

  34. OBJETOS

    View Slide

  35. TODOS LOS VALORES SON
    OBJETOS

    View Slide

  36. "RubyConf Argentina".length();
    Java

    View Slide

  37. "RubyConf Argentina".length
    # => 18
    Ruby

    View Slide

  38. Arrays.sort(new String[]
    {"Hugo","Paco","Luis"});
    Java

    View Slide

  39. ["Hugo","Paco","Luis"].sort
    # => ["Hugo","Luis","Paco"]
    Ruby

    View Slide

  40. Math.abs(-100);
    Math.abs(new Integer(-100));
    Java

    View Slide

  41. -100.abs
    # => 100
    Ruby

    View Slide

  42. foo == null
    Java

    View Slide

  43. foo.nil?
    # => true
    nil.nil?
    # => true
    Ruby

    View Slide

  44. NIL OMG

    View Slide

  45. nil.class
    # => NilClass

    View Slide

  46. Date d = new Date();
    Java

    View Slide

  47. d = Date.new
    Ruby

    View Slide

  48. POO A VECES
    OCULTA

    View Slide

  49. HAY MUCHOS
    LITERALES

    View Slide

  50. # Números
    3
    3.14
    0b1000_1000

    View Slide

  51. # Strings
    'Hola RubyConf Argentina'
    "Hola #{conferencia}"

    View Slide

  52. # Símbolos
    :name
    :+

    View Slide

  53. # Arrays
    ['Hugo','Paco','Luis']

    View Slide

  54. # Hashes
    { :nombre => 'Jano',
    :apellido => 'González' }
    { nombre: "Jano”,
    apellido: "González” }

    View Slide

  55. # Expresiones Regulares
    /^[a-f]+$/

    View Slide

  56. # Rangos
    0..1
    0...10
    “a”..”z”

    View Slide

  57. # Lambdas
    lambda { |n| n * 2 }
    ->(n){ n * 2 }
    ->(n=0){ n * 2 }

    View Slide

  58. EN TODOS LADOS HAY
    MENSAJES

    View Slide

  59. class Flojo
    def method_missing(method, *args, &block)
    puts "Alguien dijo que hiciera esto: #{method}"
    end
    end
    f = Flojo.new
    f.tender_la_cama
    # => "Alguien dijo que hiciera esto: tender_la_cama"

    View Slide

  60. MÉTODOS COMO
    OPERADORES

    View Slide

  61. 4 - 3
    # => 1

    View Slide

  62. 4.send :-, 3
    # => 1

    View Slide

  63. Arrays.asList("Hugo","Paco",
    "Luis").remove("Luis");
    Java

    View Slide

  64. ['Hugo','Paco','Luis'] -
    ['Luis']
    # => ['Hugo','Paco']
    Ruby

    View Slide

  65. # Ejemplo Set
    def -(enum)
    dup.substract(enum)
    end

    View Slide

  66. # Ejemplo Set
    require 'set'
    s = Set.new [1, 10, 100]
    #=> #
    s - [1]
    #=> #

    View Slide

  67. EXPRESIONES
    x+y-z

    View Slide

  68. CASI TODO RETORNA UN
    VALOR

    View Slide

  69. if (estado.equals("Feliz")) {
    cara = ":)";
    } else if (estado.equals("Triste")) {
    cara = ":(";
    } else {
    cara = ":|";
    }
    Java

    View Slide

  70. face = case estado
    when “Feliz” then ":)"
    when “Triste” then ":("
    else ":|"
    end
    # => ":)"
    Ruby

    View Slide

  71. case estado
    when “Feliz” then ":)"
    when “Triste” then ":("
    else ":|"
    end
    # => ":)"
    Ruby

    View Slide

  72. a = 3.14159
    # => 3.14159

    View Slide

  73. def foo
    “bar”
    end
    # => nil

    View Slide

  74. # Ejemplo gema Sequel
    def schema
    @schema ||= get_db_schema
    end

    View Slide

  75. BLOQUES

    View Slide

  76. 3.times do |i|
    puts i
    end
    # 0
    # 1
    # 2
    # => 2
    3.times { |i| puts i }

    View Slide

  77. PROGRAMANDO DE FORMA
    DECLARATIVA

    View Slide

  78. (1..10).select { |n| n.even? }
    # => [2, 4, 6, 8, 10]
    (1..10).select(&:even?)
    # => [2, 4, 6, 8, 10]

    View Slide

  79. (1..100).map { |n| n*2 }
    (1..100).select { |n| (n % 3) == 0 }
    (1..100).reduce { |sum,n| sum + n }
    (1..100).reduce(:+)

    View Slide

  80. AUMENTANDO LA
    FLUIDEZ

    View Slide

  81. File.open('my.txt').each do |line|
    puts line if line =~ /jano/
    end

    View Slide

  82. DUCK TYPING

    View Slide

  83. public interface DuckLike {
    Cuack cuack();
    }
    ...
    public void doSomething(DuckLike d) {
    d.cuack();
    ...
    }
    Java

    View Slide

  84. def do_something(obj)
    if obj.respond_to? :cuack
    obj.cuack
    ...
    else
    ...
    end
    end
    Ruby

    View Slide

  85. MONKEY PATCHING

    View Slide

  86. class Range
    def even
    self.select(&:even?)
    end
    end
    (0..10).even
    # => [2, 4, 6, 8, 10]

    View Slide

  87. MÓDULOS

    View Slide

  88. MÓDULOS COMO
    NAMESPACES

    View Slide

  89. module MyAPI
    class User
    ...
    end
    def self.configuration
    ...
    end
    end

    View Slide

  90. user = MyAPI::User.new
    puts MyAPI::configuration

    View Slide

  91. MÓDULOS COMO
    MIXINS

    View Slide

  92. module Model
    def persist
    ...
    end
    end

    View Slide

  93. class Admin < User
    include Model
    ...
    end

    View Slide

  94. 3 HERRAMIENTAS

    View Slide

  95. JARS
    Java

    View Slide

  96. GEMS
    Ruby

    View Slide

  97. $ ant
    Java

    View Slide

  98. $ rake
    Ruby

    View Slide

  99. $ mvn
    Java

    View Slide

  100. $ gem
    $ bundle
    Ruby

    View Slide

  101. Java

    View Slide

  102. $ rbenv
    o
    $ rvm
    Ruby

    View Slide

  103. BUSCANDO GEMAS

    View Slide

  104. 4 JRUBY

    View Slide

  105. RUBY + JVM

    View Slide

  106. LO MEJOR DE
    2 MUNDOS

    View Slide

  107. require 'java'
    java_import 'java.util.Date'
    d = Date.new
    d.to_gmt_string
    JRuby

    View Slide

  108. Date d = new Date();
    d.toGMTString();
    Date.parse("20/03/1982");
    Java

    View Slide

  109. d = Date.new
    d.to_gmt_string
    Date::parse "20/03/1982"
    JRuby

    View Slide

  110. MUCHAS OPCIONES
    DEPLOYMENT WEB

    View Slide

  111. WARBLER

    View Slide

  112. TRINIDAD

    View Slide

  113. TORQUEBOX

    View Slide

  114. PARAÍSO
    POLÍGLOTA

    View Slide

  115. JRUBY + AKKA

    View Slide

  116. JRUBY + NETTY

    View Slide

  117. JRUBY + HADOOP

    View Slide

  118. JRUBY + STORM

    View Slide

  119. JRUBY + *

    View Slide

  120. 1.7.0
    COMING SOON

    View Slide

  121. 5 LO QUE FALTÓ

    View Slide

  122. EL MODELO DE OBJETOS
    METAPROGRAMACIÓN
    BLOQUES, PROCS Y LAMBDAS
    CHUNKY BACON

    View Slide

  123. NOS VEMOS EN
    RUBYCONF AR 2013

    View Slide

  124. SÍ, LOS ESTOY MIRANDO A UDS
    ORGANIZADORES

    View Slide

  125. 6 CONCLUSIONES

    View Slide

  126. ELIGE LA HERRAMIENTA
    ADECUADA

    View Slide

  127. Y ÚSALA
    BIEN

    View Slide

  128. 7 ¡GRACIAS!

    View Slide