Ruby on rails vorlesung 3 Mehr Ruby1. Ruby on Rails
Dozent
Dipl.-Inf. (FH)
Julian Fischer
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
1
2. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
2
3. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
3
4. 3. Mehr Ruby
• Ruby ist eine interpretierte Sprache
$> ruby meine_ruby_datei.rb
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
3
5. 3. Mehr Ruby
• Ruby ist eine interpretierte Sprache
$> ruby meine_ruby_datei.rb
• Syntax Check:
$> ruby -cw meine_ruby_datei.rb
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
3
6. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
4
8. 3. Mehr Ruby
#!/opt/local/bin/ruby
Pfad zum Ruby-Interpreter.
puts "Ruby, ruby ruby!"
Muss an das jeweilige System
angepasst werden.
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
4
9. 3.1 E/A
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
5
10. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
6
11. 3. Mehr Ruby
Beispiel 1:
$> vi my.rb
Inhalt:
#!/opt/local/bin/ruby
puts "Hello Ruby"
Aufruf:
$> ruby my.rb
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
6
12. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
7
13. 3. Mehr Ruby
Beispiel 2 - Tastatureingabe:
$> vi my2.rb
Inhalt:
#!/opt/local/bin/ruby
print "Eingabe: "
myin = gets
puts "Ihre Eingabe war: #{myin}"
Aufruf:
$> ruby my2.rb
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
7
14. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
8
15. 3. Mehr Ruby
Beispiel 3 - Aus einer Datei lesen:
$> vi my3.rb
Inhalt:
#!/opt/local/bin/ruby
puts "Datei einlesen..."
myfile = File.read("test.txt")
puts myfile.to_s
Aufruf:
$> ruby my3.rb
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
8
16. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
9
17. 3. Mehr Ruby
Beispiel 4 - In eine Datei schreiben:
$> vi my4.rb
Inhalt:
#!/opt/local/bin/ruby
puts "Datei schreiben..."
fh = File.new("test_out.txt", "w")
fh.puts "Zeile 1"
fh.puts "Zeile 2"
fh.close
Aufruf:
$> ruby my4.rb
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
9
18. 3.2 Load und Require
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
10
19. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
11
20. 3. Mehr Ruby
• Programme über mehrere Ruby-Dateien
verteilen
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
11
21. 3. Mehr Ruby
• Programme über mehrere Ruby-Dateien
verteilen
• require
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
11
22. 3. Mehr Ruby
• Programme über mehrere Ruby-Dateien
verteilen
• require
•load
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
11
23. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
12
24. 3. Mehr Ruby
• require
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
12
25. 3. Mehr Ruby
• require
• am häufigsten verwendet
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
12
26. 3. Mehr Ruby
• require
• am häufigsten verwendet
• setzt die angegebene Datei in die bereits
bestehende Datei ein
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
12
27. 3. Mehr Ruby
• require
• am häufigsten verwendet
• setzt die angegebene Datei in die bereits
bestehende Datei ein
• lädt die einzubindende Datei nur einmal!
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
12
28. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
13
29. 3. Mehr Ruby
• load
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
13
30. 3. Mehr Ruby
• load
• setzt die angegebene Datei ebenfalls in
die bereits bestehende Datei ein
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
13
31. 3. Mehr Ruby
• load
• setzt die angegebene Datei ebenfalls in
die bereits bestehende Datei ein
• lädt die einzubindende Datei bei
mehrfachem Aufruf mehrmals!
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
13
32. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
14
33. 3. Mehr Ruby
Beispiel 5 - Require
$> vi bsp5_require.rb
Inhalt:
#!/opt/local/bin/ruby
puts "Vor dem Require 1.."
require 'bsp5_required.rb'
puts "Nach dem Require 1.."
puts "Vor dem Require 2.."
require 'bsp5_required.rb'
puts "Nach dem Require 2.."
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
14
34. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
15
35. 3. Mehr Ruby
Beispiel 5 - Require
$> vi bsp5_required.rb
Inhalt:
#!/opt/local/bin/ruby
puts "Im Required"
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
15
36. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
16
37. 3. Mehr Ruby
Beispiel 6 - Load
$> vi bsp6_load.rb
Inhalt:
#!/opt/local/bin/ruby
puts "Vor dem Load 1.."
load 'bsp6_2bloaded.rb'
puts "Nach dem Load 1.."
puts "Vor dem Load 2.."
load 'bsp6_2bloaded.rb'
puts "Nach dem Load 2.."
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
16
38. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
17
39. 3. Mehr Ruby
Beispiel 6 - Load
$> vi bsp6_2bloaded.rb
Inhalt:
#!/opt/local/bin/ruby
puts "In 2bloaded"
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
17
41. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
19
42. 3. Mehr Ruby
• Exceptions in Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
19
43. 3. Mehr Ruby
• Exceptions in Ruby
• Verwandte Schlüsselwörter
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
19
44. 3. Mehr Ruby
• Exceptions in Ruby
• Verwandte Schlüsselwörter
• begin .. rescue
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
19
45. 3. Mehr Ruby
• Exceptions in Ruby
• Verwandte Schlüsselwörter
• begin .. rescue
• raise
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
19
46. 3. Mehr Ruby
• Exceptions in Ruby
• Verwandte Schlüsselwörter
• begin .. rescue
• raise
• catch / throw
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
19
47. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
20
48. 3. Mehr Ruby
• Exceptions in Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
20
49. 3. Mehr Ruby
• Exceptions in Ruby
• Hierarchie vordefinierter Exception-Typen
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
20
50. 3. Mehr Ruby
• Exceptions in Ruby
• Hierarchie vordefinierter Exception-Typen
• Benutzer definierte Exception-Typen
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
20
51. 3. Mehr Ruby
Hierarchie der Ruby Exception Typen
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
21
52. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
22
53. 3. Mehr Ruby
[...] Code-Fragment. Kein vollständiges Ruby Programm!
begin
eval string
rescue SyntaxError, NameError => boom
print "String doesn't compile: " + boom
rescue StandardError => bang
print "Error running script: " + bang
else
puts "Yuhuu, keine Fehler!"
ensure
puts "Dieser Block wird auf jeden Fall ausgeführt."
puts "Egal ob oder welche Exception geworfen wird"
end
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
22
54. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
23
55. 3. Mehr Ruby
[...] Code-Fragment. Kein vollständiges Ruby Programm!
catch (:done) do
while line = gets
throw :done unless fields = line.split(/t/)
songlist.add(Song.new(*fields))
end
songlist.play
end
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
23
56. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
24
57. 3. Mehr Ruby
[...] Code-Fragment. Kein vollständiges Ruby Programm!
raise
raise "Fehlertext"
# caller liefert den aktuellen stack trace
raise ArgumentError, "Name too big", caller
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
24
58. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
25
59. 3. Mehr Ruby
• begin .. rescue gut zur Fehlerbehandlung
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
25
60. 3. Mehr Ruby
• begin .. rescue gut zur Fehlerbehandlung
• catch .. trow gut zum Sprung aus
verschachtelten Strukturen
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
25
61. 3. Mehr Ruby
• begin .. rescue gut zur Fehlerbehandlung
• catch .. trow gut zum Sprung aus
verschachtelten Strukturen
• raise zum Werfen von Ausnahmen
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
25
63. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
27
64. 3. Mehr Ruby
• HTTP-Zugriffe mit Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
27
65. 3. Mehr Ruby
• HTTP-Zugriffe mit Ruby
• NET::HTTP Ruby Lib (Bei Ruby
enthalten)
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
27
66. 3. Mehr Ruby
• HTTP-Zugriffe mit Ruby
• NET::HTTP Ruby Lib (Bei Ruby
enthalten)
• http://ruby-doc.org/core/classes/Net/HTTP.html
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
27
67. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
28
68. 3. Mehr Ruby
Beispiel 7 - NET::HTTP
#!/opt/local/bin/ruby
require 'open-uri'
require 'net/http'
require 'uri'
USE_PROXY = false
# Lädt eine Ressource per HTTP von dem durch <<url>> angegebenen Speicherort (mit Proxy).
def http_get_with_proxy(url)
ret_val = nil
begin
proxy_address = "www-proxy.htw-saarland.de"
proxy_port = 3128
proxy = Net::HTTP::Proxy(proxy_address, proxy_port)
response = proxy.get_response( URI.parse(url) )
ret_val = response.body
rescue Exception => e
puts "Keine Verbindung: " + e.to_s
end
return ret_val
end
[...] Fortsetzung auf der nächsten Folie
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
28
69. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
29
70. 3. Mehr Ruby
Beispiel 7 - NET::HTTP - Fortsetzung
[...] Fortsetzung
# Lädt eine Ressource per HTTP von dem durch <<url>> angegebenen Speicherort (ohne Proxy).
def http_get(url)
ret_val = nil
begin
my_url = URI.parse(url)
res = Net::HTTP.start(my_url.host, my_url.port) {|http|
ret_val = http.get(my_url.path)
}
rescue Exception => e
puts "Keine Verbindung: " + e.to_s
end
return ret_val
end
# Herunterladen einer Datei per HTTP
if USE_PROXY then
puts "Ausgabe unter Verwendung eines Proxies"
puts http_get_with_proxy("http://www.iplists.com/nw/google.txt")
else
puts "Ausgabe ohne Verwendung eines Proxies"
puts http_get("http://www.iplists.com/nw/google.txt")
end
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
29
72. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
31
73. 3. Mehr Ruby
• Konstruktor in ruby: initialize
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
31
74. 3. Mehr Ruby
• Konstruktor in ruby: initialize
• @ --> Instanzvariable
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
31
75. 3. Mehr Ruby
• Konstruktor in ruby: initialize
• @ --> Instanzvariable
• object.inspect --> Ausgeben des
Objekts inklusive Attribute
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
31
76. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
32
77. 3. Mehr Ruby
class Person
# Konstruktor
def initialize(firstname, lastname)
@fistname = firstname
@lastname = lastname
end
end
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
32
78. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
33
79. 3. Mehr Ruby
• Vererbung mit „<„ Zeichen
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
33
80. 3. Mehr Ruby
• Vererbung mit „<„ Zeichen
• super zum Aufruf der Funktion des Eltern-Objekts
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
33
81. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
34
82. 3. Mehr Ruby
class Person
# Konstruktor
def initialize(firstname, lastname)
@firstname = firstname
@lastname = lastname
end
def to_s
return @firstname.to_s + " " + @lastname.to_s
end
end
class Student < Person
# Konstruktor
def initialize(firstname, lastname, nr)
super(firstname, lastname)
@nr = nr
end
def to_s
return super + ", " + @nr.to_s
end
end
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
34
83. 3.6 Module
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
35
84. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
36
85. 3. Mehr Ruby
• Module dienen der Gruppierung von
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
36
86. 3. Mehr Ruby
• Module dienen der Gruppierung von
• Methoden
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
36
87. 3. Mehr Ruby
• Module dienen der Gruppierung von
• Methoden
• Klassen
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
36
88. 3. Mehr Ruby
• Module dienen der Gruppierung von
• Methoden
• Klassen
• Konstanten
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
36
89. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
37
90. 3. Mehr Ruby
• Module haben zwei bedeutende Vorteile
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
37
91. 3. Mehr Ruby
• Module haben zwei bedeutende Vorteile
1. Module bilden Namensräume
Vermeidung von Namenskonflikten
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
37
92. 3. Mehr Ruby
• Module haben zwei bedeutende Vorteile
1. Module bilden Namensräume
Vermeidung von Namenskonflikten
2. Module sind die Grundlage der Mix-In
Funktionalität
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
37
94. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
39
95. 3. Mehr Ruby
module TollesModul
KONSTANTE = "Nicht jedes Beispiel hat einen tieferen Sinn. Es lenkt vom eigentlichen Thema ab.
Diese Aussage ist paradox."
def TollesModul.add(a, b)
return a + b
end
end
module DoofesModul
KONSTANTE = "Beispiele sollen sinn machen, da man sich sonst langweilt."
# Wir wollen hier zeigen, dass diese Methode sich anders verhält
def DoofesModul.add(a, b)
return a * b
end
end
puts TollesModul::add(1,1)
puts DoofesModul::add(1,1)
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
39
97. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
41
98. 3. Mehr Ruby
• Warum nicht require verwenden?
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
41
99. 3. Mehr Ruby
• Warum nicht require verwenden?
• Mix-Ins sind Module, die einer Klasse
hinzugefügt werden können
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
41
100. 3. Mehr Ruby
• Warum nicht require verwenden?
• Mix-Ins sind Module, die einer Klasse
hinzugefügt werden können
• Einer Klasse können mehrere Module
eingemischt werden
Das Mix-In-Konzept ist die Ruby Antwort auf
Mehrfachvererbung
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
41
101. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
42
102. 3. Mehr Ruby
• Warum nicht require verwenden?
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
42
103. 3. Mehr Ruby
• Warum nicht require verwenden?
• Sämtliche Methoden des Moduls werden zu
Methoden der jeweiligen Klasse
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
42
104. 3. Mehr Ruby
• Warum nicht require verwenden?
• Sämtliche Methoden des Moduls werden zu
Methoden der jeweiligen Klasse
• Anders als Java-Interfaces wird also echte
Funktionalität hinzugefügt
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
42
105. 3. Mehr Ruby
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
43
106. 3. Mehr Ruby
Beispiel 8 - Mixins
#!/opt/local/bin/ruby
module Log
def warn(message)
puts "WARN: " + message.to_s
end
end
module Persistence
def save
puts "Hier wird gespeichert..."
end
end
class MyClass
include Log
include Persistence
def test
warn("Ich hab mich hier mal eingemischt.")
save
end
end
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
43
107. A.1 Literatur und Links
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
44
108. A.1 Literatur und Links
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
45
109. A.1 Literatur und Links
• Ruby - API
http://www.ruby-doc.org/core/
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
45
110. A.1 Literatur und Links
• Ruby - API
http://www.ruby-doc.org/core/
• Programming Ruby, The Pragmatic
Programmer‘s Guide, First Edition,
http://rubycentral.com/pickaxe
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
45
111. A.1 Literatur und Links
• Ruby - API
http://www.ruby-doc.org/core/
• Programming Ruby, The Pragmatic
Programmer‘s Guide, First Edition,
http://rubycentral.com/pickaxe
• David A. Black, Ruby for Rails, The Well
Grounded Rubyist, Manning, 2009
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
45
112. A.1 Literatur und Links
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
46
113. A.1 Literatur und Links
• Peepcode.com - Ruby on Rails Screencasts
http://www.peepcode.com
Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de
46
Hinweis der Redaktion
Behandeln gezielt Themen, die f&#xFC;r die &#xDC;bung notwendig sind
c = check syntax
w = turn warnings on
Wo ist mein Interpreter? --> which ruby
c = check syntax
w = turn warnings on
Wo ist mein Interpreter? --> which ruby
c = check syntax
w = turn warnings on
Wo ist mein Interpreter? --> which ruby
c = check syntax
w = turn warnings on
Wo ist mein Interpreter? --> which ruby
Behandeln gezielt Themen, die f&#xFC;r die &#xDC;bung notwendig sind
http://www.ruby-doc.org/core/classes/File.html
http://www.ruby-doc.org/core/classes/File.html
Behandeln gezielt Themen, die f&#xFC;r die &#xDC;bung notwendig sind
http://www.ruby-doc.org/core/classes/File.html
Behandeln gezielt Themen, die f&#xFC;r die &#xDC;bung notwendig sind
begin, rescue gut f&#xFC;r abnormale Probleme
trow, catch gut f&#xFC;r aus geschachtelten Strukturen zu springen
begin, rescue gut f&#xFC;r abnormale Probleme
trow, catch gut f&#xFC;r aus geschachtelten Strukturen zu springen
begin, rescue gut f&#xFC;r abnormale Probleme
trow, catch gut f&#xFC;r aus geschachtelten Strukturen zu springen
begin, rescue gut f&#xFC;r abnormale Probleme
trow, catch gut f&#xFC;r aus geschachtelten Strukturen zu springen
begin, rescue gut f&#xFC;r abnormale Probleme
trow, catch gut f&#xFC;r aus geschachtelten Strukturen zu springen
analog Java
analog Java
analog Java
Benannte Exceptions, boom anstatt $!
Gruppiertes Abfangen bestimmter Exceptions
Abbrechen der while-Schleife
Kein add
keine Songlist.play!
KERNEL Caller Method: http://ruby-doc.org/core/classes/Kernel.html#M005955 - Returns the current execution stack
analog Java
analog Java
analog Java
Behandeln gezielt Themen, die f&#xFC;r die &#xDC;bung notwendig sind
Link aufrufen
Studierende sollen Lernen mit der RDoc Doku zu arbeiten.
Link aufrufen
Studierende sollen Lernen mit der RDoc Doku zu arbeiten.
Link aufrufen
Studierende sollen Lernen mit der RDoc Doku zu arbeiten.
Link aufrufen
Studierende sollen Lernen mit der RDoc Doku zu arbeiten.
Link aufrufen
Studierende sollen Lernen mit der RDoc Doku zu arbeiten.
Link aufrufen
Studierende sollen Lernen mit der RDoc Doku zu arbeiten.
Person.new(&#x201E;james&#x201C;, &#x201E;last&#x201C;)
Link aufrufen
Studierende sollen Lernen mit der RDoc Doku zu arbeiten.
Link aufrufen
Studierende sollen Lernen mit der RDoc Doku zu arbeiten.
Person.new(&#x201E;james&#x201C;, &#x201E;last&#x201C;)
Symbole: etwas speichersparender als Strings, oft als Hash-Keys verwendet