Alors bonjour à tous.
Dans cette séquence nous allons découvrir la méthode
Yourself, qui a priori ne sert à rien et qui est pourtant
extrêmement utile.
On commence par un exercice, cette expression "Set new
add: 2", pour laquelle on aimerait
récupérer un ensemble qui contient la valeur 2, retourne
en fait d'un ensemble uniquement la valeur 2.
Alors pourquoi est-ce qu'on obtient la valeur 2 plutôt qu'un
ensemble qui contient 2 ?
Si on regarde la méthode "Add" implémentée dans la classe
"Set", on voit que cette méthode retourne son paramètre.
Dans l'expression "Set new add 2", l'expression
"Set" retourne ma classe "Set", quand on envoie "New" à
la classe "Set", ça retourne un nouveau "Set" donc un
nouvel ensemble, et "Set new add: 2" retourne la valeur
que retourne "Add 2", c'est-à-dire 2.
Donc on a perdu notre ensemble.
Une façon de corriger ce problème-là est de découper ces
expressions étape par étape.
Donc on peut créer une variable temporaire, donc là on
déclare la variable S. On assigne dans S notre
nouvel ensemble, on ajoute 2 dans S.
Et S maintenant a comme contenu un ensemble qui
contient la valeur 2.
Donc c'est bien ce que l'on souhaitait.
Mais on peut simplifier cette expression-là en utilisant
la méthode "Yourself". Alors si on regarde la méthode
"Yourself", son contenu, la seule chose qu'il y a à l'intérieur
de "Yourself" c'est "Returnself".
On a dit que "Returnself" était optionnel donc a priori
cette méthode pourrait aussi être vide, et ne faire rien
du tout que retourner son receveur.
Donc cette méthode, a priori, elle ne fait rien d'autre
que retourner son receveur et elle est quand même
parfaitement utile dans ce genre de cas-là.
Grâce à l'opérateur cascade, après avoir ajouté 2,
on va demander l'exécution de la méthode "Yourself" qui
va nous retourner le receveur, de façon à ce que l'expression
complète soit le receveur, c'est-à-dire le nouveau "Set".
Donc si je prends "Set new", c'est le nouveau
"Set", "Add 2" appliqué à "Set new" ça
retourne 2, mais grâce à l'opérateur cascade suivi de
"Yourself" l'ensemble de l'expression va retourner
le nouveau "Set". Alors pourquoi la cascade retourne
systématiquement la valeur retournée par sa dernière expression?
Donc la cascade, dans ce cas-là retourne la valeur
retournée par Yourself.
On se sert très fréquemment de Yourself et de la cascade
dans les méthodes d'instanciation.
Donc ce sont des méthodes qu'on va mettre côté classe, ce
sont des méthodes de classe, des messages qu'on va
envoyer à des classes qui retournent de nouvelles instances.
Donc là, pour créer un nouveau "Set" qui contient un
objet par défaut, je peux envoyer le message "With" avec
cet objet par défaut dans "Set", et ce code-là va être
exécuté pour créer un nouveau "Set", le mettre dans la
variable "Instance", ajouter à Instance le nouvel objet,
le paramètre et retourner instance.
Mais l'ensemble de ces expressions, je peux le réécrire
en utilisant Yourself de façon un tout petit peu plus
concise et plus idiomatique. Donc typiquement, on
retrouvera ce genre de code-là dans l'ensemble de l'image
Pharo donc il est important de bien maîtriser le
point-virgule, donc la cascade et Yourself.
Alors ce que vous devez avoir retenu à la fin de cette
séquence, c'est que certaines méthodes, même si elles
sont extrêmement simples, peuvent être très puissantes et très utilisées.
Et la cascade, donc le point-virgule et la méthode
Yourself sont très souvent utilisés ensemble, pour s'assurer
qu'une expression complète retourne bien une valeur, la
valeur qu'on a souhaitée.