• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Ruby para Java Developers
 

Ruby para Java Developers

on

  • 3,646 views

Presentación introductoria a Ruby, enfocado a developers Java. Autor: Damian Garcia

Presentación introductoria a Ruby, enfocado a developers Java. Autor: Damian Garcia

Statistics

Views

Total Views
3,646
Views on SlideShare
3,528
Embed Views
118

Actions

Likes
2
Downloads
0
Comments
0

6 Embeds 118

http://gabrey.blogspot.com 68
http://gabrey.blogspot.com.ar 31
http://www.slideshare.net 13
http://www.linkedin.com 3
http://gabrey.blogspot.mx 2
http://gabrey.blogspot.com.es 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Ruby para Java Developers Ruby para Java Developers Presentation Transcript

    • 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/)