В Ruby модулі та класи є двома основними конструкціями, які використовуються для організації та структурування коду. Хоча вони мають деякі подібності, вони виконують різні функції та мають свої унікальні характеристики.
Приклади
1. Приклад модуля:
Модулі часто використовуються для групування пов'язаних методів або як міксини для спільного використання поведінки серед класів.
module Greetings
def say_hello
"Hello!"
end
def say_goodbye
"Goodbye!"
end
end
# Використання модуля як міксина
class Person
include Greetings
end
person = Person.new
puts person.say_hello # Вивід: Hello!
puts person.say_goodbye # Вивід: Goodbye!
2. Приклад класу:
Класи використовуються для визначення об'єктів і інкапсуляції даних та поведінки.
class Person
def initialize(name, age)
@name = name
@age = age
end
def introduce
"Hi, I'm #{@name} and I'm #{@age} years old."
end
end
# Створення екземпляра класу
person = Person.new("Alice", 25)
puts person.introduce # Вивід: Hi, I'm Alice and I'm 25 years old.
В Ruby модулі та класи є двома основними конструкціями, які використовуються для організації та структурування коду. Хоча вони мають деякі подібності, вони виконують різні функції та мають свої унікальні характеристики.
Порівняння в контексті
Організація коду:
- Модулі ідеальні для групування пов'язаних утилітних методів, які можна використовувати в кількох класах.
- Класи підходять для визначення сутностей з атрибутами та поведінкою.
Повторне використання:
- Модулі досягають повторного використання через міксини.
- Класи досягають повторного використання через наслідування.
Простір імен:
- Модулі можуть використовуватися для визначення просторів імен і уникання колізій імен.
module MathOperations
module Arithmetic
def self.add(a, b)
a + b
end
end
end
puts MathOperations::Arithmetic.add(2, 3) # Вивід: 5
- Класи не часто використовуються для просторів імен.
Інстанціювання об'єктів:
- З модулями не можна створювати об'єкти.
- Класи можуть створювати об'єкти, які представляють реальні сутності з їхнім станом і поведінкою.
Зрозумівши їхні ролі та використовуючи їх відповідно, ви зможете писати чистіший і більш підтримуваний код на Ruby.
Використовуйте include vs extend
Коли використовувати include
проти extend
- Використовуйте
include
, коли хочете поділитися функціональністю з екземплярами класу. - Використовуйте
extend
, коли хочете додати функціональність безпосередньо до самого класу.
Перекладено з: Mastering the Magic of Modules vs Classes