Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Ruby And Java

1,208 views

Published on

Prezentacja ze spotkania sekcji JTeam, KWI PB oraz firmy AmberBit, poświęcona Ruby w kontekście Javy.

Published in: Technology
  • Be the first to comment

Ruby And Java

  1. 1. Ruby vs Java Hubert Łępicki Wojciech Piekutowski Białystok, JTeam, 2010-04-15
  2. 2. Ruby vs Java Białystok, JTeam, 2010-04-15
  3. 3. Ruby and Java Białystok, JTeam, 2010-04-15
  4. 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. 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. 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. 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. 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. 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. 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. 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. 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. 13. Klasy wbudowane...  …można rozszerzać  Jak zniszczyć wszechświat? Białystok, JTeam, 2010-04-15
  14. 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. 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. 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. 17. Bloki >find_integer(["a",1, 4, 2,"9","c"]) {|e| e.odd?} => 1 Białystok, JTeam, 2010-04-15
  18. 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. 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. 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. 21. Podsumowanie  Ruby jest elegancki  Pozwala wiele wyrazić  Jest elastyczny  Łatwo rozszerzyć wszystko  Zwięzły Białystok, JTeam, 2010-04-15
  22. 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. 23. Java == wydajność http://shootout.alioth.debian.org Białystok, JTeam, 2010-04-15
  24. 24. Rozwiązanie: współpraca! JRuby DEMO Białystok, JTeam, 2010-04-15
  25. 25. Dziękujemy! Pytania? Białystok, JTeam, 2010-04-15
  26. 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. 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

×