Константы или переменные класса в Ruby?
я программирую в Ruby уже несколько месяцев, и мне интересно, когда целесообразно использовать константы над переменными класса и наоборот. (Я работаю в Rails, думая о константах в моделях).
class Category
TYPES = %w(listing event business).freeze
end
или
class Category
@@types = %w(listing event business).freeze
cattr_reader :types
end
существуют ли обстоятельства, при которых одно предпочтительнее другого? Или это просто вопрос вкуса / стиля?
5 ответов
главное, что, используя постоянную нотацию, вы делаете это понятным для читателя. нижний регистр, замороженная строка создает впечатление might быть настраиваемым, заставляя кого-то вернуться и прочитать RDoc.
Если это действительно постоянные значения, которые вы определяете в исходном коде и не хотите изменять во время выполнения кода, я бы рекомендовал использовать constant.
Если вы планируете динамически устанавливать и/или изменять эти значения во время выполнения, используйте переменную класса с геттерами и сеттерами.
в принципе, вы можете сказать так: Если вы хотите что-то постоянное, используйте константу. Если вы хотите что-то переменное, используйте переменную. Похоже, что ваш список типов-константы, поскольку это замороженный массив, поэтому я бы сказал, что имеет смысл использовать константу в этом случае.
Если вы не хотите, чтобы значение, чтобы изменить во время выполнения программы и вам удобно разрешать доступ к значению за пределами вашего класса, использовать константу.
в противном случае, вы можете использовать переменную класса. Однако имейте в виду, что переменные класса являются общими для подклассов и экземпляров подклассов. Поэтому, если вы можете в какой-то момент в будущем реализовать дочерний класс, вы должны быть очень осторожны в использовании класса переменная.
см. ответы здесь для получения дополнительной информации об этом:переменные класса в Ruby
Если вы хотите сделать свой постоянный частный вы всегда можете сделать:
FOO = 18
private_constant :FOO