Initialisation des objets
Notre classe Fruit du chapitre précédent avait deux variables d’instance, une pour décrire la sorte de fruits (kind) et l’autre pour décrire son état (condition). C’est seulement après avoir écrit une méthode inspect pour cette classe que nous avons réalisé que ça n’avait pas de sens pour un fruit de n’avoir aucune valeur pour ces attributs. Heureusement, ruby fournit un moyen de s’assurer que des variables d’instance sont toujours initialisées.
La méthode initialize
A chaque fois que ruby crée un nouvel objet, il regarde s’il a une méthode initialize et si oui, il l’exécute. Ainsi nous n’avons qu’à utiliser une méthode initialize pour donner des valeurs par défaut à toutes les variables d’instance, et la méthode inspect aura quelque chose à dire.
ruby> class Fruit
| def initialize
| @kind = "pomme"
| @condition = "mûre"
| end
| end
nil
ruby> f4 = Fruit.new
"Une pomme mûre"
Changer les présupposés à volonté
Il y a des cas où une valeur par défaut ne veut pas dire grand-chose. Est-ce qu’une variété de fruit par défaut veut vraiment dire quelque chose ? Il peut être préférable de spécifier que tout fruit doit avoir sa variété précisée au moment de sa création. Pour ce faire, nous devrions ajouter un paramètre à la méthode initialize. Pour des raisons que nous ne préciserons pas ici, les arguments que vous passez à new sont repassés à initialize.
ruby> class Fruit
| def initialize( k )
| @kind = k
| @condition = "mûre"
| end
| end
nil
ruby> f5 = Fruit.new "mangue"
"Une mangue mûre"
ruby> f6 = Fruit.new
ERR: (eval):1:in `initialize': wrong # of arguments(0 for 1)
(mauvais nombre d'argument - 0 au lieu d'1)
Initialisation élastique
Ci-dessus nous voyons qu’une fois qu’un argument a été associé à la méthode initialize, il ne peut plus être omis sans générer une erreur. Si nous voulons être plus circonstanciés, nous pouvons faire que l’argument soit utilisé s’il est fourni, et qu’on revienne aux valeurs par défaut sinon.
ruby> class Fruit
| def initialize( k="pomme" )
| @kind = k
| @condition = "mûre"
| end
| end
nil
ruby> f5 = Fruit.new "mangue"
"Une mangue mûre"
ruby> f6 = Fruit.new
"Une pomme mûre"
Vous pouvez utiliser des arguments par défaut pour toutes les méthodes, pas seulement initialize. La liste des arguments doit être ordonnée de façon que ceux ayant des valeurs par défaut soient en dernier.
Quelquefois il est utile de fournir plusieurs moyens d’ initialiser un objet. Bien que ce soit au-delà de la portée de ce tutorial, ruby offre la réflexion d’objet et les listes d’arguments de longueur variable, qui, ensemble, permettent la surcharge de méthode.
Précédent : GDU : Accesseurs Suivant : GDU : De choses et d’autres


