SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
Ruby vs Java
                                   Hubert Łępicki
                                Wojciech Piekutowski




Białystok, JTeam, 2010-04-15
Ruby vs Java




Białystok, JTeam, 2010-04-15
Ruby and Java




Białystok, JTeam, 2010-04-15
Ruby and Java
    Historia Ruby
    Implementacje Ruby
    Elegancja Ruby
    Wydajność Javy
    Jak je ożenić? → JRuby demo




Białystok, JTeam, 2010-04-15
Historia Ruby
    1995 – Ruby (tylko Japonia)
    1999 – Zachód odkrywa Ruby (1.3)
    2005 – Ruby on Rails
    2006 - JRuby
    2009 – Ruby 1.9.1


                                        Matz



Białystok, JTeam, 2010-04-15
Implementacje Ruby
    Standard Ruby aka MRI
    JRuby (JVM)
    MacRuby
    Cardinal (Parrot VM)
    MagLev (GemStone VM)
    Rubinius
    IronRuby (.net)
    Ruby.NET
    XRuby
    HotRuby

Białystok, JTeam, 2010-04-15
Interpretacja czy kompilacja?

     >ruby my_program.rb       >javac MyProgram.java
                               >java MyProgram

    Kod ładowany w trakcie wykonania
    Dostęp do kodu działającego programu
    Kod źródłowy zawsze dostępny
    Niższa wydajność




Białystok, JTeam, 2010-04-15
Dynamiczne, silne typowanie
                                         1. def len(list)
    Wartości mają typ, zmienne nie      2. x = 0
                                         3.   list.each do |element|
    Mniejsza złożoność języka           4.
                                         5.
                                                x += 1
                                              end
                                         6.   x
         Brak deklaracji typów          7. end
         Brak rzutowań
    Większa elastyczność         public static int len(List list)
                                  {
    Błędy w czasie wykonania       int x = 0;
                                    Iterator listIterator =
                                    list.iterator();
                                    while(listIterator.hasNext()){
                                      x += 1;
                                    }
                                    return x;
                                  }


Białystok, JTeam, 2010-04-15
Zwięzła składnia Ruby
    Pusty program
    Java
            Class Test {
              public static void main(String[] args){}
            }


    Ruby




Białystok, JTeam, 2010-04-15
Zwięzła składnia Ruby
    Accessors (pl?)           Class Circle {
                                 private Coordinate center, float radius;
    Java                        public void setCenter(Coordinate center){
                                   this.center = center;
                                 }
                                 public Coordinate getCenter(){
                                   return center;
                                 }
                                 public void setRadius(float radius){
                                   this.radius = radius;
                                 }
                                 public Coordinate getRadius(){
                                   return radius;
                                 }
                               }


                               class Circle
                                 attr_accessor :center, :radius
    Ruby                      end


Białystok, JTeam, 2010-04-15
Zwięzła składnia Ruby
    Lista
                   List<String> languages = new LinkedList<String>();
                   languages.add("Java");
    Java          languages.add("Ruby");
                   languages.add("Python");
                   languages.add("Perl");




                    1.   stuff   = []
                    2.   stuff   << "Java", "Ruby", "Python"
    Ruby           3.   stuff   = ["Java", "Ruby", "Python"]
                    4.   stuff   = %w(Java Ruby Python)




Białystok, JTeam, 2010-04-15
Wszystko jest obiektem
 >3.times { puts "Hello JTeam!" }
 Hello JTeam!
 Hello JTeam!
 Hello JTeam!




 >self.class
 => Object
 >1.class
 => Fixnum
 >true.class
 => TrueClass




Białystok, JTeam, 2010-04-15
Klasy wbudowane...
    …można rozszerzać
    Jak zniszczyć wszechświat?




Białystok, JTeam, 2010-04-15
Klasy wbudowane...
    …można rozszerzać
    Jak zniszczyć wszechświat?
            class Fixnum
              def +(i)
                self - i
              end
            end


            >3 + 1
            => 2




