4. Ruby?
Ruby ist eine vollständig
objektorientierte
Skriptsprache
Das Beste von Perl und
Python
Public release 1995 durch
Yukihiro Matsumoto,
a.k.a “Matz”
4
5. Wichtigste Eigenschaften
Interpretierte Skriptsprache
Aktuell ist Ruby 1.8.2
Komplett Objekt-Orientiert
Dynamische Typbindung
Verfügbar über GPL oder eigene Lizenz
The 5 E’s (by DHH)
5
6. The 5 E’s
Everything is an object
Elegant blocks give inline power
Exploring with reflection
Extending at runtime
Extensive standard libray
6
7. Beispiel 0
5.times do puts “ruby ist cool”.upcase end
Output:
RUBY IST COOL
RUBY IST COOL
RUBY IST COOL
RUBY IST COOL
RUBY IST COOL
7
9. Ruby installieren
GPL , somit Sourcen verfügbar:
CVS, tar, make && make install
Binary installer für Windows
http://rubyforge.org/projects/
rubyinstaller/
9
11. Interactive Ruby
Interactive Ruby (irb) ist eine Ruby
“Shell”
Erlaubt ausführen von eingegeben Code
oder lesen von Code aus Dateien
Shell-Eigenschaften wie History, Job-
Controll und Commandline-Editing
Perfekt, um zu probieren und spielen
11
13. Dokumentation
Ruby wird meist in RDoc dokumentiert
(vergleichbar JavaDoc)
Konvertierung in HTML und ri
ri erlaubt Zugang über
Kommandozeile:
prompt> ri WAS_ICH_WISSEN_WILL
13
16. Grundregeln
Kein Semikolon am Ende der Zeile (bei
einer Anweisung pro Zeile)
Keine geschweiften Klammern zur
Deklaration vom Blöcken, sondern
“xxxx......end”
Keine Deklaration von Variablen!
() können bei Methoden weggelassen
werden 16
17. Alles ist ein Objekt
Nummern und Strings sind auch
Objekte
“nil” als Null-Objekt statt null-pointer
Zugang zu Instanz-Methoden über:
Instanz.methode(arg1, arg2)
Zugang zu Instanz-Attributen über:
Instanz.attribut = 5
17
18. Beispiel 1
a=9
b=1
c=a+b
print c ; c = “Hi”; print c
d = c.length + c.index(”i”)
c = -99.abs
ein_string = String.new(”HALLO”)
auch_ein_string = ‘a’ + “bcdefg #{c}”
18
20. Beispiel 2
def my_func
puts “abc”
99
end
def my_func2(a, b)
return a+b
end
def a; “a”; end
ergebnis = my_func(1,2)
a()
20
21. Namen
Klassen, Konstanten und Module
fangen mit Grossbuchstaben an
Methodennamen sind kleingeschrieben
Variablen (somit Objekte) fangen mit
Kleinbuchstaben an
21
22. Namen 2
Instanzvariablen fangen mit @ an
Klassenvariablen fangen mit @@ an
Globale Variablen beginnen mit $
Lokale Variablen beginnen mit
Kleinbuchstaben
22
23. Klassen
Zugriff auf Klasseneigenschaften über
Klasse.methode(arg1, arg2, arg3)
Klasse.klassenvariable
Klasse::KONSTANTE
Definition von Klassen-Methoden über
Klassenname.methode
23
24. Beispiel 3
class Person
@name #Instanz-var
@alter #Instanz-var
@@anzahl_auf_der_welt #Klassen-var
MAX_ALTER = 100 #Konstante
def check_alter(alter) #Instanz-meth
alter < Person::MAX_ALTER
end
end
a = Person.new
if a.check_alter(90)
puts “jung genug”
end 24
25. Beispiel 3 cont
class Person
def Person.how_many
@@anzahl_auf_der_welt
end
end
anzahl = Person.how_many
25
28. Access Control
Private, public und protected
Methoden sind default public
Instanzvariablen gar nicht zugänglich,
man muss erst passende Methoden
erschaffen (Attribute)
28
29. Beispiel 4
class Person
@name #Instanz-var
@alter #Instanz-var
def name
@name
end
public def alter
@alter
end
protected :alter
end
print “#{Hansi.name} ist #{Hansi.alter} Jahre alt”
29
31. Beispiel 5
class Person
def name=(wie_soll_ich_heissen)
@name = wie_soll_ich_heissen
end
attr_writer :alter
end
Hansi = Person.new
Hansi.name = “Hansi”
Hansi.alter = 12
print “#{Hansi.name} ist #{Hansi.alter} Jahre alt”
31
36. Blocks
Blocks sind eine Art anonyme
Funktion
Sie werden (fast) immer mit
“normalen” Funktionen eingesetzt
Dabei wird der Kontrollfluß zwischen
den Funktionen hin und her gereicht
36
37. Blocks
Blocks werden auf der selben Zeile wie
der Methoden-Aufruf geschrieben
Notation in {...} oder do...end
Die “normale” Funktion kann den
Block über “yield” aufrufen
37
38. Beispiel 7
def foo
yield
puts “2 von foo”
yield
end
foo { print “2 von Block”}
Output:
2 von Block
2 von foo
2 von Block
38
39. Beispiel 8
def foo
yield
puts “2 von foo”
yield
end
foo do
puts “2 von Block”
end
Output:
2 von Block
2 von foo
2 von Block 39
40. Yield
Yield kann auch Variablen übergeben,
die an den Block weitergereicht werden
Das Ergebnis des Blocks wird die
Rückgabe von yield
{|var1, var2| print var1 .....}
do |var3, var4|
...end
40
41. Beispiel 9
def foo(a, b)
c=a+b
print yield(c)
end
foo(1,2) do |var1|
var1 * 2
end
Output:
6
41
42. Iteratoren
Iteratoren sind Funktionen, die Blocks
repetitiv aufrufen
Finden dort Einsatz, wo andere
Sprachen normalerweise Schleifen
nutzen würden
Intuitiv zu benutzten
42
43. Beispiel 9
5.times { puts “Hi”}
a = [1, 2]
a.each do |the_one|
print the_one
end
[”H”, “A”, “L”].collect {|x| x.succ} --> [”I”, “B”, “M”]
[1, 2, 3, 5, 7, 9].find {|v| v*v > 30} --> 7
43
44. Beispiel 10
class Array
def find
for i in 0..size
value = self[i]
return value if yield(value)
end
return nil
end
end
44
45. Proc Objekt
Man kann Blocks mit Hilfer der lamba
Funktion oder des Konstruktor der Proc-
Klasse in Objekte verwandeln
Diese kann man nun “rumreichen”
Abfangen des Blocks und Umwandeln
in Proc auch in der “normalen” Methode
möglich
45
51. Integriertes UnitTest
Framework
Ruby 1.8 hat das Test::Unit Framework
integriert
Unterstützung von Cases +Suits
Neuer Test:
requiere test/unit
class TestUser < Test::Unit::Case
51
52. Mixes
Module und deren Eigenschaften
können in beliebige Klassen “gemixt”
werden
Diese erhalten somit alle Methoden und
Variablen
Eine Art Java Interfaces nur mit
Implementierung
52
53. RubyGems
Paketverwaltung für Ruby Programme
und Bibliotheken
Vergleichbar mit Pear und CPAN
Installation von Programmen in
verschiedenen Versionen möglich
gem install rails --remote
gem upgrade --remote
53
54. erb, eruby und
mod_ruby
erb und eruby sind filter, die es
erlauben, Ruby Code in HTML
unterzubringen (PHP)
<h1> Willkommen,
<% print #{Hansi.name} %>
</h1>
mod_ruby vergleichbar mit mod_php
54
55. Ruby on Rails
Framework für Web-Anwendungen
Model-View-Controller Ansatz
Nur eine Konfigurationsdatei:
Datenbank Zugangsdaten
THE REASON to check out Ruby
55
56. Integrierter Webserver
WEBrick ist ein in Ruby geschriebener
Webserver, der in der Standard
Distribution enthalten ist
Kann als Servlet-Container arbeiten
56
58. Taint Obejcts
Taint-modus, ähnlich wie bei Perl
Setzen des Levels(1-4) über $SAFE
Alle externen Daten sind “tainted”
Tainted Objects können nicht an
gefährliche Funktionen übergeben
werden (z.B. System)
58
59. Reflection
Ruby hat massive Reflection API
Möglich unbekannte Objekte, Klassen,
Module und Funktionen zu inspizieren
Wichtig für Debugger, IDEs und
dynamische Erweiterbarkeit
59
60. Distributed Ruby
drb erlaubt ausführen von RubyCode
auf entfernen Rechnern
Vergleichbar CORBA, Java-RMI
Einfach und schnell
1GHz PowerBook: 500 Calls pro Sek
60
61. Crossplatform IDE
FreeRIDE ist eine Ruby IDE
für Windows, UNIX und
Mac OS X
Unterstützung von
Debugging, Code
completion, Refactoring,
remote pair-programming
http://
freeride.rubyforge.org
61
69. Ruby on Rails
Framework für Web-Anwendungen
Model-View-Controller Ansatz
Nur eine Konfigurationsdatei:
Datenbank Zugangsdaten
THE REASON to check out Ruby
69
71. Model-View-Controller
Design-Pattern für Programme mit
Interaktion mit dem Benutzer
KLassen werden in drei Gruppen
eingeteilt, die sich auf ihre jeweillige
Aufgabe spezialisieren
Vorteil: Entkopplung und somit
Wiederverwendbarkeit
71
72. Model
Klasse, die das Business-Objekt abbildet
mit allen seinen Funktionalitäten
BSP:
Klasse Benutzer
Klasse Buch
72
73. View
Eigentliche Darstellung für den User
Keine Funktionalität, nur Design
+Anzeige
BSP:
Template, dass alle Bücher im System
anzeigt
Template, dass alle Bücher eines
Benutzers anzeigt
73
74. Controller
Verbindung zwischen Model und View
Lädt benötigte Daten aus dem Model
und füttert sie in den View
Prozess-Logik
BSP:
Lade alle Bücher im System und gebe
sie dem richtigem Template
74