La portée (Scope) en Ruby
Introduction
Dans le langage de programmation Ruby, la portée des variables définit le contexte dans lequel celles-ci existent. Cela signifie que la portée détermine quelles variables et méthodes peuvent être accessibles à partir d'une certaine partie du code. Il existe plusieurs niveaux de portée en Ruby :
Portée de classe (Class-level)
Les variables définies au niveau de class sont généralement précédées de @@
. Ces variables peuvent être utilisées à l'intérieur de la classe ainsi que dans toutes les sous-classes. Voici un exemple :
class MaClasse
@@variable_de_classe = "Ceci est une variable de classe"
def méthode_intérieure
"De MaClasse: #{@@variable_de_classe}"
end
end
class SousClasse < MaClasse
def afficher_variable_de_classe
"De SousClasse: #{@@variable_de_classe}"
end
end
instance_classe = MaClasse.new()
instance_sous_classe = SousClasse.new()
puts instance_sous_classe.afficher_variable_de_classe # Sortie: De SousClasse: Ceci est une variable de classe
puts instance_classe.méthode_intérieure # Sortie: De MaClasse: Ceci est une variable de classe
Portée d'instance (Instance-level)
Les variables au niveau d'instance, marquées par @
, sont généralement créées dans la méthode initialize
d'une classe. Elles sont accessibles lorsque l'on travaille avec une instance de cette classe. Exemple :
class Personne
def initialize(nom)
@nom = nom
end
def nom
@nom
end
end
personne = Personne.new("Randy")
puts personne.instance_variables # Sortie: @nom
puts personne.nom # Sortie: Randy
Portée globale (Global-level)
Les variables définies dans la portée globale peuvent être accédées de n'importe où dans le programme Ruby. Elles commencent par $
. Voici un exemple :
$nombre_global = 42
def afficher_nombres
puts [$nombre_global]
end
afficher_nombres # Sortie: 42
Portée locale (Local-level)
Les variables définies dans une portée locale sont souvent très contextuelles. Leur portée est généralement déterminée par le bloc où elles sont définies. Par exemple :
variable_locale_extérieure = 32
def ajouter_nombres(term_externe)
variable_locale_méthode = 42
term_externe + variable_locale_méthode
end
puts variable_locale_extérieure + ajouter_nombres(3) # Sortie: 77