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ściaTo, 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 lokalnaWyzwanie
ŁatwyProgram 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) }
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Klasy i obiekty
Praca z plikamiDefiniowanie klasZmienne instancjiMetody i selfto_s i inspectPowtórzenie – karta biblioteczna4Hermetyzacja
Metody prywatneMetody chronionePrywatne setteryOchrona stanuPowtórzenie – automat vendingowy7Polimorfizm i typowanie kacze
PolimorfizmTypowanie kaczeMetody abstrakcyjnecase i klasyPowtórzenie – metody płatności10Wzorce projektowe, część 2
Delegowanie z ForwardableWzorzec dekoratoraWzorzec budowniczegoWzorzec stanu2Metody dostępowe i self
Gettery i setteryWłasne setteryself w metodachTożsamość i równośćPowtórzenie – lista kontaktów5Dziedziczenie
PodklasyNadpisywanie metodWywoływanie superis_a? i przodkowiePowtórka – lista płac pracowników8Metody specjalne
Równość i hashMetody operatorówIndeksowanie i dodawanieWłasne kolekcjePowtórka – ułamki11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książekPoćwicz samodzielnie: Kompilator Ruby online