Класс - это фундаментальная конструкция Ruby, которая:
Пример класса:
class Person
# Конструктор
def initialize(name, age)
@name = name
@age = age
end
# Метод экземпляра
def introduce
"Меня зовут #{@name}, мне #{@age} лет"
end
end
person = Person.new("Анна", 30)
puts person.introduce # => "Меня зовут Анна, мне 30 лет"
initialize
@variable
)self.method_name
Модуль - это механизм для:
Пример модуля:
module MathUtils
PI = 3.14159
def self.square(x)
x * x
end
def circle_area(radius)
PI * radius**2
end
end
puts MathUtils.square(5) # => 25 (вызов метода модуля)
class Circle
include MathUtils # Подключаем модуль как mixin
end
circle = Circle.new
puts circle.circle_area(3) # => 28.27431 (используем метод из модуля)
include
- добавляет методы модуля как методы экземпляраextend
- добавляет методы модуля как методы классаprepend
- аналогично include, но с более высоким приоритетомХарактеристика | Класс | Модуль |
---|---|---|
Инстанцирование | Можно создавать экземпляры | Нельзя создавать экземпляры |
Наследование | Одиночное наследование | Нет наследования |
Подключение | - | include/extend/prepend |
Основное назначение | Создание объектов | Группировка функциональности |
Конструктор | Есть (initialize) | Отсутствует |
Пространство имен | Может быть | Основное назначение |
module Loggable
def log(message)
puts "[#{Time.now}] #{message}"
end
end
class Application
include Loggable
def run
log "Запуск приложения"
# логика приложения
end
end
app = Application.new
app.run # => выводит временную метку и сообщение
Резюмируем: классы в Ruby служат для создания объектов и организации одиночного наследования, тогда как модули предоставляют механизм для группировки функциональности, создания пространств имен и реализации подобия множественного наследования через mixins. Понимание различий и возможностей комбинации этих конструкций критически важно для эффективной работы с Ruby.