SlideShare una empresa de Scribd logo
1 de 20
Ruby para
Programadores
Java
Damian Garcia




                1
NO es un Java vs Ruby




        VS

                        2
Tienen en común:

- Leguaje Orientado a Objetos
- Fuertemente Tipados
Los Leguajes Fuertemente tipados no te dejan entremezclar objetos de distinto "TIPO".
Al conocer el “tipo” del objeto, esperan que tenga sentido lo que querés hacer.
Java:
String algo = 6;
//va a lanzar un error: Type mismatch: cannot convert from int to String
Ruby:
2 + "a"
#va a lanzar: TypeError: String can't be coerced into Fixnum
- Garbage collector
- Herramientas de documentación similares. RDoc y javaDoc




                                                                                        3
Diferencias

              4
Lenguaje compilado:
El codigo java primero tiene que ser traducido al lenguaje de la
virtual machine de java para poder ser ejecutado.

Un lenguaje compilado se ejecuta mucho mas rápido.




Lenguaje interpretado:
En Ruby se ejecuta directamente el codigo y este es interpretado
en RunTime.

Un lenguaje interpretado tiene un mayor costo de tiempo.
Ventaja en la etapa del desarrollo, Build and Deploy.
                                                                   5
Dinámico
Dinamicamente Tipado:
La variable pueda cambiar de "tipo" en runtime.
Estático = se fija con anterioridad por el compilador.
         Java:
         int x=2;
         x=x^100;
         System.out.println(x);     =>   -831846303 (!)

         Ruby:
         x=2
         x.class => Fixnum
         x=x**100 => 1267650600228229401496703205376
         x.class => Bignum

Estos son posibles errores que el compilador no puede llegar a
enterarse nunca..
La falta de declaraciones es el primer shock que sufre un
programador java cuando hace algo en ruby.                       6
No te preocupes por las Interfaces.
Duck typing : "Si camina como un pato, nada como un pato y hace
"quack", podemos tratarlo como un pato"

  class Pato
    def talk
      puts "Cuack"
    end
  end
  class Ganzo
    def talk()
      puts "Kwok"
    end
  end

  bandada = [ Pato.new, Ganzo.new ]
  bandada.each do |d|
      d.talk
  end

  => “Cuack”
  => “Kwok”
                                                              7
Easy Reflection
   Java
    public static Object create(Class c, String value)
      throws Exception
    {
      Constructor ctor = c.getConstructor(
        new Class[] { String.class } );
      return ctor.newInstance(
        new Object[] { "Hello" } );
    }

    public static void main (String args[])
      throws Exception
    {
      Greeting g =
        (Greeting) create(Greeting.class, "Hello");
      g.show();
    }



    Ruby
      def create(klass, value)
        klass.new(value)
      end
      g = create(Greeting, "Hello")
      g.show                                             8
Clases abiertas

  class Fixnum
    def +(numero_a_sumar)
       self - numero_a_sumar
      #ideal para el dia del inocente
    end
  end

  4+1    =>      3




                                        9
En Ruby Todo es
   un objeto

                  10
nil inclusive es un objeto
Java:
   null   => Referencia erronea a un objeto


Ruby:

   x=nil
   x.nil?   => true
   x.class => NilClass
   x.methods => ["eql?", "object_id", "id", "to_f",
"singleton_methods", "send", "taint", "frozen?",
"instance_variable_get", "^", "__send__", "instance_of?", "to_a",
"type", "protected_methods", "instance_eval", "==", "display",
"===", "instance_variable_set", "kind_of?", "extend", "to_s",
"hash", "class", "tainted?", "=~", "private_methods", "nil?",
"untaint", "is_a?"]


                                                                    11
no hay primitivos

   Java:
      String.valueOf(33);
      Integer.parseInt(“33”);


   Ruby:
      33.to_s
      “33”.to_i
      11.zero?
      7.class => Fixnum




                                12
No hay metodos, ni llamadas a
funciones, son mensajes a objetos
 string.index("x")
     #Se envia :index (con "x" como argumento)
 string.length
     #Se envia :length (sin ningún argumento)
 run_status_reports
     #Se envia :run_status_reports (a self)
 6 + 2
     #Se envia :+ (con 2 como argumento) al objeto 6


 6.+ 2   6.+(2)


                                                       13
