Работа с файлами
Часть раздела Объектно-ориентированное программирование путешествия по Ruby на Coddy. Урок 1 из 57.
Реальные программы разделены на несколько файлов. Файл Ruby загружает другой файл с помощью require_relative, после которого указывается путь к файлу относительно текущего файла, обычно без окончания .rb. После этой строки можно использовать методы и классы загруженного файла:
# greeting.rb
def greeting(name)
"Hello, #{name}!"
end
# main.rb
require_relative 'greeting'
puts greeting("Ada")Запуск ruby main.rb выводит Hello, Ada!: main.rb загружает greeting.rb, а затем вызывает его метод.
Программа запускается в файле, который ты запускаешь, здесь — main.rb, и Ruby выполняет его сверху вниз. require_relative запускает другой файл в этом месте и только в первый раз: второй вызов require_relative 'greeting' возвращает false и ничего не делает. Имя можно использовать только после загрузки файла, в котором оно определено:
# main.rb
# puts greeting("Bo") # NoMethodError: greeting.rb ещё не загружен
require_relative 'greeting' # выполняет greeting.rb, возвращает true
require_relative 'greeting' # уже загружен, возвращает false
puts greeting("Bo")Обычная структура — один класс на файл; имя файла соответствует имени класса в snake_case: class Dog находится в dog.rb, а class BankAccount — в bank_account.rb. В заданиях этого раздела в main.rb находится предоставленный код ввода/вывода, и файл начинается со строки require_relative для каждого файла в порядке загрузки: сначала загружается класс, на основе которого строится другой класс.
dog.rb # class Dog ... end
bank_account.rb # class BankAccount ... end
functions.rb # вспомогательные методы
main.rb # строки с require_relative, затем код ввода-выводаТо, чем файл делится с другими файлами, зависит от типа имени. Методы, определённые с помощью def в начале файла, классы и константы доступны каждому файлу, загруженному после него. Локальная переменная принадлежит только своему файлу:
# settings.rb
limit = 3 # локальная переменная: видна только в settings.rb
MAX_ITEMS = 3 # константа: доступна после загрузки
def limit_text
"at most #{MAX_ITEMS}"
end
# main.rb
require_relative 'settings'
puts limit_text # не более 3
puts MAX_ITEMS # 3
# puts limit # NameError: неопределённая локальная переменнаяЗадание
ЛегкоВ программе два файла. main.rb загружает greeting.rb, считывает имена и выводит результат greeting(name). Дополните greeting в greeting.rb, чтобы она возвращала Hello, Ada! для имени Ada или Hello, friend!, если имя пустое.
Ваш код нужно написать в greeting.rb. В main.rb находится предоставленный код ввода/вывода, и его нельзя редактировать.
Попробуйте сами
require_relative 'greeting'
# Предоставленный код ввода-вывода: оставьте его без изменений
input = []
while (line = gets)
input << line.chomp
end
input.each { |name| puts greeting(name) }
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Классы и объекты
Работа с файламиОпределение классовПеременные экземпляраМетоды и selfto_s и inspectПовторение — читательский билет4Инкапсуляция
Приватные методыЗащищённые методыПриватные сеттерыЗащита состоянияПовторение — торговый автомат7Полиморфизм и утиная типизация
ПолиморфизмУтиная типизацияАбстрактные методыcase и классыПовторение — способы оплаты10Шаблоны проектирования, часть 2
Делегирование с помощью ForwardableШаблон декоратораШаблон строителяШаблон состояния2Аксессоры и self
Чтение и записьПользовательские сеттерыself в методахИдентичность и равенствоПовторение — список контактов5Наследование
ПодклассыПереопределение методовВызов superis_a? и предкиПовторение — расчёт зарплаты сотрудников8Специальные методы
Равенство и хешированиеМетоды операторовИндексация и добавлениеПользовательские коллекцииПовторение — дроби11Проект: Управление библиотекой
Книги и читателиВыдача книг3Методы и переменные классов
Методы классовПеременные экземпляра классаКонстантыФабричные методыПовторение — коды купонов6Модули и примеси
Модули и includeРасширение объектовМодуль ComparableМодуль EnumerableПовторение — спортивная лига9Паттерны проектирования. Часть 1
Паттерн «Одиночка»Фабричный паттернПаттерн «Наблюдатель»Паттерн «Стратегия»Потренируйтесь самостоятельно: Онлайн-компилятор Ruby