Dans cette séquence, j'aimerais attirer votre attention
sur l'usage des parenthèses et des crochets et ne pas confondre les deux.
Les parenthèses servent à changer la priorité d'exécution
dans les expressions ou dans du code, tandis que les
crochets servent à définir des blocks.
Je vous rappelle les expressions contenues dans un block
au moment de la définition ne sont pas exécutées, on
contrôle l'exécution explicitement. Il faut envoyer le
message Value au block pour déclencher l'exécution des
expressions qu'ils contiennent.
Si on revient sur les règles, quand doit-on mettre des crochets?
On met des crochets autour d'une expression si on ne
sait pas si les expressions à l'intérieur vont être
exécutées, c'est-à-dire que par exemple, elles sont dans
un If, dans une branche d'une alternative ou pas.
Et puis, on met les crochets également si on ne sait pas
combien de fois on va devoir répéter l'exécution de
ces expressions contenues dans un block.
Je vous donne un exemple: n timesrepeat self
doSomething, c'est-à-dire que self doSomething on l'a
bien encapsulé dans un block.
Pourquoi? Parce qu'on sait qu'il va falloir répéter
plusieurs fois l'exécution de ces expressions.
On est obligé de les mettre dans un block pour pouvoir
envoyer plusieurs fois le message Value à ce block.
Je vous donne un autre exemple mais cette fois en
envoyant le message If True. Suivant le receveur, suivant
si cette expression est vraie ou fausse, on va exécuter
ou pas l'expression self doSomething.
Je ne peux pas la mettre entre parenthèses puisque s'il
faut, potentiellement, elle ne sera pas exécutée du tout.
Si je la mets dans un block, on pourra contrôler, décider
si on envoie le message Value ou pas à ce block.
Également la même chose en fait mais cette fois sur le WhileTrue.
C'est la même chose avec le block receveur et puis le
block passé en paramètres. Suivant l'exécution, l'évaluation,
si ça me rend le booléen Vrai ou Faux, on va devoir
exécuter une fois, plusieurs fois, voire même zéro fois,
l'expression self doSomething. On est obligé de la mettre dans un block.
Je vous propose de faire un petit exercice.
Si je vous donne les 2 expressions suivantes: répéter de
1 à N self doSomething, est-ce que je dois mettre des
parenthèses ou des crochets ?
Et si je fais x IfEmpty self doSomething, est-ce que je
dois mettre des parenthèses ou des crochets?
Je vous donne les réponses.
En fait, dans les deux cas, ce sont des crochets puisque
dans le premier cas, si on veut répéter plusieurs fois l'expression
self doSomething, forcément il va falloir envoyer
plusieurs fois le message Value à ce block-là.
Et puis dans le deuxième cas, x IfEmpty, si x n'est pas
vide alors dans ce cas-là il ne faut pas du tout exécuter
l'expression self doSomething. Alors que si x est vide il
va falloir l'exécuter.
En résumé, on a vu dans cette séquence qu'il ne faut
vraiment pas confondre les parenthèses et les crochets.
Les parenthèses servent vraiment à changer l'ordre de
priorité d'exécution au sein d'une expression, alors que
les crochets servent à freezer, à
geler des expressions et de contrôler ensuite leur
exécution, éventuellement les exécuter plusieurs fois.