Вопрос

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

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

ИЛИ

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

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

Это было полезно?

Решение

Главное, что, используя обозначение КОНСТАНТЫ, вы даете понять читателю.нижний регистр, замороженная строка создает впечатление мощь быть настраиваемым, заставляя кого-то вернуться и прочитать RDoc.

Другие советы

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

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

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

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

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

Подробнее об этом читайте в ответах здесь: Переменные класса в Ruby

Если вы хотите сделать вашу константу частной, вы всегда можете сделать:

FOO = 18
private_constant :FOO
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top