Menu
Coddy logo textTech

Praca z plikami

Część sekcji Programowanie obiektowe ścieżki Ruby w Coddy. Lekcja 1 z 57.

Rzeczywiste programy są podzielone na kilka plików. Plik Ruby wczytuje inny plik za pomocą require_relative, po którym podaje się ścieżkę do pliku względem bieżącego pliku, zwykle bez rozszerzenia .rb. Po tej linii można używać metod i klas z wczytanego pliku:

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

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

Uruchomienie ruby main.rb wypisuje Hello, Ada!: main.rb wczytuje greeting.rb, a następnie wywołuje jego metodę.

Program rozpoczyna działanie w pliku, który uruchamiasz — tutaj main.rb — a Ruby wykonuje go od góry do dołu. require_relative uruchamia w tym miejscu drugi plik, ale tylko za pierwszym razem: drugie require_relative 'greeting' zwraca false i nic nie robi. Z nazwy można skorzystać dopiero po załadowaniu pliku, który ją definiuje:

# main.rb
# puts greeting("Bo")          # NoMethodError: greeting.rb nie został jeszcze załadowany
require_relative 'greeting'     # uruchamia greeting.rb, zwraca true
require_relative 'greeting'     # już załadowany, zwraca false
puts greeting("Bo")

Typowy układ to jedna klasa na plik, a nazwa pliku jest oparta na nazwie klasy zapisanej w formacie snake_case: class Dog znajduje się w pliku dog.rb, a class BankAccount w pliku bank_account.rb. W wyzwaniach w tej sekcji plik main.rb zawiera dostarczony kod wejścia/wyjścia i zaczyna się od jednej linii require_relative dla każdego pliku, w kolejności ładowania: najpierw ładowana jest klasa, na której bazuje inna klasa.

dog.rb            # class Dog ... end
bank_account.rb   # class BankAccount ... end
functions.rb      # metody pomocnicze
main.rb           # wiersze z require_relative, a następnie kod wejścia/wyjścia

To, co udostępnia plik, zależy od rodzaju nazwy. Metody zdefiniowane za pomocą def na początku pliku, klasy i stałe mogą być używane przez każdy plik załadowany po nim. Zmienna lokalna należy wyłącznie do swojego pliku:

# settings.rb
limit = 3                  # zmienna lokalna: widoczna tylko w settings.rb
MAX_ITEMS = 3              # stała: widoczna po załadowaniu
def limit_text
  "at most #{MAX_ITEMS}"
end

# main.rb
require_relative 'settings'
puts limit_text            # co najwyżej 3
puts MAX_ITEMS             # 3
# puts limit               # NameError: niezdefiniowana zmienna lokalna
challenge icon

Wyzwanie

Łatwy

Program składa się z dwóch plików. main.rb wczytuje greeting.rb, odczytuje imiona i wyświetla wynik działania greeting(name). Uzupełnij funkcję greeting w pliku greeting.rb, aby zwracała Hello, Ada! dla imienia Ada lub Hello, friend!, gdy imię jest puste.

Twój kod należy umieścić w pliku greeting.rb. Plik main.rb zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.

Spróbuj swoich sił

require_relative 'greeting'

# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
input = []
while (line = gets)
  input << line.chomp
end
input.each { |name| puts greeting(name) }
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Ruby online