Metodos dinámicos
class Talker

  [:hello, :good_bye].each do |arg|
    method_name = ("say_" + arg.to_s).to_sym
    send :define_method, method_name do
      puts arg
    end
  end

end

t = Talker.new
t.say_hello            => hello
t.say_good_bye         => good_bye


                                               14
Contenedores:
Java:
Arrays
Collections Framework:
  ArrayList
  Stack
  List
  HashSet
  HashMap
  ....
  ....

Ruby
Array a[1] = x
Hash h[a] = b
Set   (collection of unordered values with no duplicates)
                                                            15
Iteradores
     Java
     char[] data = { 'a', 'b', 'c', 'd', 'e', 'f' };
     for (int i = 0; i < data.length; i++) {
         System.out.println( data[i] );
     }

     Ruby
     data = 'a'..'f'
     data.each { |c| print c, "n" }

Closures
bloque de código que puede ser pasado como argumento a la llamada de
un método
     Java    public static ArrayList double(ArrayList x)
             {
               ArrayList y = new ArrayList();
               for (Iterator i = x.iterator(); i.hasNext(); )
                 y.add(i.next() * 2);
               return y;
             }

    Ruby                      Otros ej. en Ruby
        def double(a)         people.select{|p| p.age > 18}.each{|p| puts p.name}
          a.map {|e| e*2}     # o sin generar un segundo Array
        end                   people.each{|p| puts p.name if p.age > 18}      16
Mixins y Modulos en Ruby
Un modulo....
   * Puede tener metodos definidos
   * No pueden ser instanciadas
   * Pueden ser convinadas (incluidas) en una clase
       - El metodo del modulo pasa a ser un metodo de instancia de la
clase
  module LessComparable
    def >(other)
      other < self
    end
    # Other methods defined in terms of less than:
    #     <=, >=, ==
  end
  class Pair
    include LessComparable
    attr_accessor :first, :second
    # ...
    def <(other)
      (first < other.first) ||
        (first == other.first && second < other.second)
    end                                                                 17
  end
Enfocado en la
simplicidad y la
productividad
Syntaxis clara, codigo mas legible, elegante.
Muy facil de aprender.
Principio de Menor sorpresa (POLS).
Menor cantidad de lineas de codigo
Simple but powerful.
                                                18
JRuby

-Interprete open source de ruby para la JVM
-El mismo codigo Ruby corre en la JVM y en el interprete standard de
Ruby.
-Simplifica la integración Ruby-Java
Para acceder a java desde ruby:
require "java"
Para especificar las clases a usar:
include_class “nombre.de.la.Clase”
Para incluir un paquete
include_package




                                                                       19
Por donde empezar?
OneClick Ruby installer:
    http://www.ruby-lang.org/en/downloads/
En linux:
    % sudo apt-get install ruby irb rdoc
IRB (Console based interactive Ruby interpreter. )




