Подтвердить что ты не робот

Константы или переменные класса в рубине?

Я программировал в Ruby в течение нескольких месяцев, и мне интересно, когда целесообразно использовать константы над переменными класса и наоборот. (Я работаю в Rails, думая о константах в моделях).

class Category
  TYPES = %w(listing event business).freeze
end

ИЛИ

class Category
  @@types = %w(listing event business).freeze
  cattr_reader :types
end

Есть ли обстоятельства, когда один предпочтительнее другого? Или это просто вопрос вкуса/стиля?

4b9b3361

Ответ 1

Главное, что, используя нотацию CONSTANT, вы разъясняете читателю. в нижнем регистре, замороженная строка дает впечатление, что может быть установлено, заставляя кого-то вернуться и прочитать RDoc.

Ответ 2

Если это действительно постоянные значения, которые вы определяете в исходном коде и не хотите изменять во время выполнения кода, я бы рекомендовал использовать константу.

Если вы планируете устанавливать и/или изменять эти значения динамически во время исполнения, используйте переменную класса с геттерами и сеттерами.

Ответ 3

В принципе, вы можете сказать следующее: если вы хотите что-то постоянное, используйте константу. Если вы хотите что-то переменную, используйте переменную. Кажется, что ваш список типов - это константы, поскольку это замороженный массив, поэтому я бы сказал, что имеет смысл использовать константу в этом случае.

Ответ 4

Если вы не хотите, чтобы значение всегда менялось во время выполнения вашей программы, и вам удобнее разрешать доступ к значению за пределами вашего класса, используйте константу.

В противном случае вы можете использовать переменную класса. Однако имейте в виду, что переменные класса разделяются между подклассами и экземплярами подклассов. Поэтому, если вы в какой-то момент в будущем реализуете дочерний класс, вы должны быть очень осторожны в отношении использования переменных класса.

Подробнее см. ответы здесь: Переменные класса в Ruby