Menu
CoddyTech

Arbeiten mit Dateien

Teil des Abschnitts Objektorientierte Programmierung der Ruby-Journey von Coddy. Lektion 1 von 57.

Reale Programme sind auf mehrere Dateien aufgeteilt. Eine Ruby-Datei lädt mit require_relative eine andere Datei, gefolgt vom Pfad der Datei relativ zur aktuellen Datei, normalerweise ohne die Endung .rb. Nach dieser Zeile können die Methoden und Klassen der geladenen Datei verwendet werden:

# greeting.rb
def greeting(name)
  "Hello, #{name}!"
end

# main.rb
require_relative 'greeting'
puts greeting("Ada")

Bei der Ausführung von ruby main.rb wird Hello, Ada! ausgegeben: main.rb lädt greeting.rb und ruft anschließend dessen Methode auf.

Das Programm beginnt in der Datei, die du ausführst, hier main.rb, und Ruby führt sie von oben nach unten aus. require_relative führt die andere Datei an dieser Stelle aus, und zwar nur beim ersten Mal: Ein zweites require_relative 'greeting' gibt false zurück und tut nichts. Ein Name kann erst verwendet werden, nachdem die Datei geladen wurde, in der er definiert ist:

# main.rb
# puts greeting("Bo")          # NoMethodError: greeting.rb ist noch nicht geladen
require_relative 'greeting'     # führt greeting.rb aus, gibt true zurück
require_relative 'greeting'     # bereits geladen, gibt false zurück
puts greeting("Bo")

Das übliche Layout besteht aus einer Klasse pro Datei, wobei die Datei nach der Klasse in snake_case benannt ist: class Dog befindet sich in dog.rb, class BankAccount in bank_account.rb. In den Aufgaben dieses Abschnitts enthält main.rb den bereitgestellten Ein- und Ausgabecode und beginnt mit einer require_relative-Zeile pro Datei, in Ladereihenfolge: Eine Klasse, auf der eine andere Klasse aufbaut, wird zuerst geladen.

dog.rb            # class Dog ... end
bank_account.rb   # class BankAccount ... end
functions.rb      # Hilfsmethoden
main.rb           # require_relative-Zeilen, dann der Eingabe-/Ausgabecode

Was eine Datei weitergibt, hängt von der Art des Namens ab. Methoden, die mit def am Anfang einer Datei definiert werden, Klassen und Konstanten können von jeder Datei verwendet werden, die danach geladen wird. Eine lokale Variable gehört nur zu ihrer eigenen Datei:

# settings.rb
limit = 3                  # lokale Variable: nur settings.rb kann sie sehen
MAX_ITEMS = 3              # Konstante: nach dem Laden sichtbar
def limit_text
  "at most #{MAX_ITEMS}"
end

# main.rb
require_relative 'settings'
puts limit_text            # höchstens 3
puts MAX_ITEMS             # 3
# puts limit               # NameError: undefined local variable
challenge icon

Aufgabe

Einfach

Das Programm besteht aus zwei Dateien. main.rb lädt greeting.rb, liest Namen ein und gibt das Ergebnis von greeting(name) aus. Vervollständige greeting in greeting.rb, sodass für den Namen Ada Hello, Ada! zurückgegeben wird oder Hello, friend!, wenn der Name leer ist.

Dein Code gehört in greeting.rb. main.rb enthält den bereitgestellten Eingabe-/Ausgabecode und kann nicht bearbeitet werden.

Probier es selbst

require_relative 'greeting'

# Vorgegebener Ein-/Ausgabecode: unverändert lassen
input = []
while (line = gets)
  input << line.chomp
end
input.each { |name| puts greeting(name) }
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Ruby-Compiler