Contactez-nous

Comment définir une classe et sa méthode `initialize`

Apprenez pas à pas comment définir une classe en Ruby avec la méthode `initialize`. Ce guide pratique vous montre comment créer des constructeurs pour initialiser l'état de vos objets.

La syntaxe de base pour créer un plan d'objet

Pour définir une classe en Ruby, la syntaxe est simple et lisible. On utilise le mot-clé class suivi du nom de la classe, et on termine le bloc avec le mot-clé end. C'est le conteneur qui renfermera toute la logique de nos futurs objets.

Une règle absolue en Ruby est que les noms de classe doivent toujours commencer par une lettre majuscule et suivre la convention CamelCase (par exemple, MaSuperClasse). C'est ainsi que l'interpréteur Ruby fait la différence entre une classe, une méthode ou une variable.

Voici à quoi ressemble la classe la plus simple possible, un simple plan vide pour un chat :

Qu'est-ce que la méthode `initialize` ?

Notre plan Cat est valide, mais pour l'instant, tous les chats que nous créerions seraient des coquilles vides identiques. Comment donner à chaque chat un nom ou un âge dès sa création ? C'est là qu'intervient la méthode initialize.

La méthode initialize est un type spécial de méthode en Ruby. C'est le constructeur de la classe. Pensez-y comme aux instructions sur une chaîne de montage : dès qu'un nouvel objet est créé avec .new, Ruby appelle automatiquement la méthode initialize pour cet objet. Son unique rôle est de mettre en place l'état initial de la nouvelle instance.

Elle se définit comme n'importe quelle autre méthode avec def, mais son nom est réservé. Elle peut accepter des arguments, ce qui nous permet de personnaliser chaque nouvelle instance.

Initialiser l'état avec les variables d'instance

Imaginons que nous passions un nom à notre constructeur. Comment l'objet 'chat' peut-il mémoriser ce nom pour plus tard ? Une variable locale définie dans initialize serait perdue dès la fin de la méthode. La solution est d'utiliser une variable d'instance.

Une variable d'instance commence toujours par le symbole arobase (@), par exemple @name. Le @ signale à Ruby que cette variable appartient à l'instance elle-même (à self) et qu'elle doit persister tant que l'objet existe. Chaque instance aura sa propre copie de cette variable.

Mettons cela en pratique en modifiant notre classe Cat pour qu'elle accepte un nom à la création et le stocke.

Le processus complet : de `.new` à l'objet initialisé

Maintenant que notre classe est définie avec un constructeur, voyons ce qui se passe exactement lorsque nous appelons Cat.new("Félix"). Le processus se déroule en plusieurs étapes automatiques :

  1. Ruby alloue de la mémoire pour un nouvel objet vide de la classe Cat.
  2. Il appelle la méthode initialize sur ce nouvel objet.
  3. Les arguments passés à .new (ici, "Félix") sont transmis directement comme arguments à la méthode initialize.
  4. Le code à l'intérieur de initialize s'exécute : la variable d'instance @name est définie à "Félix" pour cet objet spécifique.
  5. Une fois la méthode initialize terminée, Ruby retourne l'objet fraîchement configuré.

C'est ainsi que nous pouvons créer plusieurs instances distinctes, chacune avec son propre état initial.

Conseil d'expert : les particularités de `initialize`

Pour conclure, il y a deux aspects importants à retenir sur initialize qui vous éviteront des confusions. Premièrement, initialize est une méthode privée par défaut. Cela signifie que vous ne pouvez pas l'appeler manuellement sur une instance (par exemple, felix.initialize("Nouveau nom") lèvera une erreur). Elle n'est destinée à être appelée qu'une seule fois, automatiquement, par .new.

Deuxièmement, la valeur de retour de la méthode initialize est toujours ignorée. Son seul but est de configurer l'objet. C'est la méthode .new qui se charge de retourner l'instance nouvellement créée. Tenter de faire un return explicite depuis initialize n'aura aucun effet sur ce que .new renvoie.