Upload
hubertlepicki
View
961
Download
1
Embed Size (px)
DESCRIPTION
Prezentacja ze spotkania sekcji JTeam, KWI PB oraz firmy AmberBit, poświęcona Ruby w kontekście Javy.
Citation preview
Białystok, JTeam, 2010-04-15
Ruby vs Java
Hubert ŁępickiWojciech 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?
Kod ładowany w trakcie wykonania Dostęp do kodu działającego programu Kod źródłowy zawsze dostępny Niższa wydajność
>javac MyProgram.java>java MyProgram
>ruby my_program.rb
Białystok, JTeam, 2010-04-15
Dynamiczne, silne typowanie
Wartości mają typ, zmienne nie Mniejsza złożoność języka
Brak deklaracji typów
Brak rzutowań
Większa elastyczność Błędy w czasie wykonania
1. def len(list)2. x = 03. list.each do |element|4. x += 15. end6. x7. end
public static int len(List list){ 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
Ruby
Class Test { public static void main(String[] args){}}
Białystok, JTeam, 2010-04-15
Zwięzła składnia Ruby
Accessors (pl?) Java
Ruby
Class Circle { private Coordinate center, float radius; 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, :radiusend
Białystok, JTeam, 2010-04-15
Zwięzła składnia Ruby
Lista
Java
Ruby
List<String> languages = new LinkedList<String>();languages.add("Java");languages.add("Ruby");languages.add("Python");languages.add("Perl");
1. stuff = []2. stuff << "Java", "Ruby", "Python"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 endend
>3 + 1=> 2
Białystok, JTeam, 2010-04-15
require 'activesupport'
Java
Ruby
if (1 % 2 == 1) System.err.println("Odd!");=> Odd!
if 11.odd?; puts "Odd!"=> Odd!
Białystok, JTeam, 2010-04-15
require 'activesupport'
Java
Ruby
Java
Ruby
if (1 % 2 == 1) System.err.println("Odd!");=> Odd!
if 11.odd?; puts "Odd!"=> Odd!
System.out.println("Running time: " + \(3600 + 15 * 60 + 10) + "seconds");
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 array3. if element.is_a?(Integer) && yield element4. return element5. end6. end7. end
Białystok, JTeam, 2010-04-15
Metaprogramowanie
Wykonanie kodu
Rozszerzanie klas
>eval("puts 'Hi JTeam'")=> Hi JTeam
1. speaker = Class.new2. speaker.class_eval do3. def hello_jteam4. puts "Hello JTeam!"5. end6. end7. wojtek = speaker.new8. wojtek.hello_jteam9. => "Hello JTeam!"
Białystok, JTeam, 2010-04-15
Metaprogramowanie
Dodawanie metod
1. people = ["michal", "wojtek"]2. speaker = Class.new3. speaker.class_eval do4. people.each do |person|5. define_method("hello_#{person}") {6. puts "Hello #{person}"7. }8. end9. end10. hubert = speaker.new11. hubert.methods - Object.methods12. => ["hello_michal", "hello_wojtek"]13. hubert.hello_michal14. => "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