Работа с файлами
Часть раздела Объектно-ориентированное программирование путешествия по 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: undefined local variableЗадание
ЛегкоПрограмма состоит из двух файлов. main.rb загружает greeting.rb, считывает имена и выводит результат работы greeting(name). Дополните greeting в greeting.rb, чтобы для имени Ada она возвращала Hello, 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