Vérifier si une constante est déjà définie

Créé le 13 Dec 2022 - Mis à jour le 04 Jul 2023 - Créé par Fabien Berthoux - rubyconstants

Pour vérifier si une constante est déjà définie, vous devez utiliser la méthode Object#const_defined? qui prend en paramètre le nom de la constante que vous voulez vérifier. Cette méthode retourne true si la constante est définie et false si elle n'est pas définie. Il est important de noter que cette méthode ne peut pas vérifier si une constante est définie dans un module ou une classe. Pour cela, vous devez utiliser la méthode Module#const_defined?.


# Vérifie si la constante "MyConstant" est définie
puts Object.const_defined?(:MyConstant)
# => false

Quelle est la différence entre Object#const_defined? et Module#const_defined? ?


La différence principale entre Object#const_defined? et Module#const_defined? est que Object#const_defined? ne peut pas vérifier si une constante est définie dans un module ou une classe, tandis que Module#const_defined? peut. Object#const_defined? vérifie uniquement si une constante est définie à l'intérieur du scope d'application, tandis que Module#const_defined? peut vérifier si une constante est définie à l'intérieur d'un module ou d'une classe.


# Vérifie si la constante "MyConstant" est définie dans le module "MyModule"
puts MyModule.const_defined?(:MyConstant)
# => false

Comment Object#const_defined? et Module#const_defined? affectent-ils les performances ?


L'utilisation de Object#const_defined? et Module#const_defined? ne devrait pas avoir un impact sur les performances. Ces méthodes sont très rapides et ne nécessitent pas de traitement supplémentaire, car elles ne font que vérifier si une constante est définie.


# Vérifie si la constante "MyConstant" est définie
puts Object.const_defined?(:MyConstant)
# => false

Quelle est la sémantique de Object#const_defined? et Module#const_defined? ?


Object#const_defined? et Module#const_defined? sont des méthodes qui retournent un booléen (true ou false) pour indiquer si une constante est définie ou non. Object#const_defined? vérifie si une constante est définie à l'intérieur du scope d'application, tandis que Module#const_defined? peut vérifier si une constante est définie à l'intérieur d'un module ou d'une classe.


# Vérifie si la constante "MyConstant" est définie
puts Object.const_defined?(:MyConstant)
# => false

Comment puis-je vérifier si une constante est définie avec un autre nom ?


Vous pouvez vérifier si une constante est définie avec un autre nom en utilisant la méthode Object#const_get. Cette méthode prend en paramètre un nom de constante et retourne la valeur de la constante si elle est définie.


# Vérifie si la constante "MyConstant" est définie
puts Object.const_get(:MyConstant)
# => nil

Quelle est la différence entre Object#const_defined? et Object#const_get?


La principale différence entre Object#const_defined? et Object#const_get est que Object#const_defined? retourne un booléen pour indiquer si une constante est définie ou non, tandis que Object#const_get retourne la valeur de la constante si elle est définie. Object#const_defined? ne peut pas vérifier si une constante est définie dans un module ou une classe, alors que Object#const_get peut.


# Vérifie si la constante "MyConstant" est définie
puts Object.const_defined?(:MyConstant)
# => false

# Récupère la valeur de la constante "MyConstant"
puts Object.const_get(:MyConstant)
# => nil