Successfully reported this slideshow.
Your SlideShare is downloading. ×

Programación Políglota en la JVM

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
Jano Gonzalez - jruby
Jano Gonzalez - jruby
Loading in …3
×

Check these out next

1 of 76 Ad
Advertisement

More Related Content

Similar to Programación Políglota en la JVM (20)

Advertisement

Recently uploaded (20)

Programación Políglota en la JVM

  1. 1. Programación Políglota en la JVM Jano González Desarrollador http://janogonzalez.com
  2. 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. 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)
  4. 4. El problema
  5. 5. Proyectos atrasados
  6. 6. Baja calidad del producto
  7. 7. Causado por
  8. 8. Requerimientos cambiantes
  9. 9. Exceso de complejidad en la arquitectura
  10. 10. Vendor lock-in
  11. 11. Lenguajes “verbosos”
  12. 12. Abstracciones inadecuadas
  13. 13. <queja> Demasiado XML </queja>
  14. 14. Programación Políglota al rescate
  15. 15. Nivel de abstracción adecuado :Dc para cada problema
  16. 16. Estático v/s dinámico :Dc
  17. 17. Estructurado v/s orientado :Dc a objetos v/s funcional
  18. 18. La JVM
  19. 19. Fuentes <<se compila en>> Bytecode <<ejecuta>> JVM JVM Plataforma 1 Plataforma N
  20. 20. Multi-threading :Dc
  21. 21. Garbage collector :Dc
  22. 22. JIT :Dc
  23. 23. Multiplataforma :Dc
  24. 24. Gran porcentaje de penetración :Dc en entornos “enterprise”
  25. 25. Lenguajes para la JVM
  26. 26. JRuby Jython Groovy Scala Clojure Rhino Mirah Fantom Gosu Kotlin Seph BeanShell etc...
  27. 27. Ruby para la JVM :Dc
  28. 28. Orientado a Objetos :Dc
  29. 29. Dinámico :Dc
  30. 30. Con algunas características funcionales
  31. 31. Gran soporte para meta- programación
  32. 32. 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?
  33. 33. 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 }
  34. 34. 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]
  35. 35. 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 }
  36. 36. 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(:+)
  37. 37. 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
  38. 38. Modificando clases ya existentes # Monkey patching class Range def even self.select { |n| n % 2 == 0 } end end (1..100).even
  39. 39. Accediendo a clases Java # Importando clases Java require 'java' java_import 'java.util.date' d = Date.new d.to_gmt_string
  40. 40. Accediendo a clases Java Date d = new Date(); => d = Date.new d.toGMTString() => d.to_gmt_string
  41. 41. Comandos Intérprete $ jruby REPL $ jirb Administrador de paquetes $ jgem
  42. 42. Gemas Precaución: No todas funcionan en Jruby
  43. 43. Encontrando la gema adecuada
  44. 44. ¡A programar!
  45. 45. 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
  46. 46. Clojure
  47. 47. Dialecto de Lisp para la JVM :Dc
  48. 48. Dinámico :Dc
  49. 49. Funcional :Dc
  50. 50. Concurrencia con STM :Dc
  51. 51. Es un Lisp ;; No sería un Lisp sin listas (list 1 2 3 4 5) ;; Un poco de azucar sintáctico '(1 2 3 4 5)
  52. 52. No sólo con listas ;; Vector (vector 1 2 3 4 5) ;; Con azúcar sintáctico [1 2 3 4 5] ;; Mapa (hash-map :jano "Alejandro" :cote "José") ;; Con azúcar sintáctico {:jano "Alejandro", :cote "José"} ;; Conjunto (hash-set :hugo :paco :luis) ;; Con azúcar sintáctico #{:hugo :paco :luis}
  53. 53. Funciones ;; Creando funciones (def duplicar (fn [n] (* 2 n))) ;; También existe una macro (defn duplicar [n] (* 2 n))
  54. 54. Recursividad ;; Nadie se aburre de este ejemplo (defn factorial [n] (if (<= n 1) n (* (factorial (dec n)) n)))
  55. 55. Clásicos funcionales de ayer y hoy ;; Map (map (fn [n] (* n 2)) '(1 2 3 4 5)) ;; Con azucar sintáctico (map #(* % 2) '(1 2 3 4 5)) ;; Filter (filter #(= 0 (mod % 2)) '(1 2 3 4 5)) ;; Reduce (reduce #(+ %1 %2) '(1 2 3 4 5))
  56. 56. Accediendo a clases Java ;; Usando un método (.toUpperCase "Hola Mundo") ;; Usando un método estático (Math/pow 2 10)
  57. 57. ¡A programar!
  58. 58. Estático
  59. 59. Orientado a Objetos
  60. 60. Funcional
  61. 61. Sintáxis parecida a Java, pero menos “verbosa”
  62. 62. Concurrencia con actores
  63. 63. Conclusiones
  64. 64. Es posible atacar cada problema :Dc con el lenguaje más adecuado
  65. 65. La JVM es una gran plataforma :Dc para la programación políglota
  66. 66. La programación políglota en la JVM es factible en entornos “enterprise”
  67. 67. Precaución: El exceso de lenguajes puede aumentar al caos
  68. 68. El resto...
  69. 69. Nos vemos en
  70. 70. Nos vemos en
  71. 71. Imágenes ● http://commons.wikimedia.org/wiki/File:Espagueti_de_Pasta_Fre sca_al_Huevo.jpg ● http://www.startechconf.com/media/images/main-logo.png ● http://2011.encuentrolinux.cl/wp/wp- content/uploads/2011/07/encuentro_linux.png ● http://openjdk.java.net/projects/mlvm/images/leonardo_vm.png ● http://upload.wikimedia.org/wikipedia/en/thumb/1/1a/Clojure- glyph.svg/500px-Clojure-glyph.svg.png ● http://jruby.org/images/jruby-logo.png ● http://upload.wikimedia.org/wikipedia/en/8/85/Scala_logo.png
  72. 72. Jano González Desarrollador http://janogonzalez.com @janogonzalez

×