27
Białystok, JTeam, 2010-04-15 Ruby vs Java Hubert Łępicki Wojciech Piekutowski

Ruby And Java

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Ruby And Java

Białystok, JTeam, 2010-04-15

Ruby vs Java

Hubert ŁępickiWojciech Piekutowski

Page 2: Ruby And Java

Białystok, JTeam, 2010-04-15

Ruby vs Java

Page 3: Ruby And Java

Białystok, JTeam, 2010-04-15

Ruby and Java

Page 4: 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

Page 5: Ruby And Java

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

Page 6: Ruby And Java

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

Page 7: Ruby And Java

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

Page 8: Ruby And Java

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;}

Page 9: Ruby And Java

Białystok, JTeam, 2010-04-15

Zwięzła składnia Ruby

Pusty program Java

Ruby

Class Test { public static void main(String[] args){}}

Page 10: Ruby And Java

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

Page 11: Ruby And Java

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)

Page 12: Ruby And Java

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

Page 13: Ruby And Java

Białystok, JTeam, 2010-04-15

Klasy wbudowane...

…można rozszerzać Jak zniszczyć wszechświat?

Page 14: Ruby And Java

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

Page 15: Ruby And Java

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!

Page 16: Ruby And Java

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"

Page 17: Ruby And Java

Białystok, JTeam, 2010-04-15

Bloki

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

Page 18: Ruby And Java

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

Page 19: Ruby And Java

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!"

Page 20: Ruby And Java

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"

Page 21: Ruby And Java

Białystok, JTeam, 2010-04-15

Podsumowanie

Ruby jest elegancki Pozwala wiele wyrazić Jest elastyczny Łatwo rozszerzyć wszystko Zwięzły

Page 22: Ruby And Java

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ą?

Page 23: Ruby And Java

Białystok, JTeam, 2010-04-15

Java == wydajność

http://shootout.alioth.debian.org

Page 24: Ruby And Java

Białystok, JTeam, 2010-04-15

Rozwiązanie: współpraca!

JRuby DEMO

Page 25: Ruby And Java

Białystok, JTeam, 2010-04-15

Dziękujemy! Pytania?

Page 26: Ruby And Java

Białystok, JTeam, 2010-04-15

http://jruby.org http://www.ruby-lang.org http://maglev.gemstone.com Jean-Baptiste Escoyez (inspiracja) Matz (Ruby)

Page 27: Ruby And Java

Białystok, JTeam, 2010-04-15

AmberBit

http://amberbit.com http://amberbit.pl

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