Białystok, JTeam, 2010-04-15
require 'activesupport'
                    if (1 % 2 == 1) System.err.println("Odd!");
    Java           => Odd!




    Ruby           if 11.odd?; puts "Odd!"
                    => Odd!




Białystok, JTeam, 2010-04-15
require 'activesupport'
                    if (1 % 2 == 1) System.err.println("Odd!");
    Java           => Odd!




    Ruby           if 11.odd?; puts "Odd!"
                    => Odd!



    Java           System.out.println("Running time: " + 
                    (3600 + 15 * 60 + 10) + "seconds");



    Ruby           puts "Running time: 
                    #{1.hour + 15.minutes + 10.seconds} seconds"




Białystok, JTeam, 2010-04-15
Bloki

     >find_integer(["a",1, 4, 2,"9","c"]) {|e| e.odd?}
     => 1




Białystok, JTeam, 2010-04-15
Bloki

     >find_integer(["a",1, 4, 2,"9","c"]) {|e| e.odd?}
     => 1



     1. def find_integer(array)
     2.   for element in array
     3.     if element.is_a?(Integer) && yield element
     4.       return element
     5.     end
     6.   end
     7. end




Białystok, JTeam, 2010-04-15
Metaprogramowanie
    Wykonanie kodu
            >eval("puts 'Hi JTeam'")
            => Hi JTeam



    Rozszerzanie klas
            1.   speaker = Class.new
            2.   speaker.class_eval do
            3.     def hello_jteam
            4.       puts "Hello JTeam!"
            5.     end
            6.   end
            7.   wojtek = speaker.new
            8.   wojtek.hello_jteam
            9.   => "Hello JTeam!"


Białystok, JTeam, 2010-04-15
Metaprogramowanie
    Dodawanie metod
                  1.    people = ["michal", "wojtek"]
                  2.    speaker = Class.new
                  3.    speaker.class_eval do
                  4.      people.each do |person|
                  5.        define_method("hello_#{person}") {
                  6.          puts "Hello #{person}"
                  7.        }
                  8.      end
                  9.    end
                  10.   hubert = speaker.new
                  11.   hubert.methods - Object.methods
                  12.   => ["hello_michal", "hello_wojtek"]
                  13.   hubert.hello_michal
                  14.   => "Hello michal"




Białystok, JTeam, 2010-04-15
Podsumowanie
    Ruby jest elegancki
    Pozwala wiele wyrazić
    Jest elastyczny
    Łatwo rozszerzyć wszystko
    Zwięzły




Białystok, JTeam, 2010-04-15
Podsumowanie
    Ruby jest elegancki
    Pozwala wiele wyrazić
    Jest elastyczny
    Łatwo rozszerzyć wszystko
    Zwięzły

    A co z Javą?



Białystok, JTeam, 2010-04-15
Java == wydajność




                               http://shootout.alioth.debian.org

Białystok, JTeam, 2010-04-15
Rozwiązanie: współpraca!



                               JRuby DEMO




Białystok, JTeam, 2010-04-15
Dziękujemy! Pytania?




Białystok, JTeam, 2010-04-15
   http://jruby.org
    http://www.ruby-lang.org
    http://maglev.gemstone.com
    Jean-Baptiste Escoyez (inspiracja)
    Matz (Ruby)




Białystok, JTeam, 2010-04-15
AmberBit
    http://amberbit.com
    http://amberbit.pl



    Zasoby dotyczące prezentacji (kod, nagrania):
     http://amberbit.pl/blog-pl




Białystok, JTeam, 2010-04-15

Weitere ähnliche Inhalte

Ähnlich wie Ruby And Java

Modularny JavaScript - meet.js
Modularny JavaScript - meet.jsModularny JavaScript - meet.js
Modularny JavaScript - meet.jsPatryk Jar
 
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)Codesushi.co (CODESUSHI LLC)
 
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8Szymon Stępniak
 
TorqueBox - moc Javy, piękno Rubiego
TorqueBox - moc Javy, piękno RubiegoTorqueBox - moc Javy, piękno Rubiego
TorqueBox - moc Javy, piękno Rubiegomarekgoldmann
 
