0Pricing
Ruby Academy · Урок

Определение модулей

Пространства имён и методы

«Определение модулей» — бесплатный урок 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.name

module_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 — локальная установка не требуется.

Все уроки этого курса

  1. Определение модулей
  2. include и extend
  3. Comparable и Enumerable
  4. prepend и разрешение методов
← Назад к Ruby Academy