Question

J'ai été la programmation en Ruby pendant quelques mois maintenant, et je me demande quand il convient d'utiliser des constantes sur les variables de classe et vice-versa. (Je travaille dans Rails, en pensant à des constantes dans les modèles).

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

ou

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

Y at-il des circonstances où l'on est préférable à une autre? Ou est-ce juste une question de goût / style?

Était-ce utile?

La solution

La chose principale est que, en utilisant la notation CONSTANT, vous faites clairement au lecteur. le minuscule, la chaîne congelée donne l'impression est peut être réglable, forcer quelqu'un à revenir en arrière et lire le RDoc.

Autres conseils

Si ces valeurs sont vraiment constantes que vous définissez dans le code source et ne veulent pas changer lors de l'exécution de code alors je vous recommande d'utiliser constant.

Si vous envisagez de définir et / ou modifier ces valeurs dynamiquement lors de l'exécution puis utilisez variable de classe avec accesseurs.

En fait, vous pouvez le mettre comme ceci: Si vous voulez quelque chose qui est constante, utilisez une constante. Si vous voulez quelque chose qui est variable, utilisez une variable. Il semble que votre liste des types sont des constantes, le voir est un tableau gelé, je dirais donc il est logique d'utiliser dans ce cas une constante.

Si vous ne voulez pas la valeur à jamais changé au cours de l'exécution de votre programme, et vous êtes à l'aise avec la valeur permettant d'y accéder en dehors de votre classe, utilisez une constante.

Dans le cas contraire, vous pouvez utiliser une variable de classe. Cependant, il faut savoir que les variables de classe sont partagées entre les sous-classes et les instances des sous-classes. Donc, si vous pourriez à un moment donné à l'avenir mettre en œuvre une classe enfant, vous devez être très prudent au sujet de votre utilisation de variables de classe.

Reportez-vous aux réponses ici pour plus de détails: les variables Ruby

Si vous voulez faire de votre constante privée, vous pouvez toujours faire:

FOO = 18
private_constant :FOO
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top