1 00:00:00,200 --> 00:00:03,080 Cette séance va être consacrée à un survol de la syntaxe. 2 00:00:03,280 --> 00:00:05,200 Donc, on va vous montrer l'entièreté de la syntaxe. 3 00:00:06,460 --> 00:00:08,090 Il ne faut pas que vous vous stressiez par rapport à si 4 00:00:08,290 --> 00:00:09,520 vous comprenez ou pas entièrement. 5 00:00:09,750 --> 00:00:11,350 On reprendra tous ces éléments plus tard. 6 00:00:11,550 --> 00:00:14,550 Par contre, l'idée, c'était de vous montrer l'ensemble de 7 00:00:14,750 --> 00:00:18,480 ce qu'il y a dans Pharo. On va voir les éléments 8 00:00:18,680 --> 00:00:20,140 syntaxiques principaux. 9 00:00:20,490 --> 00:00:22,000 On va voir qu’il y a trois sortes de messages. 10 00:00:22,740 --> 00:00:25,780 Et puis, on va voir la syntaxe sur les blocks qui est un 11 00:00:26,000 --> 00:00:26,880 élément essentiel de Pharo. 12 00:00:27,680 --> 00:00:29,450 Ne stressez pas si vous n'avez pas tout compris, on 13 00:00:29,650 --> 00:00:32,360 reprendra chacun de ces points dans des séquences ultérieures. 14 00:00:34,000 --> 00:00:37,560 Juste pour le rappel, vous avez toute la syntaxe sur ce transparent. 15 00:00:37,760 --> 00:00:39,320 Là, par exemple, maintenant je peux venir un petit peu 16 00:00:39,520 --> 00:00:41,930 dans les détails, vous avez une définition de méthode. 17 00:00:42,130 --> 00:00:43,520 Là, je définis la méthode exampleWithNumber. 18 00:00:43,720 --> 00:00:45,080 Elle a un argument. 19 00:00:45,280 --> 00:00:48,620 Par exemple, je vais avoir des définitions locales de 20 00:00:48,820 --> 00:00:51,020 variables avec les barres verticales. 21 00:00:51,310 --> 00:00:54,000 J'ai le Return qui me permet de rendre une valeur. 22 00:00:54,280 --> 00:00:57,460 Je vais avoir des boucles, une affectation. 23 00:00:57,670 --> 00:01:00,500 Le point, par exemple ça va être un séparateur d'instruction. 24 00:01:00,700 --> 00:01:04,220 On va voir ce genre de 25 00:01:07,180 --> 00:01:07,940 choses. 26 00:01:08,140 --> 00:01:08,950 Commençons par le traditionnel Hello World. 27 00:01:12,570 --> 00:01:15,000 D'ailleurs, toutes les expressions, vous pouvez les 28 00:01:15,200 --> 00:01:18,120 exécuter dans Pharo vous-même pour voir ce que donne le résultat. 29 00:01:18,600 --> 00:01:23,390 Là, j'ai une chaîne que je convertis 30 00:01:23,700 --> 00:01:25,840 dans une Morph, c'est un élément graphique. 31 00:01:26,170 --> 00:01:28,960 Je demande à cet élément graphique de s'ouvrir dans une fenêtre. 32 00:01:30,270 --> 00:01:34,050 J'ai envoyé message asMorph à l'objet String et j'ai 33 00:01:34,250 --> 00:01:37,830 envoyé le message openInWindow à l'objet Morph résultant. 34 00:01:38,200 --> 00:01:41,460 Donc là, on a eu deux envois de messages et un objet String. 35 00:01:43,000 --> 00:01:45,100 Un exemple plus compliqué, imaginons que vous vouliez 36 00:01:45,300 --> 00:01:49,070 prendre le logo Pharo qui se trouve sur le web, on va 37 00:01:49,270 --> 00:01:50,610 faire ça de la manière suivante. 38 00:01:51,080 --> 00:01:54,180 On va faire ZnEasy getPng avec une chaîne qui représente 39 00:01:54,520 --> 00:01:58,380 l'url de la ressource qu'on veut lire. 40 00:02:00,290 --> 00:02:03,890 Et encore une fois, on va la convertir en chaîne, en un 41 00:02:04,090 --> 00:02:06,430 objet graphique et lui demander de s'ouvrir dans une fenêtre. 42 00:02:07,000 --> 00:02:08,020 Là, qu'est-ce qu'on voit ? 43 00:02:08,220 --> 00:02:10,120 On voit que ZnEasy est une classe parce que les classes 44 00:02:10,320 --> 00:02:14,810 commencent par une majuscule. Le message getPng: 45 00:02:15,690 --> 00:02:17,940 les deux points, ça veut dire que je j'attends un argument. 46 00:02:18,140 --> 00:02:19,090 Qu'est-ce que j'ai comme argument ? 47 00:02:19,430 --> 00:02:21,170 J'ai la chaîne'http://pharo. 48 00:02:21,370 --> 00:02:25,420 org', j'ai cette chaîne-là qui est l'argument de la 49 00:02:25,620 --> 00:02:29,950 méthode getPng. Donc, les messages 50 00:02:30,570 --> 00:02:34,660 as Morph et openInWindow sont lus de gauche à droite. 51 00:02:36,050 --> 00:02:38,060 Encore une fois, vous pouvez vraiment copier-coller ce 52 00:02:38,260 --> 00:02:41,750 code, ou le retaper dans Pharo, l'exécuter et vous allez 53 00:02:41,950 --> 00:02:42,800 récupérer le logo Pharo. 54 00:02:44,250 --> 00:02:47,290 Si on regarde ce qu'il y a comme élément syntaxique dans 55 00:02:47,490 --> 00:02:50,030 Pharo, vous avez les commentaires qui commencent avec des doubles quotes. 56 00:02:50,230 --> 00:02:52,060 Ça, c'est un commentaire. 57 00:02:52,430 --> 00:02:55,660 Des caractères, les caractères sont toujours avec dollar 58 00:02:55,860 --> 00:02:57,860 quelque chose, $A, c'est le caractère A. 59 00:02:58,340 --> 00:03:00,440 Vous avez des chaînes, les chaînes commencent et 60 00:03:00,640 --> 00:03:04,350 finissent par une simple quote. Vous avez des symboles, 61 00:03:04,550 --> 00:03:06,150 les symboles ce sont des chaînes uniques. 62 00:03:06,350 --> 00:03:10,110 Souvent, ça commence comme ça, un symbole avec le symbole 63 00:03:10,310 --> 00:03:12,280 dièse, donc #A c'est le symbole A. 64 00:03:13,120 --> 00:03:14,800 Vous avez aussi des tableaux de littéraux. 65 00:03:15,000 --> 00:03:17,300 Là, j'ai un tableau avec 12, 23 et 36. 66 00:03:17,500 --> 00:03:18,860 J'ai un tableau à trois éléments. 67 00:03:19,670 --> 00:03:21,700 Après, vous avez les entiers, ils ont plusieurs 68 00:03:21,900 --> 00:03:24,520 représentations, mais dans ce cours, on ne va pas s'appesantir dessus. 69 00:03:24,880 --> 00:03:27,620 En général, on va utiliser des représentations à base 10, 70 00:03:27,820 --> 00:03:30,040 mais si vous voulez une représentation à base 2, vous pouvez aussi. 71 00:03:30,460 --> 00:03:32,070 Vous avez des réels, c'est pareil. 72 00:03:33,010 --> 00:03:35,010 Si vous en avez besoin, vous trouverez la syntaxe. 73 00:03:35,420 --> 00:03:37,370 Vous avez les booléens avec True ou False. 74 00:03:38,340 --> 00:03:41,130 Vous avez la valeur indéfinie, le nul de Java qui est le 75 00:03:41,330 --> 00:03:46,000 nil en Pharo qui est instance de la classe UndefinedObject. 76 00:03:46,160 --> 00:03:50,730 Et vous avez les points, un point, ça se décrit en Pharo 77 00:03:51,560 --> 00:03:56,460 sous la forme de 10@200, par 78 00:03:56,660 --> 00:04:01,000 exemple. Ça veut dire, je crée le point 10 qui a X en 10 et 200 en Y. 79 00:04:03,820 --> 00:04:06,000 Maintenant, on a vu à peu près les éléments essentiels 80 00:04:06,200 --> 00:04:08,840 pour l'aspect syntaxique. Vous avez les constructeurs du langage. 81 00:04:09,040 --> 00:04:12,720 Vous avez définition de variable, définition de variable 82 00:04:12,920 --> 00:04:16,190 temporaire, je vais mettre barre verticale suivie d'une barre verticale. 83 00:04:16,440 --> 00:04:19,520 L'affectation, c'est deux points égal, ça c'est l'affectation, 84 00:04:19,720 --> 00:04:22,220 je mets dans la variable var la valeur Value. 85 00:04:22,830 --> 00:04:24,470 J'ai des messages dans mon système. 86 00:04:24,820 --> 00:04:25,850 Comment je les sépare ? 87 00:04:26,050 --> 00:04:30,340 Je les sépare par des points quand je veux avoir une séquence de message. 88 00:04:31,000 --> 00:04:33,850 J'ai le retour, ça veut dire, une fonction ou une méthode 89 00:04:34,050 --> 00:04:38,140 va rendre une valeur, je vais utiliser le chapeau qu'on 90 00:04:38,340 --> 00:04:39,110 appelle caret en anglais. 91 00:04:39,780 --> 00:04:43,090 Après, vous avez des blocks qui sont, de manière 92 00:04:43,290 --> 00:04:47,480 technique, des cultures lexicales et qu'en première 93 00:04:47,680 --> 00:04:49,700 instance, vous pouvez prendre comme des méthodes anonymes. 94 00:04:50,400 --> 00:04:52,240 Je vous montre ce qu'est un block. 95 00:04:52,520 --> 00:04:57,380 Un block, ça se définit avec des crochets et ça s' 96 00:04:57,580 --> 00:05:00,650 exécute en utilisant le message value, on va voir ça aussi. 97 00:05:01,780 --> 00:05:03,600 Vous avez tous les constructeurs du langage. 98 00:05:05,460 --> 00:05:08,390 Si on regarde, qu'est-ce qu'un programme en Pharo, son essence? 99 00:05:08,800 --> 00:05:11,420 C'est créer des objets, qu'on a sûrement créés en 100 00:05:11,620 --> 00:05:14,000 utilisant des messages, envoyer des messages à ses objets 101 00:05:14,380 --> 00:05:16,950 et, de temps en temps, utiliser des blocks ou des méthodes anonymes. 102 00:05:17,540 --> 00:05:18,300 C'est tout. 103 00:05:20,070 --> 00:05:21,430 Maintenant, il y a trois types de messages. 104 00:05:21,650 --> 00:05:23,210 Pourquoi y a-t-il trois types de messages dans Pharo? 105 00:05:23,410 --> 00:05:26,480 C'est principalement pour minimiser le nombre de parenthèse qu'on utilise. 106 00:05:26,900 --> 00:05:28,260 Vous allez voir, c'est relativement simple. 107 00:05:28,550 --> 00:05:30,580 Vous avez les messages unaires, un message unaire c'est 108 00:05:30,780 --> 00:05:32,560 toujours un receveur, un sélecteur. 109 00:05:32,760 --> 00:05:34,170 Là, par exemple, j'ai dit je veux 9². 110 00:05:35,740 --> 00:05:38,450 Je veux obtenir la date d'aujourd'hui, j'envoie le 111 00:05:38,650 --> 00:05:41,000 message today à l'objet date, à la classe date. 112 00:05:42,040 --> 00:05:43,710 Il n'y a pas d'arguments, ce sont des messages unaires. 113 00:05:44,000 --> 00:05:45,430 Vous avez les messages binaires. 114 00:05:46,320 --> 00:05:48,340 Les messages binaires sont toujours de la forme un 115 00:05:48,540 --> 00:05:50,790 receveur, un sélecteur, un argument. 116 00:05:51,270 --> 00:05:55,640 Mais le sélecteur, ça sera +, -, ~, ~, =, =, /, /, /, 117 00:05:56,940 --> 00:05:57,700 ce genre de choses. 118 00:05:57,900 --> 00:05:59,810 Tout ce qui a l'air de grigri mathématique, c'est pour 119 00:06:00,010 --> 00:06:04,550 les messages binaires. Là, on voit par exemple 1 + 2, c'est un message. 120 00:06:04,800 --> 00:06:08,000 On envoie le message plus à l'objet 1 avec comme argument l'objet 2. 121 00:06:08,330 --> 00:06:11,550 @ pour la création de points, c'est aussi un message. 122 00:06:11,750 --> 00:06:12,600 C'est un message binaire. 123 00:06:13,020 --> 00:06:17,500 Donc là, je crée le point 3 4 en envoyant le message 124 00:06:17,700 --> 00:06:18,460 @. 125 00:06:19,060 --> 00:06:22,120 Après, vous avez des messages qu'on appelle des messages à mots-clés. 126 00:06:22,470 --> 00:06:25,000 Un message à mots-clés, c'est vraiment de la forme 127 00:06:25,200 --> 00:06:28,730 receveur, une clé, un argument, une clé, un argument. 128 00:06:29,930 --> 00:06:32,360 L'exemple que vous avez, c'est 2. 129 00:06:32,560 --> 00:06:34,850 Est-ce que 2 est entre 10 et 20 ? 130 00:06:35,130 --> 00:06:37,950 Si vous l'écriviez dans une syntaxe Java ou C, vous 131 00:06:38,150 --> 00:06:39,800 l'écririez de la forme suivante. Vous écririez Between 132 00:06:40,000 --> 00:06:44,770 and et vous 133 00:06:45,000 --> 00:06:47,780 mettriez des parenthèses, 10, 20. 134 00:06:48,000 --> 00:06:52,530 Dans Pharo, on va l'exprimer sous forme clé 135 00:06:53,020 --> 00:06:55,800 et clé. On va revoir ça, évidemment, mais c'est pour vous 136 00:06:56,000 --> 00:06:57,310 donner cette idée de la syntaxe. 137 00:06:59,040 --> 00:07:02,380 Quand vous avez des messages, il y a une précédence entre 138 00:07:02,580 --> 00:07:05,210 ces messages, le système va toujours exécuter en priorité 139 00:07:05,410 --> 00:07:08,000 les parenthèses, puis les messages unaires, puis les 140 00:07:08,200 --> 00:07:09,400 messages binaires et les messages à mots-clés. 141 00:07:09,600 --> 00:07:13,830 Pourquoi? C'est l'idée de nous éviter d'écrire trop de parenthèses. 142 00:07:14,030 --> 00:07:15,730 On aurait très bien pu avoir un système où on n'a pas 143 00:07:15,930 --> 00:07:17,300 tout cette différenciation, mais on mettrait des 144 00:07:17,500 --> 00:07:19,380 parenthèses partout et ça rendrait le code illisible. 145 00:07:21,670 --> 00:07:24,440 Je vais revenir sur chacun de ces types de messages de manière très simple. 146 00:07:25,550 --> 00:07:27,940 Un message unaire, par exemple, 10 000 factoriel. 147 00:07:28,140 --> 00:07:30,080 Faites-le, vous allez voir, c'est un très gros chiffre. 148 00:07:30,420 --> 00:07:33,800 10 000 factoriel, j'envoie le message factoriel à l'objet 10000. 149 00:07:34,000 --> 00:07:34,760 Il n'y a pas d'argument. 150 00:07:34,960 --> 00:07:35,720 C'est un message unaire. 151 00:07:37,000 --> 00:07:38,570 De la même manière, un message binaire. 152 00:07:38,770 --> 00:07:40,510 1 + 3, c'est un message binaire. 153 00:07:42,100 --> 00:07:45,850 Le sélecteur, ça veut dire le nom de la méthode, là, c'est plus. 154 00:07:47,490 --> 00:07:51,670 Et j'ai envoyé le message plus à l'objet 1 avec l'objet 3 en argument. 155 00:07:53,270 --> 00:07:56,000 Un message à mots-clés, c'est ce que je vous expliquais tout à l'heure. 156 00:07:56,170 --> 00:08:00,000 Je ne fais juste que répéter parce qu'enseigner, c'est répéter. 157 00:08:00,910 --> 00:08:03,290 J'ai un message mots-clés dans lequel j'ai keyword, 158 00:08:03,490 --> 00:08:06,450 keyword qui est le message avec les arguments. 159 00:08:06,650 --> 00:08:11,000 Vous avez vraiment les arguments qui flottent à l'intérieur du message. 160 00:08:11,350 --> 00:08:13,280 L'idée de cette syntaxe, c'était de faire une syntaxe que 161 00:08:13,480 --> 00:08:14,630 les enfants puissent utiliser. 162 00:08:15,330 --> 00:08:18,350 L'idée, c'est d'avoir quelque chose qui s'apparente à de l'anglais. 163 00:08:18,780 --> 00:08:22,700 On va pouvoir introduire les arguments à l'intérieur 164 00:08:25,550 --> 00:08:26,580 de nos messages. Regardez un exemple. 165 00:08:26,780 --> 00:08:29,000 Imaginons que je veuille faire une requête http. 166 00:08:29,420 --> 00:08:33,720 ZnClient c'est un serveur http Pharo, donc je crée une 167 00:08:33,920 --> 00:08:34,910 instance de ZnServeur. 168 00:08:35,110 --> 00:08:39,570 New est un message unaire, il n'y a pas d'argument, de 169 00:08:39,770 --> 00:08:40,530 toute façon il n'y a pas deux points. 170 00:08:41,650 --> 00:08:46,340 Url est un message à mots-clés, il y a un deux 171 00:08:46,540 --> 00:08:50,760 points. QueryAt:put: est un autre message à mots-clés. 172 00:08:51,000 --> 00:08:54,460 Et get est finalement un message unaire. 173 00:08:55,630 --> 00:08:57,500 Ce qu'on voit ici, sur cet exemple, ce sont les point 174 00:08:57,700 --> 00:09:01,190 virgules, on appelle ça une cascade. 175 00:09:03,020 --> 00:09:05,000 La cascade, c'est l'idée de dire je veux envoyer tous ces 176 00:09:05,200 --> 00:09:07,000 messages au même objet. Ça évite d'avoir une variable 177 00:09:07,200 --> 00:09:10,370 temporaire pour rien et ça permet d'écrire du code un 178 00:09:10,570 --> 00:09:11,330 petit peu plus compact. 179 00:09:14,140 --> 00:09:15,210 Ce qu'il faut voir, c'est que les messages sont 180 00:09:15,410 --> 00:09:18,170 absolument partout dans Pharo. Les conditions, les 181 00:09:18,370 --> 00:09:20,230 boucles, les itérateurs, la concurrence, tout est exprimé 182 00:09:20,430 --> 00:09:22,150 sous forme de message. Ce que je vous ai expliqué sur les 183 00:09:22,350 --> 00:09:24,530 trois messages précédents va s'appliquer partout. 184 00:09:25,250 --> 00:09:27,400 C'est la pierre angulaire du système. 185 00:09:28,010 --> 00:09:29,760 Il n'y a rien d'autre que ces messages-là. 186 00:09:31,420 --> 00:09:35,450 Regardons. Là, j'ai pris la définition débile de factoriel. 187 00:09:35,710 --> 00:09:37,660 Comment est-ce que j'ai défini ce factoriel? 188 00:09:38,200 --> 00:09:41,680 Je définis ma méthode factorielle, je mets un commentaire 189 00:09:42,070 --> 00:09:44,350 pour la méthode parce qu'il y a des doubles quotes et je 190 00:09:44,550 --> 00:09:47,380 commence à dire, self, si l'objet qui reçoit le message 191 00:09:47,580 --> 00:09:51,670 est 0, alors je vais rendre 1, si self est positif, par 192 00:09:51,870 --> 00:09:55,000 exemple, si je fais factoriel 6, self vaudra 6. 193 00:09:55,570 --> 00:09:57,340 Si c'est vrai, à ce moment-là que vais-je faire, je vais 194 00:09:57,540 --> 00:10:01,640 rendre quoi, 6 multiplié par 6 moins 1 factoriel, la 195 00:10:01,840 --> 00:10:03,360 définition récursive qu'on connaît tous. 196 00:10:03,900 --> 00:10:08,540 Ce qui est intéressant de regarder, c'est de voir ici que 197 00:10:08,740 --> 00:10:11,550 le message ifTrue qui est une condition, c'est aussi un 198 00:10:11,750 --> 00:10:13,330 message parce que c'est un message à mots-clés, il a deux 199 00:10:13,530 --> 00:10:14,950 points qui est envoyé à un booléen. 200 00:10:15,560 --> 00:10:17,060 Donc vous avez aussi ifTrue, ifFalse, ifFalse, ifFalse, 201 00:10:17,260 --> 00:10:22,000 ifFalse, toutes ces conditions sont des messages qui 202 00:10:22,200 --> 00:10:26,760 satisfont les règles et qui sont de la sorte des messages 203 00:10:27,000 --> 00:10:28,390 à mots-clés que j'ai présentés précédemment. 204 00:10:29,180 --> 00:10:30,920 Donc, les conditions sont des messages. 205 00:10:31,200 --> 00:10:32,640 Les boucles sont aussi des messages. 206 00:10:32,840 --> 00:10:34,870 Ça veut dire que là je veux faire une boucle de 1 à 4. 207 00:10:35,390 --> 00:10:37,060 De 1 à 4, que dois-je faire ? 208 00:10:37,260 --> 00:10:40,320 Je vais faire un block, un block c'est une méthode anonyme. 209 00:10:40,520 --> 00:10:45,330 Je vais lui dire je veux que tu affiches la valeur de I, 210 00:10:45,620 --> 00:10:50,130 et I va prendre 1, 2, 3, 4 211 00:10:50,560 --> 00:10:51,320 puisque c'est ce que je dis. 212 00:10:51,520 --> 00:10:55,590 Et là, ce que vous voyez c'est que to:do: est un message à mots-clés. 213 00:10:56,610 --> 00:10:59,610 C'est un message qui va représenter une boucle. 214 00:11:00,230 --> 00:11:03,240 Il y a plein d'autres boucles dans Pharo, timesRepeat: to:by:do: etc. 215 00:11:03,600 --> 00:11:04,850 On va les voir dans le cours. 216 00:11:05,590 --> 00:11:10,260 Là, to:do: est envoyé à l'objet 1 avec comme paramètre 217 00:11:10,460 --> 00:11:14,250 4 et un block. On va voir ce qu'est un block rapidement après. 218 00:11:14,900 --> 00:11:16,260 Vous avez aussi des itérateurs. 219 00:11:16,770 --> 00:11:19,280 Les itérateurs, c'est différent, c'est que j'envoie le 220 00:11:19,480 --> 00:11:23,160 message, par exemple, do: à la collection en lui disant 221 00:11:23,360 --> 00:11:25,350 ce que je veux appliquer sur chacun des éléments. 222 00:11:26,000 --> 00:11:30,240 Là, le each, l'argument de ma fonction va prendre comme 223 00:11:30,440 --> 00:11:34,350 valeur 1, 2 moins 4 et moins 86. 224 00:11:35,010 --> 00:11:39,020 Ce que je fais, c'est que le each, je vais lui appliquer 225 00:11:39,250 --> 00:11:40,680 la valeur absolue et je vais l'afficher. 226 00:11:41,070 --> 00:11:45,600 Encore une fois, ça sera un autre cours, on vous expliquera les itérateurs. 227 00:11:46,000 --> 00:11:50,500 Les itérateurs sont des choses qui arrivent en Java 8 et 228 00:11:50,700 --> 00:11:52,710 ça fait partie du noyau de Pharo. 229 00:11:54,550 --> 00:11:56,490 Qu'est-ce qu'un block ? 230 00:11:56,690 --> 00:11:58,220 Un block, c'est comme une fonction, ça veut dire que si 231 00:11:58,420 --> 00:12:01,940 en maths vous écriviez F(x) égal x² + 3, vous avez 232 00:12:02,140 --> 00:12:05,100 l'écrire comme ça, littéralement. Je définis une 233 00:12:05,300 --> 00:12:07,520 variable, j'affecte dans cette variable quoi, un block. 234 00:12:07,720 --> 00:12:11,000 Donc un block, c'est quelque chose qui commence par des crochets. 235 00:12:11,180 --> 00:12:14,850 Là, le block a un argument qui est x et je vais mettre un 236 00:12:15,100 --> 00:12:16,640 core qui est plus 3, x + 3. 237 00:12:16,940 --> 00:12:19,700 Et maintenant, ce block quand je veux l'exécuter, l'application 238 00:12:19,900 --> 00:12:21,520 de fonction par rapport à la définition, là c'était la 239 00:12:21,720 --> 00:12:24,520 définition de fonction, maintenant j'ai l'application de fonction. 240 00:12:24,830 --> 00:12:26,850 Je vais envoyer le message Value au block. 241 00:12:27,050 --> 00:12:31,910 Là, si je fais value 2, x vaudra 242 00:12:32,320 --> 00:12:37,250 2 et mon block va me rendre 5. 243 00:12:37,450 --> 00:12:38,460 Qu'est-ce qu'un block ? 244 00:12:38,860 --> 00:12:40,740 On peut considérer que c'est une fonction anonyme, ça n'a 245 00:12:40,940 --> 00:12:45,900 pas de nom, mais dans la réalité, c'est une clôture lexicale. 246 00:12:46,740 --> 00:12:48,150 On vous expliquera un peu ce que ça veut dire. 247 00:12:48,500 --> 00:12:50,550 Sinon, les blocks sont des vrais objets à part entière. 248 00:12:50,780 --> 00:12:52,820 Je peux les passer comme argument de méthode, je peux les 249 00:12:53,020 --> 00:12:54,710 stocker dans des variables d'instance, ils peuvent être 250 00:12:54,910 --> 00:12:57,760 retournés et ça nous sert, par exemple, pour les triggers 251 00:12:58,000 --> 00:13:01,020 de boutons, pour des callback dans des applications web, 252 00:13:01,220 --> 00:13:02,350 ils sont faits avec des blocks. 253 00:13:05,050 --> 00:13:07,100 L'utilisation des blocks, on l'a déjà vue, par exemple 254 00:13:07,300 --> 00:13:08,670 pour les itérateurs, vous avez eu des blocks. 255 00:13:09,040 --> 00:13:12,040 On les a eus aussi pour les conditions, on a utilisé des blocks dedans. 256 00:13:12,240 --> 00:13:13,530 Il y aura un cours dédié au block. 257 00:13:13,750 --> 00:13:16,090 C'est quelque chose de très élégant, ça a été introduit 258 00:13:16,290 --> 00:13:19,090 dans Eiffel, je l'ai dit récemment, ça a été introduit dans Java 8. 259 00:13:19,450 --> 00:13:21,400 Il y a eu une première version qui a été aussi introduite 260 00:13:21,600 --> 00:13:23,330 dans C Sharp, c'est quelque chose qui est fondamental. 261 00:13:23,530 --> 00:13:25,740 Il se trouve que les blocks sont un élément fondamental 262 00:13:26,540 --> 00:13:29,490 de la syntaxe et du modèle de calcul de Pharo. 263 00:13:31,200 --> 00:13:34,020 Comment est-ce qu'on définit une classe dans Pharo? 264 00:13:35,840 --> 00:13:38,250 Le browser va vous montrer des packages, vous allez avoir 265 00:13:38,450 --> 00:13:41,130 un ensemble de classe à l'intérieur, et ils vous montrent un template. 266 00:13:41,330 --> 00:13:44,560 Vous avez là un template qui dit, par défaut, tu es 267 00:13:44,760 --> 00:13:48,140 ReadObject et puis il faut mettre le nom de la classe. 268 00:13:49,070 --> 00:13:51,140 On va voir ça sur la classe point, par exemple. 269 00:13:51,390 --> 00:13:52,330 Comment est définie la classe point ? 270 00:13:53,630 --> 00:13:56,210 J'ai la classe Object, je lui envoie le message, c'est 271 00:13:56,410 --> 00:13:58,150 aussi un message, le message subclass instanceVariableNames, etc. 272 00:14:02,410 --> 00:14:05,690 Je dis je veux définir la classe point et je lui donne 273 00:14:05,890 --> 00:14:07,270 les variables d'instances X et Y. 274 00:14:08,720 --> 00:14:10,760 C'est juste pour vous montrer que la syntaxe suit 275 00:14:11,000 --> 00:14:13,350 toujours le même modèle avec des messages. 276 00:14:13,910 --> 00:14:17,420 En général, on ne s'amuse pas à l'écrire à la main, l'outil 277 00:14:17,620 --> 00:14:20,460 vous donne le template et puis vous remplissez dedans. 278 00:14:23,190 --> 00:14:24,810 Comment est-ce qu'on définit une méthode? 279 00:14:25,260 --> 00:14:28,020 Les méthodes sont publiques et virtuelles et que, par 280 00:14:28,220 --> 00:14:29,000 défaut, elles retournent Self. 281 00:14:29,410 --> 00:14:32,510 Quand on est dans le browser de code, ce qu'on va voir, 282 00:14:32,710 --> 00:14:33,670 il nous propose aussi un template. 283 00:14:33,870 --> 00:14:36,240 Le template, ça va être le nom de la méthode potentielle. 284 00:14:36,640 --> 00:14:41,000 Un commentaire parce qu'on est des gens bien élevés et qu'on 285 00:14:41,200 --> 00:14:42,000 commande notre code. 286 00:14:42,160 --> 00:14:44,440 Et puis, potentiellement, on va utiliser des variables 287 00:14:44,940 --> 00:14:47,870 temporaires et des expressions. Qu'est-ce que ça donne? 288 00:14:48,100 --> 00:14:49,370 On a déjà vu une méthode factorielle. 289 00:14:49,570 --> 00:14:53,850 Par exemple, je suis dans la classe Integer, je regarde 290 00:14:54,050 --> 00:14:54,810 la méthode factorielle. 291 00:14:55,010 --> 00:14:57,230 Là, j'ai le code de la méthode factorielle avec le nom de 292 00:14:57,430 --> 00:15:00,870 la méthode, son commentaire et le core de la méthode que j'ai définie. 293 00:15:04,300 --> 00:15:05,260 En résumé, qu'avons-nous vu ? 294 00:15:05,460 --> 00:15:07,850 On a vu qu'il y avait trois sortes de messages dans Pharo. 295 00:15:08,050 --> 00:15:09,790 Il y a les messages unaires où il n'y a pas d'arguments, 296 00:15:10,000 --> 00:15:12,260 les messages binaires où les sélecteurs sont tout ce qui 297 00:15:12,460 --> 00:15:14,770 est mathématique et les messages à mots-clés qui sont les 298 00:15:15,000 --> 00:15:17,550 messages où il y a un ou plusieurs arguments, qu'il y a 299 00:15:17,750 --> 00:15:20,110 une priorité, ça veut dire qu'on va exécuter les 300 00:15:20,310 --> 00:15:21,760 parenthèses en premier, puis les messages unaires, 301 00:15:22,000 --> 00:15:24,010 binaires et à mots-clés; et que si on est au même 302 00:15:24,210 --> 00:15:25,730 niveau, on va exécuter de gauche à droite. 303 00:15:25,930 --> 00:15:26,690 Et on a vu toute la syntaxe. 304 00:15:27,860 --> 00:15:29,120 Cette séance est terminée. 305 00:15:29,320 --> 00:15:31,030 Qu'avons-nous vu? La syntaxe est très, très compacte. 306 00:15:31,230 --> 00:15:35,200 Il y a très peu de constructeurs et ils sont tous très expressifs. 307 00:15:35,400 --> 00:15:38,010 Ce sont principalement des messages et des fermetures 308 00:15:38,210 --> 00:15:40,850 lexicales ou des blocks. Il y a trois types de message. 309 00:15:41,780 --> 00:15:45,180 On vous fera faire un petit exercice pour développer un petit langage. 310 00:15:45,390 --> 00:15:48,620 Ça permet de définir des langages qu'on appelle Domain Specific Languages.