Outils pour utilisateurs

Outils du site


cours:informatique:dev:programmation_objet_pharo:235_parentheses_vs_crochets

Parenthèses vs crochets

Dans cette séquence, j'aimerais attirer votre attention sur l'usage des parenthèses et des crochets pour 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 blocs.

Je vous rappelle les expressions contenues dans un bloc 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 bloc pour déclencher l'exécution des expressions qu'il contient.

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, lorsqu' elles sont dans un “if:”, ou dans tout type de branche d'alternative.
  • On met les crochets également si on ne sait pas combien de fois on va devoir répéter l'exécution des expressions contenues dans un bloc.

Je vous donne un exemple:

n timesrepeat: [ self doSomething ]

Ici l'expression “self doSomething” est bien encapsulé dans un bloc. 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 bloc.

Je vous donne un autre exemple mais cette fois en envoyant le message “ifTrue:”.

x isNil ifTrue: [ self doSomething ]

Suivant le receveur (ici l'objet x), et le retour du message “isNil”, on va exécuter ou pas l'expression “self doSomething”. Je ne peux pas la mettre entre parenthèses puisque potentiellement, elle ne sera pas exécutée du tout. Si je la mets dans un bloc, on pourra contrôler, décider si on envoie le message “value” ou pas à ce bloc.

[self start] whileTrue: [self doSomething]

Cette fois sur le “WhileTrue:”. C'est la même chose avec le bloc receveur et puis le bloc 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 bloc. Je vous propose de faire un petit exercice.

Si je vous donne les 2 expressions suivantes:

1 to: 100 do: ?? self doSomething ??
x ifEmpty: ?? self doSomething ??

Doit-on 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.

cours/informatique/dev/programmation_objet_pharo/235_parentheses_vs_crochets.txt · Dernière modification : 2022/07/18 15:27 de yoann