Ruby/Избранное с RubyNews: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 227:
== Тенденции в ООП ==
 
Просматривая исходники некоторых стандартных библиотек Ruby наткнулся на интересную тенденцию в описании классов. Мое наблюдение касается объявление методов класса. Напомню, что такое метод класса... Метод класса - это метод, который вызывается не относительно объекта, а относительно самого класса. Пример:
<codesource lang=ruby>puts Dir.getwd # getwd -- метод класса
Dir.new("testdir").each{|x| puts "Got #{x}" } # each -- метод объекта, а new -- метод класса.</codesource>
В первом случае происходит вызов метода класса, а во втором - метода объекта (метод класса <code>new</code> создает объект, от которого вызывается метод <code>each</code>). Перед вызовом метода класса всегда идет название класса (в нашем случае <code>Dir</code>). В чем же их отличие при обьявлении? Ниже представлен пример объявления класса метода и класса объекта:
<codesource lang=ruby>class Dir
def Dir.getwd
# тело метода
end
def each
# тело метода
end
end</codesource>
Теперь про тенденцию... Если методов класса много, то в стандартных библиотеках просто создают еще один блок, в который помещают методы класса. Пример:
<codesource lang=ruby>class Dir
class << self
def getwd
# тело метода
end
end
def each
# тело метода
end
end</codesource>
Вот такое интересное наблюдение. Думаю, что эта методика закреплена в каком либо регламентирующем документе и в дальнейшем будет стандартом.