Upgrade to Pro — share decks privately, control downloads, hide ads and more …

¿Dónde están mis interfaces?

¿Dónde están mis interfaces?

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

Ee64bbdcdeffabc6d4166a96e6d2a0d5?s=128

Jano González

October 20, 2012
Tweet

Transcript

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

  2. RUBY PARA PROGRAMADORES JAVA (Y C#)

  3. 0 EL CHARLISTA

  4. @janogonzalez

  5. HopIn

  6. @dynlangchile

  7. 1 LA HISTORIA

  8. JAPÓN 1993

  9. ·ͭ΋ͱΏ͖ͻΖ

  10. YUKIHIRO MATSUMOTO

  11. MATZ

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

  13. LA MEZCLA Smalltalk Perl Lisp

  14. EL RESULTADO

  15. USA 2001

  16. PICKAXE

  17. DINAMARCA 2005

  18. DAVID HEINEMEIER HANSSON

  19. DHH

  20. RAILS 1.0

  21. CHILE 2010

  22. JANO

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

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

  25. 2 EL LENGUAJE

  26. ES UN LENGUAJE DINÁMICO

  27. SINTAXIS CONCISA Y EXPRESIVA

  28. ORIENTADO A OBJETOS

  29. CON PODEROSAS CUALIDADES DE METAPROGRAMACIÓN

  30. ALGUNAS CARACTERÍSTICAS FUNCIONALES

  31. 3 ENTENDIENDO RUBY

  32. SINTÁXIS Y CONVENCIONES

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

  34. OBJETOS

  35. TODOS LOS VALORES SON OBJETOS

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

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

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

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

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

  41. -100.abs # => 100 Ruby

  42. foo == null Java

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

  44. NIL OMG

  45. nil.class # => NilClass

  46. Date d = new Date(); Java

  47. d = Date.new Ruby

  48. POO A VECES OCULTA

  49. HAY MUCHOS LITERALES

  50. # Números 3 3.14 0b1000_1000

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

  52. # Símbolos :name :+

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

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

    { nombre: "Jano”, apellido: "González” }
  55. # Expresiones Regulares /^[a-f]+$/

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

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

    n * 2 } ->(n=0){ n * 2 }
  58. EN TODOS LADOS HAY MENSAJES

  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"
  60. MÉTODOS COMO OPERADORES

  61. 4 - 3 # => 1

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

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

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

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

  66. # Ejemplo Set require 'set' s = Set.new [1, 10,

    100] #=> #<Set: {1, 10, 100}> s - [1] #=> #<Set: {10, 100}>
  67. EXPRESIONES x+y-z

  68. CASI TODO RETORNA UN VALOR

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

    { cara = ":("; } else { cara = ":|"; } Java
  70. face = case estado when “Feliz” then ":)" when “Triste”

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

    else ":|" end # => ":)" Ruby
  72. a = 3.14159 # => 3.14159

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

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

  75. BLOQUES

  76. 3.times do |i| puts i end # 0 # 1

    # 2 # => 2 3.times { |i| puts i }
  77. PROGRAMANDO DE FORMA DECLARATIVA

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

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

    3) == 0 } (1..100).reduce { |sum,n| sum + n } (1..100).reduce(:+)
  80. AUMENTANDO LA FLUIDEZ

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

  82. DUCK TYPING

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

    doSomething(DuckLike d) { d.cuack(); ... } Java
  84. def do_something(obj) if obj.respond_to? :cuack obj.cuack ... else ... end

    end Ruby
  85. MONKEY PATCHING

  86. class Range def even self.select(&:even?) end end (0..10).even # =>

    [2, 4, 6, 8, 10]
  87. MÓDULOS

  88. MÓDULOS COMO NAMESPACES

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

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

  91. MÓDULOS COMO MIXINS

  92. module Model def persist ... end end

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

  94. 3 HERRAMIENTAS

  95. JARS Java

  96. GEMS Ruby

  97. $ ant Java

  98. $ rake Ruby

  99. $ mvn Java

  100. $ gem $ bundle Ruby

  101. Java

  102. $ rbenv o $ rvm Ruby

  103. BUSCANDO GEMAS

  104. 4 JRUBY

  105. RUBY + JVM

  106. LO MEJOR DE 2 MUNDOS

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

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

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

  110. MUCHAS OPCIONES DEPLOYMENT WEB

  111. WARBLER

  112. TRINIDAD

  113. TORQUEBOX

  114. PARAÍSO POLÍGLOTA

  115. JRUBY + AKKA

  116. JRUBY + NETTY

  117. JRUBY + HADOOP

  118. JRUBY + STORM

  119. JRUBY + *

  120. 1.7.0 COMING SOON

  121. 5 LO QUE FALTÓ

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

    BACON
  123. NOS VEMOS EN RUBYCONF AR 2013

  124. SÍ, LOS ESTOY MIRANDO A UDS ORGANIZADORES

  125. 6 CONCLUSIONES

  126. ELIGE LA HERRAMIENTA ADECUADA

  127. Y ÚSALA BIEN

  128. 7 ¡GRACIAS!