Download - An Introduction to Ruby
Überblick
Einführung
Getting started
Grundlagen
Blocks und Iteratoren
Goodies
Resources
Ruby on Rails - Übung
2
Einführung
3
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
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
The 5 E’s
Everything is an object
Elegant blocks give inline power
Exploring with reflection
Extending at runtime
Extensive standard libray
6
Beispiel 05.times do puts “ruby ist cool”.upcase end
Output:RUBY IST COOL
RUBY IST COOLRUBY IST COOL
RUBY IST COOLRUBY IST COOL
7
Getting Started
8
Ruby installieren
GPL , somit Sourcen verfügbar:
CVS, tar, make && make install
Binary installer für Windows
http://rubyforge.org/projects/rubyinstaller/
9
Ruby ausführen
Interpreter aufrufen und Skript übergeben:
prompt> ruby meinprogramm.rb
Shebang:
#!/usr/local/bin/ruby
print “a”
10
Interactive RubyInteractive 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
Demo
12
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
Demo
14
Grundlagen
15
GrundregelnKein 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
Alles ist ein ObjektNummern 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 = 517
Beispiel 1a = 9
b = 1c = a + b
print c ; c = “Hi”; print cd = c.length + c.index(”i”)
c = -99.absein_string = String.new(”HALLO”)
auch_ein_string = ‘a’ + “bcdefg #{c}”
18
Funktionen/Methoden
Einleitung mit
def funktions_name(argument)
....
end
implizites return des letzten Ausdruckes (wie überall in Ruby)
19
Beispiel 2def my_func
puts “abc” 99
enddef my_func2(a, b)
return a+bend
def a; “a”; end
ergebnis = my_func(1,2)a()
20
Namen
Klassen, Konstanten und Module fangen mit Grossbuchstaben an
Methodennamen sind kleingeschrieben
Variablen (somit Objekte) fangen mit Kleinbuchstaben an
21
Namen 2
Instanzvariablen fangen mit @ an
Klassenvariablen fangen mit @@ an
Globale Variablen beginnen mit $
Lokale Variablen beginnen mit Kleinbuchstaben
22
Klassen
Zugriff auf Klasseneigenschaften über
Klasse.methode(arg1, arg2, arg3)
Klasse.klassenvariable
Klasse::KONSTANTE
Definition von Klassen-Methoden über Klassenname.methode
23
Beispiel 3class 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 endend
a = Person.newif a.check_alter(90) puts “jung genug”end 24
Beispiel 3 contclass Person def Person.how_many @@anzahl_auf_der_welt endend
anzahl = Person.how_many
25
Vererbung
Konstruktor-Methode ist “initialize”
class a < b bedeutet, dass a von b erbt
“super” ist der Konstruktor der SuperKlasse
26
Demo
27
Access Control
Private, public und protected
Methoden sind default public
Instanzvariablen gar nicht zugänglich, man muss erst passende Methoden erschaffen (Attribute)
28
Beispiel 4class Person @name #Instanz-var @alter #Instanz-var def name @name end public def alter @alter end protected :alterend
print “#{Hansi.name} ist #{Hansi.alter} Jahre alt”
29
Attribute
Zuweisung auf Instanzvariablen durch Methoden:
def funk_name=(arg)
....
end
30
Beispiel 5class Person def name=(wie_soll_ich_heissen) @name = wie_soll_ich_heissen end attr_writer :alterend
Hansi = Person.newHansi.name = “Hansi”Hansi.alter = 12print “#{Hansi.name} ist #{Hansi.alter} Jahre alt”
31
Automatische Attribute
Benutzung der Macros “attr_reader”, “attr_writer” oder “attr_access”
32
Standard Datentypen
Numbers (Fixum, Bignum)
Strings
Array
Hash
Regular expression
Range
33
Beispiel 6string_a = “HUIBU”fixnummer = 9big_nummer = 1.23e10m_array = [”a”, “b”, [1,2], “c”, 3]mein_hash = {’anfang’ => “abc”, ‘ende’ => “xyz”}
puts string_a + mein_hash[’anfang’] + m_array[0]
meine_range = 1..10meine_range.include?(5)
34
Blocks und Iteratoren
35
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
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
Beispiel 7def foo yield puts “2 von foo” yieldend
foo { print “2 von Block”}
Output:2 von Block2 von foo2 von Block
38
Beispiel 8def foo yield puts “2 von foo” yieldend
foo do puts “2 von Block”end
Output:2 von Block2 von foo2 von Block
39
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|
...end40
Beispiel 9def foo(a, b) c = a + b print yield(c)end
foo(1,2) do |var1| var1 * 2end
Output:6
41
Iteratoren
Iteratoren sind Funktionen, die Blocks repetitiv aufrufen
Finden dort Einsatz, wo andere Sprachen normalerweise Schleifen nutzen würden
Intuitiv zu benutzten
42
Beispiel 95.times { puts “Hi”}
a = [1, 2]a.each do |the_one| print the_oneend
[”H”, “A”, “L”].collect {|x| x.succ} --> [”I”, “B”, “M”]
[1, 2, 3, 5, 7, 9].find {|v| v*v > 30} --> 7
43
Beispiel 10class Array def find for i in 0..size value = self[i] return value if yield(value) end return nil endend
44
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
Demo
46
Goodies
47
Exceptions
Ruby unterstützt und benutzt (!!!) Exceptions
Schlüsselwörter raise, rescue und ensure
Kontrollflußsteuerung über throw/catch
48
Beispiel 11begin
funktion_die_schief_laufen_kann(1,2,”aaa”)
rescue StandardError
puts “Fehler aufgetreten”
ensure
puts “wird immer ausgeführt”
end
49
Integrierter Debugger
Aufrufbar über:
prompt> ruby -r debug skript.rb
Breakpoint, Watches, Steps,....
50
Integriertes UnitTest FrameworkRuby 1.8 hat das Test::Unit Framework integriert
Unterstützung von Cases +Suits
Neuer Test:
requiere test/unit
class TestUser < Test::Unit::Case
51
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
RubyGemsPaketverwaltung 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 --remote53
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_php54
Ruby on Rails
Framework für Web-Anwendungen
Model-View-Controller Ansatz
Nur eine Konfigurationsdatei: Datenbank Zugangsdaten
THE REASON to check out Ruby
55
Integrierter Webserver
WEBrick ist ein in Ruby geschriebener Webserver, der in der Standard Distribution enthalten ist
Kann als Servlet-Container arbeiten
56
Grafische Oberflächen
RubyTK/GTK, FXRuby, ruby-gnome2, QT/Ruby, Ruby/Cocoa, WxRuby, FLTK, RubyWise, ParaGUI, Widestudio, Apollo,....
Somit “normale” GUI-Programme möglich
57
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
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
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
Crossplatform IDEFreeRIDE 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
Resources
62
Prgramming RubyThe PickAxe Book
Standardwerk von den Pragmatic Programmers
Tutorial und Referenz
Absolut zu empfehlen
63
www.ruby-lang.org
Rubys Homepage
Sourcecode und FAQ
Links zu anderen Ruby Seiten
Ruby Application Archive (RAA)
64
www.ruby-doc.org
Zentrale Dokumentation
RDoc Dokumentation als HTML
Erste Version PickAxe als HTML
65
www.rubygarden.org
WebBlog/Wiki von Ruby Entwicklern
Viele gute Artikel zum Thema Ruby
Viele gute Links
66
Bibliotheken und PaketeRubyForge
http://www.rubyforge.org
Ruby Production Archive
http://rpa-base.rubyforge.org/wiki/wiki.cgi
Ruby Application Archive
http://raa.ruby-lang.org67
Ruby on Rails
68
Übung
Ruby on Rails
Framework für Web-Anwendungen
Model-View-Controller Ansatz
Nur eine Konfigurationsdatei: Datenbank Zugangsdaten
THE REASON to check out Ruby
69
Überblick
Einführung MVC
Überblick Rails-Architektur
Übung
70
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
Model
Klasse, die das Business-Objekt abbildet mit allen seinen Funktionalitäten
BSP:
Klasse Benutzer
Klasse Buch
72
ViewEigentliche 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
ControllerVerbindung 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
Rails-Architektur
75
Active Record
Model
Verbindet Ruby-Klasse mit Daten aus der Datenbank
Bereitstellung von Funktionen zur Manipulation der Daten in der DB
76
Action Controller
Controller
Bietet die eigentlichen Funktionalitäten an, mit denen der Benutzer interagiert
Lädt den passenden Action View
77
Action View
View
Ruby Template
HTML mit ERb-tags
Das was der Benutzer zu sehen bekommt
78
Übung
79
Implementierung einer Webapplikation in weniger als 30 Minuten
Fin
80
Fragen?