Dans Smalltalk, il existe deux termes souvent trouvés dans un corps de méthode: self
et yourself
.Quelle est la différence entre soi et soi dans Smalltalk?
Quelle est la différence entre eux?
Dans Smalltalk, il existe deux termes souvent trouvés dans un corps de méthode: self
et yourself
.Quelle est la différence entre soi et soi dans Smalltalk?
Quelle est la différence entre eux?
Le mot réservé self
est une pseudo-variable (vous ne pouvez pas lui affecter) qui fait référence au récepteur actuel de la méthode où il est utilisé. De l'autre côté, yourself
est un message que vous pouvez envoyer à n'importe quel objet pour obtenir le même objet.
La mise en œuvre de yourself
est
yourself
^self
ce qui signifie que le message yourself
se comportera comme je viens de vous expliquer.
La raison pour laquelle yourself
existe est de soutenir en cascade de messages, où vous mettez comme le dernier message pour vous assurer que l'expression résultante répondra avec le récepteur:
^receiver
msg1;
msg2;
yourself
Si msg2
pourrait répondre avec quelque chose de différent le receiver
vous pouvez ajouter le message yourself
pour ignorer cette réponse et renvoyer receiver
à la place. Bien sûr, vous auriez pu obtenir le même résultat en écrivant:
receiver
msg1;
msg2.
^receiver
En raison de la simplicité de ces deux exemples, il pourrait être difficile de comprendre ce que l'avantage serait. Cependant, considérons que receiver
n'est pas une variable mais une expression complexe, quelque chose comme.
^(self msg: arg1 arg: arg2)
msg1;
msg2;
yourself.
Sans utiliser yourself
vous devez ajouter temporaire pour sauvegarder la valeur du récepteur pour obtenir le même:
| answer |
answer := self msg: arg1 arg: arg2.
answer
msg1;
msg2.
^answer
qui est un peu plus bavard.
Pour résumer, self
est un mot réservé qui se réfère au récepteur actuel et yourself
est juste une méthode régulière qui est là juste pour plus de commodité.
self
est un synonyme d'un objet: spécifiquement le destinataire du message qui a invoqué la Il est utilisé dans le corps d'une méthode.
yourself
est un message que vous pouvez envoyer à un objet, qui renvoie le destinataire du message.
anObject yourself
renvoie anObject
.
yourself
est souvent utilisé à la fin d'une cascade de messages dans un corps de méthode.
Lorsque vous voulez la valeur de retour de la méthode pour le récepteur, mais le message final de la cascade retourne quelque chose d'autre, vous pouvez écrire soit:
self aMessageReturningTheReceiver;
aMessageReturningTheArgument: anArgument .
^self
ou
self aMessageReturningTheReceiver;
aMessageReturningTheArgument: anArgument;
yourself