infoShare 2011 - Jacek Laskowski - Programowanie Funkcjonalne Funkcyjnie z Cl...
infoShare 2011 - Jacek Laskowski - Programowanie Funkcjonalne Funkcyjnie z Cl...infoShare 2011 - Jacek Laskowski - Programowanie Funkcjonalne Funkcyjnie z Cl...
infoShare 2011 - Jacek Laskowski - Programowanie Funkcjonalne Funkcyjnie z Cl...Infoshare
 

Ähnlich wie Ruby And Java (6)

Modularny JavaScript - meet.js
Modularny JavaScript - meet.jsModularny JavaScript - meet.js
Modularny JavaScript - meet.js
 
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
 
DSL - DYI
DSL - DYIDSL - DYI
DSL - DYI
 
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8
 
TorqueBox - moc Javy, piękno Rubiego
TorqueBox - moc Javy, piękno RubiegoTorqueBox - moc Javy, piękno Rubiego
TorqueBox - moc Javy, piękno Rubiego
 
infoShare 2011 - Jacek Laskowski - Programowanie Funkcjonalne Funkcyjnie z Cl...
infoShare 2011 - Jacek Laskowski - Programowanie Funkcjonalne Funkcyjnie z Cl...infoShare 2011 - Jacek Laskowski - Programowanie Funkcjonalne Funkcyjnie z Cl...
infoShare 2011 - Jacek Laskowski - Programowanie Funkcjonalne Funkcyjnie z Cl...
 

