1 00:00:00,900 --> 00:00:03,540 Dans cette séquence, j'aimerais attirer votre attention 2 00:00:03,740 --> 00:00:08,420 sur l'usage des parenthèses et des crochets et ne pas confondre les deux. 3 00:00:09,380 --> 00:00:12,540 Les parenthèses servent à changer la priorité d'exécution 4 00:00:12,740 --> 00:00:15,890 dans les expressions ou dans du code, tandis que les 5 00:00:16,090 --> 00:00:17,870 crochets servent à définir des blocks. 6 00:00:18,210 --> 00:00:20,510 Je vous rappelle les expressions contenues dans un block 7 00:00:21,000 --> 00:00:23,240 au moment de la définition ne sont pas exécutées, on 8 00:00:23,440 --> 00:00:25,570 contrôle l'exécution explicitement. Il faut envoyer le 9 00:00:25,770 --> 00:00:28,590 message Value au block pour déclencher l'exécution des 10 00:00:28,790 --> 00:00:29,630 expressions qu'ils contiennent. 11 00:00:33,170 --> 00:00:35,800 Si on revient sur les règles, quand doit-on mettre des crochets? 12 00:00:36,000 --> 00:00:40,800 On met des crochets autour d'une expression si on ne 13 00:00:41,000 --> 00:00:44,260 sait pas si les expressions à l'intérieur vont être 14 00:00:44,460 --> 00:00:46,450 exécutées, c'est-à-dire que par exemple, elles sont dans 15 00:00:46,650 --> 00:00:49,410 un If, dans une branche d'une alternative ou pas. 16 00:00:50,560 --> 00:00:54,220 Et puis, on met les crochets également si on ne sait pas 17 00:00:54,420 --> 00:00:59,230 combien de fois on va devoir répéter l'exécution de 18 00:00:59,430 --> 00:01:01,660 ces expressions contenues dans un block. 19 00:01:03,000 --> 00:01:05,600 Je vous donne un exemple: n timesrepeat self 20 00:01:05,800 --> 00:01:10,170 doSomething, c'est-à-dire que self doSomething on l'a 21 00:01:10,370 --> 00:01:12,000 bien encapsulé dans un block. 22 00:01:12,430 --> 00:01:16,000 Pourquoi? Parce qu'on sait qu'il va falloir répéter 23 00:01:16,200 --> 00:01:17,930 plusieurs fois l'exécution de ces expressions. 24 00:01:18,520 --> 00:01:20,590 On est obligé de les mettre dans un block pour pouvoir 25 00:01:20,790 --> 00:01:22,820 envoyer plusieurs fois le message Value à ce block. 26 00:01:26,170 --> 00:01:28,280 Je vous donne un autre exemple mais cette fois en 27 00:01:28,480 --> 00:01:33,180 envoyant le message If True. Suivant le receveur, suivant 28 00:01:33,790 --> 00:01:38,500 si cette expression est vraie ou fausse, on va exécuter 29 00:01:38,700 --> 00:01:40,420 ou pas l'expression self doSomething. 30 00:01:41,610 --> 00:01:43,610 Je ne peux pas la mettre entre parenthèses puisque s'il 31 00:01:43,810 --> 00:01:46,120 faut, potentiellement, elle ne sera pas exécutée du tout. 32 00:01:47,570 --> 00:01:50,360 Si je la mets dans un block, on pourra contrôler, décider 33 00:01:50,560 --> 00:01:52,520 si on envoie le message Value ou pas à ce block. 34 00:01:55,260 --> 00:01:58,690 Également la même chose en fait mais cette fois sur le WhileTrue. 35 00:01:59,780 --> 00:02:02,820 C'est la même chose avec le block receveur et puis le 36 00:02:03,020 --> 00:02:07,840 block passé en paramètres. Suivant l'exécution, l'évaluation, 37 00:02:08,040 --> 00:02:11,340 si ça me rend le booléen Vrai ou Faux, on va devoir 38 00:02:11,540 --> 00:02:14,180 exécuter une fois, plusieurs fois, voire même zéro fois, 39 00:02:14,380 --> 00:02:17,700 l'expression self doSomething. On est obligé de la mettre dans un block. 40 00:02:19,640 --> 00:02:22,000 Je vous propose de faire un petit exercice. 41 00:02:23,150 --> 00:02:28,020 Si je vous donne les 2 expressions suivantes: répéter de 42 00:02:28,220 --> 00:02:31,380 1 à N self doSomething, est-ce que je dois mettre des 43 00:02:31,580 --> 00:02:33,000 parenthèses ou des crochets ? 44 00:02:33,270 --> 00:02:37,360 Et si je fais x IfEmpty self doSomething, est-ce que je 45 00:02:37,560 --> 00:02:42,000 dois mettre des parenthèses ou des crochets? 46 00:02:42,200 --> 00:02:43,350 Je vous donne les réponses. 47 00:02:44,470 --> 00:02:47,540 En fait, dans les deux cas, ce sont des crochets puisque 48 00:02:47,740 --> 00:02:50,770 dans le premier cas, si on veut répéter plusieurs fois l'expression 49 00:02:51,000 --> 00:02:53,730 self doSomething, forcément il va falloir envoyer 50 00:02:53,930 --> 00:02:55,190 plusieurs fois le message Value à ce block-là. 51 00:02:56,170 --> 00:03:00,000 Et puis dans le deuxième cas, x IfEmpty, si x n'est pas 52 00:03:00,200 --> 00:03:02,760 vide alors dans ce cas-là il ne faut pas du tout exécuter 53 00:03:03,050 --> 00:03:06,510 l'expression self doSomething. Alors que si x est vide il 54 00:03:06,710 --> 00:03:07,470 va falloir l'exécuter. 55 00:03:08,420 --> 00:03:10,670 En résumé, on a vu dans cette séquence qu'il ne faut 56 00:03:10,870 --> 00:03:14,580 vraiment pas confondre les parenthèses et les crochets. 57 00:03:14,780 --> 00:03:17,000 Les parenthèses servent vraiment à changer l'ordre de 58 00:03:17,200 --> 00:03:19,950 priorité d'exécution au sein d'une expression, alors que 59 00:03:20,150 --> 00:03:24,330 les crochets servent à freezer, à 60 00:03:24,530 --> 00:03:28,800 geler des expressions et de contrôler ensuite leur 61 00:03:29,000 --> 00:03:31,120 exécution, éventuellement les exécuter plusieurs fois.