Создание и использование модулей в Ruby
НАВИГАЦИЯ ПО СТРАНИЦЕ
Модули в Ruby предоставляют механизм для группировки методов и констант, обеспечивая их повторное использование в различных частях программы. В данном контексте модули играют важную роль в поддержке принципа DRY (Don't Repeat Yourself) и структурировании кода.
Создание модуля
Создание модуля в Ruby осуществляется с использованием ключевого слова module, после которого следует блок кода, содержащий методы и константы.
module MathOperations
def add(a, b)
a + b
end
def subtract(a, b)
a - b
end
end
Включение модуля
Модули могут быть включены в классы с использованием ключевого слова include. Это позволяет классам использовать методы и константы из модуля.
class Calculator
include MathOperations
end
calc = Calculator.new
puts calc.add(5, 3) # Вывод: 8
puts calc.subtract(7, 2) # Вывод: 5
Пространства имен в модулях
Модули также предоставляют средство для создания пространств имен. Это позволяет избежать конфликтов имен между различными частями программы.
module Geometry
class Circle
def area(radius)
Math::PI * radius**2
end
end
end
module Physics
class Circle
def circumference(radius)
2 * Math::PI * radius
end
end
end
circle1 = Geometry::Circle.new
puts circle1.area(4) # Вывод: 50.26548245743669
circle2 = Physics::Circle.new
puts circle2.circumference(4) # Вывод: 25.132741228718345
Встроенные модули
Ruby также предоставляет множество встроенных модулей, таких как Enumerable и Comparable, которые можно использовать для обогащения классов стандартным функционалом.
class MyArray
include Enumerable
def initialize(*elements)
@elements = elements
end
def each
@elements.each { |element| yield element }
end
end
my_array = MyArray.new(1, 2, 3, 4, 5)
puts my_array.map { |x| x * 2 } # Вывод: 2 4 6 8 10
puts my_array.sum # Вывод: 15
Использование модулей в Ruby способствует созданию модульного и легко поддерживаемого кода. Модули предоставляют механизм для организации функционала, изоляции пространств имен, и повторного использования кода, что делает их важной частью языка и обширного экосистемы Ruby.