SlideShare ist ein Scribd-Unternehmen logo
1 von 76
Downloaden Sie, um offline zu lesen
Programación Políglota
en la JVM




Jano González
Desarrollador
http://janogonzalez.com
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
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)
El problema
Proyectos atrasados
Baja calidad del producto
Causado por
Requerimientos cambiantes
Exceso de complejidad en la
       arquitectura
Vendor lock-in
Lenguajes “verbosos”
Abstracciones inadecuadas
<queja>
Demasiado XML
  </queja>
Programación Políglota al
       rescate
Nivel de abstracción adecuado
              :Dc
     para cada problema
Estático v/s dinámico
         :Dc
Estructurado v/s
orientado :Dc
           a objetos v/s
       funcional
La JVM
Fuentes   <<se compila en>>    Bytecode




                              <<ejecuta>>




                   JVM                          JVM
               Plataforma 1                 Plataforma N
Multi-threading
      :Dc
Garbage collector
      :Dc
JIT
:Dc
Multiplataforma
      :Dc
Gran porcentaje de penetración
             :Dc
   en entornos “enterprise”
Lenguajes para la JVM
JRuby Jython Groovy Scala
Clojure Rhino Mirah Fantom
Gosu Kotlin Seph BeanShell
           etc...
Ruby para la JVM
      :Dc
Orientado a Objetos
        :Dc
Dinámico
   :Dc
Con algunas características
       funcionales
Gran soporte para meta-
     programación
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?
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 }
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]
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 }
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
  end
end

jano = Persona.new("Jano", "González")
jano.nombre
Modificando clases ya existentes

# Monkey patching
class Range
  def even
    self.select { |n| n % 2 == 0 }
  end
end

(1..100).even
Accediendo a clases Java


# Importando clases Java
require 'java'
java_import 'java.util.date'

d = Date.new
d.to_gmt_string
Accediendo a clases Java



Date d = new Date(); => d = Date.new
d.toGMTString() => d.to_gmt_string
Comandos

Intérprete
$ jruby

REPL
$ jirb

Administrador de paquetes
$ jgem
Gemas




Precaución: No todas funcionan en Jruby
Encontrando la gema adecuada
¡A programar!
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
Clojure
Dialecto de Lisp para la JVM
            :Dc
Dinámico
   :Dc
Funcional
   :Dc
Concurrencia con STM
        :Dc
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)
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}
Funciones


;; Creando funciones
(def duplicar
  (fn [n] (* 2 n)))

;; También existe una macro
(defn duplicar [n] (* 2 n))
Recursividad


;; Nadie se aburre de este ejemplo
(defn factorial [n]
  (if (<= n 1)
      n
      (* (factorial (dec n)) n)))
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))
Accediendo a clases Java


;; Usando un método
(.toUpperCase "Hola Mundo")

;; Usando un método estático
(Math/pow 2 10)
¡A programar!
Estático
Orientado a Objetos
Funcional
Sintáxis parecida a Java, pero
      menos “verbosa”
Concurrencia con actores
Conclusiones
Es posible atacar cada problema
               :Dc
 con el lenguaje más adecuado
La JVM es una gran plataforma
              :Dc
para la programación políglota
La programación políglota en la
  JVM es factible en entornos
         “enterprise”
Precaución: El exceso de
lenguajes puede aumentar al
            caos
El resto...
Nos vemos en
Nos vemos en
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
Jano González
Desarrollador
http://janogonzalez.com
@janogonzalez

Weitere ähnliche Inhalte

Ähnlich wie Programación poliglota JVM lenguajes

Ähnlich wie Programación poliglota JVM lenguajes (20)

Jruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMJruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVM
 
Ruby para Java Developers
Ruby para Java DevelopersRuby para Java Developers
Ruby para Java Developers
 
JRuby al Rescate de J2EE
JRuby al Rescate de J2EEJRuby al Rescate de J2EE
JRuby al Rescate de J2EE
 
JRuby Al Rescate J2EE
JRuby Al Rescate J2EEJRuby Al Rescate J2EE
JRuby Al Rescate J2EE
 
Meetup training Taller RoR
Meetup training Taller RoR Meetup training Taller RoR
Meetup training Taller RoR
 
Groovy
GroovyGroovy
Groovy
 
Manual De Javascript
Manual De JavascriptManual De Javascript
Manual De Javascript
 
1117035859 javascript
1117035859 javascript1117035859 javascript
1117035859 javascript
 
Manual javascript
Manual javascriptManual javascript
Manual javascript
 
1117035859 javascript
1117035859 javascript1117035859 javascript
1117035859 javascript
 
javascript
 javascript javascript
javascript
 
