SlideShare uma empresa Scribd logo
1 de 113
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
3. Mehr Ruby



Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                        2
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                        3
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
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
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                        4
3. Mehr Ruby
#!/opt/local/bin/ruby

puts "Ruby, ruby ruby!"




         Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                                 4
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
3.1 E/A



Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                        5
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                        6
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
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                        7
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
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                        8
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
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                        9
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
3.2 Load und Require



 Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                        10
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       11
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
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
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
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       12
3. Mehr Ruby
• require




   Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                          12
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
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
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
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       13
3. Mehr Ruby
• load




   Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                          13
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
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
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       14
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
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       15
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
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       16
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
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       17
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
3.3 Fehlerbehandlung



 Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                        18
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       19
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
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
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
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
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
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       20
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
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
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
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
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       22
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
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       23
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
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       24
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
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       25
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
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
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
3.4 Net::HTTP



Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       26
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       27
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
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
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
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       28
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
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       29
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
3.5 Klassen



Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       30
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       31
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
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
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
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       32
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
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       33
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
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
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       34
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
3.6 Module



Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       35
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       36
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
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
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
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
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       37
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
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
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
3.5.1 Namespaces



Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       38
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       39
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
3.5.2 Mix-Ins



Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       40
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       41
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
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
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
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       42
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
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
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
3. Mehr Ruby




Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                       43
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
A.1 Literatur und Links



  Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                         44
A.1 Literatur und Links




 Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                        45
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
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
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
A.1 Literatur und Links




 Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de

                                                        46
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

Mais conteúdo relacionado

Destaque

Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 

Destaque (20)

Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 

Ruby on rails vorlesung 3 Mehr Ruby

  • 1. 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
  • 7. 3. Mehr Ruby #!/opt/local/bin/ruby puts "Ruby, ruby 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
  • 40. 3.3 Fehlerbehandlung Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de 18
  • 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
  • 62. 3.4 Net::HTTP Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de 26
  • 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
  • 71. 3.5 Klassen Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de 30
  • 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
  • 93. 3.5.1 Namespaces Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de 38
  • 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
  • 96. 3.5.2 Mix-Ins Dipl.-Inf. (FH) Julian Fischer - fischer@avarteq.de - www.avarteq.de - www.railshoster.de - www.enterprise-rails.de 40
  • 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

Notas do Editor

  1. Behandeln gezielt Themen, die f&amp;#xFC;r die &amp;#xDC;bung notwendig sind
  2. c = check syntax w = turn warnings on Wo ist mein Interpreter? --&gt; which ruby
  3. c = check syntax w = turn warnings on Wo ist mein Interpreter? --&gt; which ruby
  4. c = check syntax w = turn warnings on Wo ist mein Interpreter? --&gt; which ruby
  5. c = check syntax w = turn warnings on Wo ist mein Interpreter? --&gt; which ruby
  6. Behandeln gezielt Themen, die f&amp;#xFC;r die &amp;#xDC;bung notwendig sind
  7. http://www.ruby-doc.org/core/classes/File.html
  8. http://www.ruby-doc.org/core/classes/File.html
  9. Behandeln gezielt Themen, die f&amp;#xFC;r die &amp;#xDC;bung notwendig sind
  10. http://www.ruby-doc.org/core/classes/File.html
  11. Behandeln gezielt Themen, die f&amp;#xFC;r die &amp;#xDC;bung notwendig sind
  12. begin, rescue gut f&amp;#xFC;r abnormale Probleme trow, catch gut f&amp;#xFC;r aus geschachtelten Strukturen zu springen
  13. begin, rescue gut f&amp;#xFC;r abnormale Probleme trow, catch gut f&amp;#xFC;r aus geschachtelten Strukturen zu springen
  14. begin, rescue gut f&amp;#xFC;r abnormale Probleme trow, catch gut f&amp;#xFC;r aus geschachtelten Strukturen zu springen
  15. begin, rescue gut f&amp;#xFC;r abnormale Probleme trow, catch gut f&amp;#xFC;r aus geschachtelten Strukturen zu springen
  16. begin, rescue gut f&amp;#xFC;r abnormale Probleme trow, catch gut f&amp;#xFC;r aus geschachtelten Strukturen zu springen
  17. analog Java
  18. analog Java
  19. analog Java
  20. Benannte Exceptions, boom anstatt $! Gruppiertes Abfangen bestimmter Exceptions
  21. Abbrechen der while-Schleife Kein add keine Songlist.play!
  22. KERNEL Caller Method: http://ruby-doc.org/core/classes/Kernel.html#M005955 - Returns the current execution stack
  23. analog Java
  24. analog Java
  25. analog Java
  26. Behandeln gezielt Themen, die f&amp;#xFC;r die &amp;#xDC;bung notwendig sind
  27. Link aufrufen Studierende sollen Lernen mit der RDoc Doku zu arbeiten.
  28. Link aufrufen Studierende sollen Lernen mit der RDoc Doku zu arbeiten.
  29. Link aufrufen Studierende sollen Lernen mit der RDoc Doku zu arbeiten.
  30. Link aufrufen Studierende sollen Lernen mit der RDoc Doku zu arbeiten.
  31. Link aufrufen Studierende sollen Lernen mit der RDoc Doku zu arbeiten.
  32. Link aufrufen Studierende sollen Lernen mit der RDoc Doku zu arbeiten.
  33. Person.new(&amp;#x201E;james&amp;#x201C;, &amp;#x201E;last&amp;#x201C;)
  34. Link aufrufen Studierende sollen Lernen mit der RDoc Doku zu arbeiten.
  35. Link aufrufen Studierende sollen Lernen mit der RDoc Doku zu arbeiten.
  36. Person.new(&amp;#x201E;james&amp;#x201C;, &amp;#x201E;last&amp;#x201C;)
  37. Symbole: etwas speichersparender als Strings, oft als Hash-Keys verwendet