Api: http://apidock.com/ruby
Ruby Documentacion:
    http://www.ruby-doc.org/                                      20
    (buen manual http://www.ruby-doc.org/docs/ProgrammingRuby/)

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Fundamentos POO en JS. Mixins y Traits.
Fundamentos POO en JS. Mixins y Traits.Fundamentos POO en JS. Mixins y Traits.
Fundamentos POO en JS. Mixins y Traits.
 
Programar java
Programar javaProgramar java
Programar java
 
Introduccion A Groovy
Introduccion A GroovyIntroduccion A Groovy
Introduccion A Groovy
 
Programar java
Programar javaProgramar java
Programar java
 
Codigo
CodigoCodigo
Codigo
 
Groovy
GroovyGroovy
Groovy
 
Introducción a Groovy
Introducción a GroovyIntroducción a Groovy
Introducción a Groovy
 
Semana 1 Estructuras de Datos en Java
Semana 1   Estructuras de Datos en JavaSemana 1   Estructuras de Datos en Java
Semana 1 Estructuras de Datos en Java
 
Ruby intro
Ruby introRuby intro
Ruby intro
 
Javascript C#
Javascript C#Javascript C#
Javascript C#
 
Javascript continuación
Javascript   continuaciónJavascript   continuación
Javascript continuación
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Javascript
JavascriptJavascript
Javascript
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
 
Java clases dictadas
Java clases dictadasJava clases dictadas
Java clases dictadas
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Semana 4 Introduccion Javascript
Semana 4   Introduccion JavascriptSemana 4   Introduccion Javascript
Semana 4 Introduccion Javascript
 
Ios.s2
Ios.s2Ios.s2
Ios.s2
 
Java Basico Platzi
Java Basico PlatziJava Basico Platzi
Java Basico Platzi
 
02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional
 

Similar a Ruby para Java Developers

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 JVMjavier ramirez
 
Programación Políglota en la JVM
Programación Políglota en la JVMProgramación Políglota en la JVM
Programación Políglota en la JVMJano González
 
JRuby: Ruby en un mundo enterprise
JRuby: Ruby en un mundo enterpriseJRuby: Ruby en un mundo enterprise
JRuby: Ruby en un mundo enterpriseJano González
 
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011Jano González
 
Fundamento de poo en php
Fundamento de poo en phpFundamento de poo en php
Fundamento de poo en phpRobert Moreira
 
Ruby: a Programmer's best friend
Ruby: a Programmer's best friendRuby: a Programmer's best friend
Ruby: a Programmer's best friendflekoso
 
Creación de Builders y DSL's con Groovy
Creación de Builders y DSL's con GroovyCreación de Builders y DSL's con Groovy
Creación de Builders y DSL's con GroovyJose Juan R. Zuñiga
 
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 eficaciaSoftware Guru
 
JavaScript para desarrolladores c#
JavaScript para desarrolladores c#JavaScript para desarrolladores c#
JavaScript para desarrolladores c#Luis Ruiz Pavón
 
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...Eudris Cabrera
 
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 EficaciaAndres Almiray
 
03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQueryDanae Aguilar Guzmán
 

Similar a Ruby para Java Developers (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
 
Programación Políglota en la JVM
Programación Políglota en la JVMProgramación Políglota en la JVM
Programación Políglota en la JVM
 
Jano Gonzalez - jruby
Jano Gonzalez - jrubyJano Gonzalez - jruby
Jano Gonzalez - jruby
 
JRuby: Ruby en un mundo enterprise
JRuby: Ruby en un mundo enterpriseJRuby: Ruby en un mundo enterprise
JRuby: Ruby en un mundo enterprise
 
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
 
Fundamento de poo en php
Fundamento de poo en phpFundamento de poo en php
Fundamento de poo en php
 
Ruby i
Ruby iRuby i
Ruby i
 
Ruby: a Programmer's best friend
Ruby: a Programmer's best friendRuby: a Programmer's best friend
Ruby: a Programmer's best friend
 
Creación de Builders y DSL's con Groovy
Creación de Builders y DSL's con GroovyCreación de Builders y DSL's con Groovy
Creación de Builders y DSL's con Groovy
 
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
 
Ruby
Ruby Ruby
Ruby
 
Ruby 01
Ruby 01Ruby 01
Ruby 01
 
JavaScript para desarrolladores c#
JavaScript para desarrolladores c#JavaScript para desarrolladores c#
JavaScript para desarrolladores c#
 
JRuby al Rescate de J2EE
JRuby al Rescate de J2EEJRuby al Rescate de J2EE
JRuby al Rescate de J2EE
 
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
 
C ++
C ++C ++
C ++
 
Java world
Java worldJava world
Java world
 
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
 
03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery
 
Java
JavaJava
Java
 

Más de Gustavo Andres Brey

ArqConf 2018 - No copies el modelo Spotify
ArqConf 2018 - No copies el modelo SpotifyArqConf 2018 - No copies el modelo Spotify
ArqConf 2018 - No copies el modelo SpotifyGustavo Andres Brey
 
Introduccion a Python y Data Science
Introduccion a Python y Data ScienceIntroduccion a Python y Data Science
Introduccion a Python y Data ScienceGustavo Andres Brey
 
Metodologías Agiles - APIT - UTN FRBA
Metodologías Agiles - APIT - UTN FRBAMetodologías Agiles - APIT - UTN FRBA
Metodologías Agiles - APIT - UTN FRBAGustavo Andres Brey
 
Docker como la máxima expresión de Devops - WISIT 2015
Docker como la máxima expresión de Devops - WISIT 2015Docker como la máxima expresión de Devops - WISIT 2015
Docker como la máxima expresión de Devops - WISIT 2015Gustavo Andres Brey
 
Agile Open 2009 Tdd And Architecture Influences
Agile Open 2009   Tdd And Architecture InfluencesAgile Open 2009   Tdd And Architecture Influences
Agile Open 2009 Tdd And Architecture InfluencesGustavo Andres Brey
 

Más de Gustavo Andres Brey (10)

ArqConf 2018 - No copies el modelo Spotify
ArqConf 2018 - No copies el modelo SpotifyArqConf 2018 - No copies el modelo Spotify
ArqConf 2018 - No copies el modelo Spotify
 
Introduccion a Python y Data Science
Introduccion a Python y Data ScienceIntroduccion a Python y Data Science
Introduccion a Python y Data Science
 
Architectural Lean Startup
Architectural Lean StartupArchitectural Lean Startup
Architectural Lean Startup
 
Metodologías Agiles - APIT - UTN FRBA
Metodologías Agiles - APIT - UTN FRBAMetodologías Agiles - APIT - UTN FRBA
Metodologías Agiles - APIT - UTN FRBA
 
Docker como la máxima expresión de Devops - WISIT 2015
Docker como la máxima expresión de Devops - WISIT 2015Docker como la máxima expresión de Devops - WISIT 2015
Docker como la máxima expresión de Devops - WISIT 2015
 
Dibujar, pintar y programar
Dibujar, pintar y programarDibujar, pintar y programar
Dibujar, pintar y programar
 
Caracteristicas de Ruby
Caracteristicas de RubyCaracteristicas de Ruby
Caracteristicas de Ruby
 
Ruby on Rails Workshop
Ruby on Rails WorkshopRuby on Rails Workshop
Ruby on Rails Workshop
 
Ruby On Rails Introduction
Ruby On Rails IntroductionRuby On Rails Introduction
Ruby On Rails Introduction
 
Agile Open 2009 Tdd And Architecture Influences
Agile Open 2009   Tdd And Architecture InfluencesAgile Open 2009   Tdd And Architecture Influences
Agile Open 2009 Tdd And Architecture Influences
 

Último

Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 

Último (10)

Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 

Ruby para Java Developers

  • 2. NO es un Java vs Ruby VS 2
  • 3. Tienen en común: - Leguaje Orientado a Objetos - Fuertemente Tipados Los Leguajes Fuertemente tipados no te dejan entremezclar objetos de distinto "TIPO". Al conocer el “tipo” del objeto, esperan que tenga sentido lo que querés hacer. Java: String algo = 6; //va a lanzar un error: Type mismatch: cannot convert from int to String Ruby: 2 + "a" #va a lanzar: TypeError: String can't be coerced into Fixnum - Garbage collector - Herramientas de documentación similares. RDoc y javaDoc 3
  • 5. Lenguaje compilado: El codigo java primero tiene que ser traducido al lenguaje de la virtual machine de java para poder ser ejecutado. Un lenguaje compilado se ejecuta mucho mas rápido. Lenguaje interpretado: En Ruby se ejecuta directamente el codigo y este es interpretado en RunTime. Un lenguaje interpretado tiene un mayor costo de tiempo. Ventaja en la etapa del desarrollo, Build and Deploy. 5
  • 6. Dinámico Dinamicamente Tipado: La variable pueda cambiar de "tipo" en runtime. Estático = se fija con anterioridad por el compilador. Java: int x=2; x=x^100; System.out.println(x); => -831846303 (!) Ruby: x=2 x.class => Fixnum x=x**100 => 1267650600228229401496703205376 x.class => Bignum Estos son posibles errores que el compilador no puede llegar a enterarse nunca.. La falta de declaraciones es el primer shock que sufre un programador java cuando hace algo en ruby. 6
  • 7. No te preocupes por las Interfaces. Duck typing : "Si camina como un pato, nada como un pato y hace "quack", podemos tratarlo como un pato" class Pato def talk puts "Cuack" end end class Ganzo def talk() puts "Kwok" end end bandada = [ Pato.new, Ganzo.new ] bandada.each do |d| d.talk end => “Cuack” => “Kwok” 7
  • 8. Easy Reflection Java public static Object create(Class c, String value) throws Exception { Constructor ctor = c.getConstructor( new Class[] { String.class } ); return ctor.newInstance( new Object[] { "Hello" } ); } public static void main (String args[]) throws Exception { Greeting g = (Greeting) create(Greeting.class, "Hello"); g.show(); } Ruby def create(klass, value) klass.new(value) end g = create(Greeting, "Hello") g.show 8
  • 9. Clases abiertas class Fixnum def +(numero_a_sumar) self - numero_a_sumar #ideal para el dia del inocente end end 4+1 => 3 9
  • 10. En Ruby Todo es un objeto 10
  • 11. nil inclusive es un objeto Java: null => Referencia erronea a un objeto Ruby: x=nil x.nil? => true x.class => NilClass x.methods => ["eql?", "object_id", "id", "to_f", "singleton_methods", "send", "taint", "frozen?", "instance_variable_get", "^", "__send__", "instance_of?", "to_a", "type", "protected_methods", "instance_eval", "==", "display", "===", "instance_variable_set", "kind_of?", "extend", "to_s", "hash", "class", "tainted?", "=~", "private_methods", "nil?", "untaint", "is_a?"] 11
  • 12. no hay primitivos Java: String.valueOf(33); Integer.parseInt(“33”); Ruby: 33.to_s “33”.to_i 11.zero? 7.class => Fixnum 12
  • 13. No hay metodos, ni llamadas a funciones, son mensajes a objetos string.index("x") #Se envia :index (con "x" como argumento) string.length #Se envia :length (sin ningún argumento) run_status_reports #Se envia :run_status_reports (a self) 6 + 2 #Se envia :+ (con 2 como argumento) al objeto 6 6.+ 2 6.+(2) 13
  • 14. Metodos dinámicos class Talker [:hello, :good_bye].each do |arg| method_name = ("say_" + arg.to_s).to_sym send :define_method, method_name do puts arg end end end t = Talker.new t.say_hello => hello t.say_good_bye => good_bye 14
  • 15. Contenedores: Java: Arrays Collections Framework: ArrayList Stack List HashSet HashMap .... .... Ruby Array a[1] = x Hash h[a] = b Set (collection of unordered values with no duplicates) 15
  • 16. Iteradores Java char[] data = { 'a', 'b', 'c', 'd', 'e', 'f' }; for (int i = 0; i < data.length; i++) { System.out.println( data[i] ); } Ruby data = 'a'..'f' data.each { |c| print c, "n" } Closures bloque de código que puede ser pasado como argumento a la llamada de un método Java public static ArrayList double(ArrayList x) { ArrayList y = new ArrayList(); for (Iterator i = x.iterator(); i.hasNext(); ) y.add(i.next() * 2); return y; } Ruby Otros ej. en Ruby def double(a) people.select{|p| p.age > 18}.each{|p| puts p.name} a.map {|e| e*2} # o sin generar un segundo Array end people.each{|p| puts p.name if p.age > 18} 16
  • 17. Mixins y Modulos en Ruby Un modulo.... * Puede tener metodos definidos * No pueden ser instanciadas * Pueden ser convinadas (incluidas) en una clase - El metodo del modulo pasa a ser un metodo de instancia de la clase module LessComparable def >(other) other < self end # Other methods defined in terms of less than: # <=, >=, == end class Pair include LessComparable attr_accessor :first, :second # ... def <(other) (first < other.first) || (first == other.first && second < other.second) end 17 end
  • 18. Enfocado en la simplicidad y la productividad Syntaxis clara, codigo mas legible, elegante. Muy facil de aprender. Principio de Menor sorpresa (POLS). Menor cantidad de lineas de codigo Simple but powerful. 18
  • 19. JRuby -Interprete open source de ruby para la JVM -El mismo codigo Ruby corre en la JVM y en el interprete standard de Ruby. -Simplifica la integración Ruby-Java Para acceder a java desde ruby: require "java" Para especificar las clases a usar: include_class “nombre.de.la.Clase” Para incluir un paquete include_package 19
  • 20. Por donde empezar? OneClick Ruby installer: http://www.ruby-lang.org/en/downloads/ En linux: % sudo apt-get install ruby irb rdoc IRB (Console based interactive Ruby interpreter. ) Api: http://apidock.com/ruby Ruby Documentacion: http://www.ruby-doc.org/ 20 (buen manual http://www.ruby-doc.org/docs/ProgrammingRuby/)