1117035859 javascript
1117035859 javascript1117035859 javascript
1117035859 javascript
 
Javascript
JavascriptJavascript
Javascript
 
Javascript
JavascriptJavascript
Javascript
 
sesion_01-JAVA.pdf
sesion_01-JAVA.pdfsesion_01-JAVA.pdf
sesion_01-JAVA.pdf
 
Realizando Pruebas en la JVM con Velocidad y Eficacia
Realizando Pruebas en la JVM con Velocidad y EficaciaRealizando Pruebas en la JVM con Velocidad y Eficacia
Realizando Pruebas en la JVM con Velocidad y Eficacia
 
Javascript
JavascriptJavascript
Javascript
 
Introducción a RubyOnRails
Introducción a RubyOnRailsIntroducción a RubyOnRails
Introducción a RubyOnRails
 
JAVA3.0
JAVA3.0JAVA3.0
JAVA3.0
 
¿Cómo elegir el languaje y el framework de tu próxima aplicación web?
¿Cómo elegir el languaje y el framework de tu próxima aplicación web?¿Cómo elegir el languaje y el framework de tu próxima aplicación web?
¿Cómo elegir el languaje y el framework de tu próxima aplicación web?
 

Mehr von Jano González

JRuby ¿Lo mejor de dos mundos?
JRuby ¿Lo mejor de dos mundos?JRuby ¿Lo mejor de dos mundos?
JRuby ¿Lo mejor de dos mundos?Jano González
 
Un emulador de Game Boy escrito en Ruby (parte 1)
Un emulador de Game Boy escrito en Ruby (parte 1)Un emulador de Game Boy escrito en Ruby (parte 1)
Un emulador de Game Boy escrito en Ruby (parte 1)Jano González
 
Taller de Unit Testing y TDD en Java: Parte 1
Taller de Unit Testing y TDD en Java: Parte 1Taller de Unit Testing y TDD en Java: Parte 1
Taller de Unit Testing y TDD en Java: Parte 1Jano González
 
Curso de Spring: Transacciones
Curso de Spring: TransaccionesCurso de Spring: Transacciones
Curso de Spring: TransaccionesJano González
 
Análisis y Diseño OO 2
Análisis y Diseño OO 2Análisis y Diseño OO 2
Análisis y Diseño OO 2Jano González
 
Análisis y Diseño OO 1
Análisis y Diseño OO 1Análisis y Diseño OO 1
Análisis y Diseño OO 1Jano González
 
Curso de Spring: Beans
Curso de Spring: BeansCurso de Spring: Beans
Curso de Spring: BeansJano González
 
Un newbie conoce a Sinatra
Un newbie conoce a SinatraUn newbie conoce a Sinatra
Un newbie conoce a SinatraJano González
 

Mehr von Jano González (13)

Spring jdbc
Spring jdbcSpring jdbc
Spring jdbc
 
Vim FTW!
Vim FTW!Vim FTW!
Vim FTW!
 
Ruby
RubyRuby
Ruby
 
A Little RSpec
A Little RSpecA Little RSpec
A Little RSpec
 
JRuby ¿Lo mejor de dos mundos?
JRuby ¿Lo mejor de dos mundos?JRuby ¿Lo mejor de dos mundos?
JRuby ¿Lo mejor de dos mundos?
 
Un emulador de Game Boy escrito en Ruby (parte 1)
Un emulador de Game Boy escrito en Ruby (parte 1)Un emulador de Game Boy escrito en Ruby (parte 1)
Un emulador de Game Boy escrito en Ruby (parte 1)
 
Taller de Unit Testing y TDD en Java: Parte 1
Taller de Unit Testing y TDD en Java: Parte 1Taller de Unit Testing y TDD en Java: Parte 1
Taller de Unit Testing y TDD en Java: Parte 1
 
Curso de Spring: Transacciones
Curso de Spring: TransaccionesCurso de Spring: Transacciones
Curso de Spring: Transacciones
 
Análisis y Diseño OO 2
Análisis y Diseño OO 2Análisis y Diseño OO 2
Análisis y Diseño OO 2
 
Análisis y Diseño OO 1
Análisis y Diseño OO 1Análisis y Diseño OO 1
Análisis y Diseño OO 1
 
Programación Java
Programación JavaProgramación Java
Programación Java
 
Curso de Spring: Beans
Curso de Spring: BeansCurso de Spring: Beans
Curso de Spring: Beans
 
Un newbie conoce a Sinatra
Un newbie conoce a SinatraUn newbie conoce a Sinatra
Un newbie conoce a Sinatra
 

Kürzlich hochgeladen

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxRogerPrieto3
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 

Kürzlich hochgeladen (15)

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptx
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 

Programación poliglota JVM lenguajes