Недавно я начал замечать тенденцию определения приватных attr_accessor
в коде Ruby и, честно говоря, рассматриваю их как артефакт других языков программирования. Это то, что последовало за разработчиком после того, как они перешли на использование Ruby.
Когда-то, когда я изучал объектно-ориентированное программирование с использованием Java, меня учили определять частный геттер и сеттер для класса. В конце концов, это имеет смысл в языке с очень строгой типизацией, таком как Java, поскольку вам может потребоваться перегрузить сеттеры для приведения типов для каждого типа ожидаемого аргумента.
Однако, поскольку Ruby не является строго типизированным, а перегрузка методов в Ruby не является чем-то особенным, я не думаю, что необходимо иметь приватный attr_accessor
.
Рассмотрим этот простой пример:
class Person def initialize(name) self.name = name end private attr_accessor :name end
Нет никакой разницы между приведенным выше примером и приведенным ниже примером, в котором просто используется переменная экземпляра:
class Person def initialize(name) @name = name end end
Не кажется ли вам, что вторая версия также выглядит более чистой и лаконичной?
Я считаю, что пришло время остановить эту частную attr_accessor
тенденцию и просто получить доступ к переменной экземпляра в классе так, как это задумано.
- Я думаю, что если вам нужна логика для приведения или преобразования значения, вполне нормально определить частный сеттер. Полностью прекратив использование простого сеттера, вы на самом деле избавите себя от необходимости проверять свой код, если сеттер на самом деле простой или имеет дополнительную логику. Если вы увидите присваивание переменной экземпляра, вы сразу поймете, что это простое присваивание!
- Я знаю, что сейчас вы можете делать
private attr_accessor :name
на Ruby. Однако весьма вероятно, что в этом классе у вас будут и другие приватные методы, которые вы обычно переключаете на тип объявления begin-here.