Определение модулей
Пространства имён и методы
«Определение модулей» — бесплатный урок Ruby Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ruby Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ruby Academy содержит 4 уроков всего.
Пространства имён и методы
Модуль — это контейнер для методов и констант. В отличие от класса, экземпляр модуля создать нельзя. Модули выполняют две роли: группируют код (создают пространства имён) и предоставляют общее поведение (используются как миксины).
module Greeter
def self.hello
"Hello from the module"
end
end
puts Greeter.helloМетоды модулей
Определите метод с помощью self., чтобы вызывать его непосредственно у модуля, подобно вспомогательной функции. Такие методы часто называют функциями модуля.
module MathTools
def self.square(x)
x * x
end
end
puts MathTools.square(7)Константы модулей
Модули также хранят константы. Обращайтесь к ним с помощью оператора области видимости ::.
module Physics
GRAVITY = 9.81
end
puts Physics::GRAVITYКлассы в пространствах имён
Помещайте классы в модуль, чтобы избежать конфликтов имён. Полное имя использует ::.
module Store
class Item
def initialize(name)
@name = name
end
def to_s
@name
end
end
end
puts Store::Item.new("Book")Зачем нужны пространства имён
Две библиотеки могут определить один и тот же Logger. Пространства имён разделяют их: Audio::Logger и Network::Logger никогда не конфликтуют.
module Audio
class Logger
def name; "audio logger"; end
end
end
module Network
class Logger
def name; "network logger"; end
end
end
puts Audio::Logger.new.name
puts Network::Logger.new.namemodule_function
module_function делает следующие методы доступными и у модуля, и как закрытые методы экземпляра при подключении модуля. Это избавляет от необходимости повторять self..
module Calc
module_function
def add(a, b)
a + b
end
end
puts Calc.add(2, 3)Группировка связанных констант
Модули отлично подходят для организации связанных значений конфигурации под одним понятным именем.
module Color
RED = "#FF0000"
GREEN = "#00FF00"
BLUE = "#0000FF"
end
puts Color::GREENВложенные модули
Модули можно вкладывать друг в друга для более глубокой организации кода.
module App
module Config
VERSION = "1.0"
end
end
puts App::Config::VERSIONПросмотр содержимого модуля
Методы рефлексии позволяют во время выполнения просматривать константы и методы модуля.
module Settings
WIDTH = 80
HEIGHT = 24
end
p Settings.constantsМодули нельзя создать как экземпляры
Попытка применить Module.new к именованному модулю завершается ошибкой, поскольку у модуля нет конструктора экземпляров. Модуль является пространством имён и хранилищем поведения, а не шаблоном для объектов.
module Tools
end
begin
Tools.new
rescue NoMethodError => e
puts "Cannot instantiate: #{e.message}"
endСобираем всё вместе
Модули организуют код и позволяют делиться им:
- Используйте
self.methodдля вызываемых функций модуля. - Храните константы, к которым обращаются с помощью
::. - Помещайте классы в пространства имён, чтобы предотвратить конфликты.
- Создать экземпляр модуля нельзя.
module Geometry
PI = 3.14159
def self.circle_area(r)
PI * r * r
end
end
puts Geometry.circle_area(2)Быстрая проверка
Проверьте, насколько хорошо Вы поняли модули.
Повторение
Вы научились определять модули:
- Модули группируют методы и константы.
self.methodопределяет вызываемые функции модуля.::предоставляет доступ к константам и вложенным классам.- Пространства имён предотвращают конфликты имён.
module Util
def self.shout(s)
s.upcase + "!"
end
end
puts Util.shout("ruby")Часто задаваемые вопросы
Урок «Определение модулей» бесплатный?
Да — полный текст урока «Определение модулей» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ruby Academy, подпишись на CoddyKit PRO. Курс Ruby Academy содержит 4 уроков всего.
Чему я научусь в уроке «Определение модулей»?
Пространства имён и методы Ты практикуешь Ruby Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Ruby Academy?
Предыдущий опыт не требуется. Ruby Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Определение модулей»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Ruby Academy?
Да. Каждый урок Ruby Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Определение модулей
- include и extend
- Comparable и Enumerable
- prepend и разрешение методов