Pregunta

He sido la programación en Ruby durante unos meses, y me pregunto cuándo es apropiado utilizar constantes sobre las variables de clase y viceversa. (Estoy trabajando en Rails, pensando en las constantes en los modelos).

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

o

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

¿Hay circunstancias en las que una es preferible a otra? O es sólo una cuestión de gusto / estilo?

¿Fue útil?

Solución

Lo más importante es que mediante el uso de la notación CONSTANTE, que estás por lo que es claro para el lector. el caso más bajo, cadena de congelados da la impresión es podría sea ajustable, forzar a alguien a volver a leer el RDoc.

Otros consejos

Si se trata de valores muy constantes que se definen en el código fuente y no desea cambiar durante la ejecución de código, entonces te recomiendo utilizar constante.

Si va a configurar y / o cambiar estos valores de forma dinámica durante la ejecución a continuación, utilizar variable de clase con captadores y definidores.

Básicamente, usted podría ponerlo de esta manera: Si usted quiere algo que es constante, utilice una constante. Si quieres algo que es variable, utilice una variable. Parece que la lista de tipos son constantes, viendo que es una matriz congelada, así que diría que tiene sentido utilizar una constante en este caso.

Si no desea que el valor cambie alguna vez durante el tiempo de ejecución de su programa, y que está cómodo con lo que el valor que se accede fuera de su clase, se utiliza una constante.

De lo contrario, puede utilizar una variable de clase. Sin embargo, tenga en cuenta que las variables de clase son compartidos entre las subclases e instancias de las subclases. Así que si es posible que en algún momento en el futuro implementar una clase de niños, hay que tener mucho cuidado con el uso de las variables de clase.

Consulte las respuestas aquí para más información sobre esto: en Ruby

Si desea hacer su constante privada siempre se puede hacer:

FOO = 18
private_constant :FOO
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top