Ruby And Java

  • 1. Ruby vs Java Hubert Łępicki Wojciech Piekutowski Białystok, JTeam, 2010-04-15
  • 2. Ruby vs Java Białystok, JTeam, 2010-04-15
  • 3. Ruby and Java Białystok, JTeam, 2010-04-15
  • 4. Ruby and Java  Historia Ruby  Implementacje Ruby  Elegancja Ruby  Wydajność Javy  Jak je ożenić? → JRuby demo Białystok, JTeam, 2010-04-15
  • 5. Historia Ruby  1995 – Ruby (tylko Japonia)  1999 – Zachód odkrywa Ruby (1.3)  2005 – Ruby on Rails  2006 - JRuby  2009 – Ruby 1.9.1 Matz Białystok, JTeam, 2010-04-15
  • 6. Implementacje Ruby  Standard Ruby aka MRI  JRuby (JVM)  MacRuby  Cardinal (Parrot VM)  MagLev (GemStone VM)  Rubinius  IronRuby (.net)  Ruby.NET  XRuby  HotRuby Białystok, JTeam, 2010-04-15
  • 7. Interpretacja czy kompilacja? >ruby my_program.rb >javac MyProgram.java >java MyProgram  Kod ładowany w trakcie wykonania  Dostęp do kodu działającego programu  Kod źródłowy zawsze dostępny  Niższa wydajność Białystok, JTeam, 2010-04-15
  • 8. Dynamiczne, silne typowanie 1. def len(list)  Wartości mają typ, zmienne nie 2. x = 0 3. list.each do |element|  Mniejsza złożoność języka 4. 5. x += 1 end 6. x  Brak deklaracji typów 7. end  Brak rzutowań  Większa elastyczność public static int len(List list) {  Błędy w czasie wykonania int x = 0; Iterator listIterator = list.iterator(); while(listIterator.hasNext()){ x += 1; } return x; } Białystok, JTeam, 2010-04-15
  • 9. Zwięzła składnia Ruby  Pusty program  Java Class Test { public static void main(String[] args){} }  Ruby Białystok, JTeam, 2010-04-15
  • 10. Zwięzła składnia Ruby  Accessors (pl?) Class Circle { private Coordinate center, float radius;  Java public void setCenter(Coordinate center){ this.center = center; } public Coordinate getCenter(){ return center; } public void setRadius(float radius){ this.radius = radius; } public Coordinate getRadius(){ return radius; } } class Circle attr_accessor :center, :radius  Ruby end Białystok, JTeam, 2010-04-15
  • 11. Zwięzła składnia Ruby  Lista List<String> languages = new LinkedList<String>(); languages.add("Java");  Java languages.add("Ruby"); languages.add("Python"); languages.add("Perl"); 1. stuff = [] 2. stuff << "Java", "Ruby", "Python"  Ruby 3. stuff = ["Java", "Ruby", "Python"] 4. stuff = %w(Java Ruby Python) Białystok, JTeam, 2010-04-15
  • 12. Wszystko jest obiektem >3.times { puts "Hello JTeam!" } Hello JTeam! Hello JTeam! Hello JTeam! >self.class => Object >1.class => Fixnum >true.class => TrueClass Białystok, JTeam, 2010-04-15
  • 13. Klasy wbudowane...  …można rozszerzać  Jak zniszczyć wszechświat? Białystok, JTeam, 2010-04-15
  • 14. Klasy wbudowane...  …można rozszerzać  Jak zniszczyć wszechświat? class Fixnum def +(i) self - i end end >3 + 1 => 2 Białystok, JTeam, 2010-04-15
  • 15. require 'activesupport' if (1 % 2 == 1) System.err.println("Odd!");  Java => Odd!  Ruby if 11.odd?; puts "Odd!" => Odd! Białystok, JTeam, 2010-04-15
  • 16. require 'activesupport' if (1 % 2 == 1) System.err.println("Odd!");  Java => Odd!  Ruby if 11.odd?; puts "Odd!" => Odd!  Java System.out.println("Running time: " + (3600 + 15 * 60 + 10) + "seconds");  Ruby puts "Running time: #{1.hour + 15.minutes + 10.seconds} seconds" Białystok, JTeam, 2010-04-15
  • 17. Bloki >find_integer(["a",1, 4, 2,"9","c"]) {|e| e.odd?} => 1 Białystok, JTeam, 2010-04-15
  • 18. Bloki >find_integer(["a",1, 4, 2,"9","c"]) {|e| e.odd?} => 1 1. def find_integer(array) 2. for element in array 3. if element.is_a?(Integer) && yield element 4. return element 5. end 6. end 7. end Białystok, JTeam, 2010-04-15
  • 19. Metaprogramowanie  Wykonanie kodu >eval("puts 'Hi JTeam'") => Hi JTeam  Rozszerzanie klas 1. speaker = Class.new 2. speaker.class_eval do 3. def hello_jteam 4. puts "Hello JTeam!" 5. end 6. end 7. wojtek = speaker.new 8. wojtek.hello_jteam 9. => "Hello JTeam!" Białystok, JTeam, 2010-04-15
  • 20. Metaprogramowanie  Dodawanie metod 1. people = ["michal", "wojtek"] 2. speaker = Class.new 3. speaker.class_eval do 4. people.each do |person| 5. define_method("hello_#{person}") { 6. puts "Hello #{person}" 7. } 8. end 9. end 10. hubert = speaker.new 11. hubert.methods - Object.methods 12. => ["hello_michal", "hello_wojtek"] 13. hubert.hello_michal 14. => "Hello michal" Białystok, JTeam, 2010-04-15
  • 21. Podsumowanie  Ruby jest elegancki  Pozwala wiele wyrazić  Jest elastyczny  Łatwo rozszerzyć wszystko  Zwięzły Białystok, JTeam, 2010-04-15
  • 22. Podsumowanie  Ruby jest elegancki  Pozwala wiele wyrazić  Jest elastyczny  Łatwo rozszerzyć wszystko  Zwięzły  A co z Javą? Białystok, JTeam, 2010-04-15
  • 23. Java == wydajność http://shootout.alioth.debian.org Białystok, JTeam, 2010-04-15
  • 24. Rozwiązanie: współpraca! JRuby DEMO Białystok, JTeam, 2010-04-15
  • 26. http://jruby.org  http://www.ruby-lang.org  http://maglev.gemstone.com  Jean-Baptiste Escoyez (inspiracja)  Matz (Ruby) Białystok, JTeam, 2010-04-15
  • 27. AmberBit  http://amberbit.com  http://amberbit.pl  Zasoby dotyczące prezentacji (kod, nagrania): http://amberbit.pl/blog-pl Białystok, JTeam, 2010-04-15