1
00:00:00,580 --> 00:00:03,590
Alors dans cette séquence
on va revisiter la syntaxe

2
00:00:03,790 --> 00:00:05,400
Pharo, c'est-à-dire
qu'on va la revoir quasiment

3
00:00:05,600 --> 00:00:08,500
entièrement sur un exemple
concret, l'exemple d'une l'application

4
00:00:08,700 --> 00:00:11,170
toute simple: http
donc issue du monde réel.

5
00:00:11,920 --> 00:00:13,620
On va analyser le code
et revoir tous les points

6
00:00:13,820 --> 00:00:15,930
syntaxiques de Pharo à
travers cette analyse.

7
00:00:16,770 --> 00:00:17,830
Donc cette application, là voici.

8
00:00:18,150 --> 00:00:21,250
C'est une application Web
 classique qui va nous afficher

9
00:00:21,450 --> 00:00:22,470
des informations sur des livres.

10
00:00:23,370 --> 00:00:25,410
Donc je vous donne un
premier exemple donc on va utiliser

11
00:00:25,610 --> 00:00:28,900
le framework Zinc, c'est un
framework http qu'on reverra

12
00:00:29,100 --> 00:00:32,430
dans la suite des cours, qui
permet d'effectuer qu'il y a

13
00:00:32,630 --> 00:00:34,380
2 parties: une partie
client et une partie serveur qui

14
00:00:34,580 --> 00:00:37,000
permet d'effectuer des
requêtes et caetera, http.

15
00:00:37,690 --> 00:00:41,310
Donc ici, un premier point, on
peut voir que ZnClient, c'est

16
00:00:41,510 --> 00:00:44,160
une classe donc ça commence
par un Z majuscule comme on l'a

17
00:00:44,360 --> 00:00:46,580
vu dans une précédente
séquence, les noms de classe, les

18
00:00:46,780 --> 00:00:48,630
noms de variables globales
commencent par une lettre majuscule.

19
00:00:49,090 --> 00:00:51,490
Donc ZnClient est une
 classe, on lui envoie le message

20
00:00:51,850 --> 00:00:54,630
"New" ici à cette classe.
Cela va nous créer une nouvelle

21
00:00:54,830 --> 00:00:58,220
instance de ZnClient. A
cette nouvelle instance, on va

22
00:00:58,420 --> 00:01:01,300
lui envoyer un premier
message qui est url qui est un

23
00:01:01,500 --> 00:01:03,620
paramètre, donc ici qui
est une chaîne de caractères.

24
00:01:04,140 --> 00:01:07,840
Et puis on va utiliser la
cascade, donc je vous rappelle

25
00:01:08,040 --> 00:01:08,960
le point virgule à la fin.

26
00:01:09,270 --> 00:01:11,620
C'est-à-dire qu'au même
receveur, on va lui envoyer un

27
00:01:11,820 --> 00:01:13,450
nouveau message qui s'appelle get.

28
00:01:15,330 --> 00:01:19,000
Ce bout de code en fait ici
permet de simuler exactement

29
00:01:19,200 --> 00:01:21,450
ce que ferait votre
navigateur, quand vous lui rentrez l'url

30
00:01:21,650 --> 00:01:25,790
et qu'on appuie sur entrée,
si je tape url et que j'appuie

31
00:01:26,000 --> 00:01:28,000
sur entrée, en fait on
contacte le serveur de cette

32
00:01:28,200 --> 00:01:32,270
application web et ça nous rend
une réponse http en l'occurrence

33
00:01:32,470 --> 00:01:34,480
les informations sur un
livre donné, et pas n'importe

34
00:01:34,680 --> 00:01:36,070
quel livre le livre numéro 1.

35
00:01:38,400 --> 00:01:40,780
Donc je vous donne un
autre exemple ici, une deuxième

36
00:01:41,000 --> 00:01:44,120
requête construite avec
Pharo et ZnClient, donc toujours

37
00:01:44,320 --> 00:01:48,240
pareil on instancie un
objet ZnClient, on lui envoie un

38
00:01:48,440 --> 00:01:50,190
ensemble de messages en
utilisant des cascades.

39
00:01:50,780 --> 00:01:53,670
Et puis, on peut voir en
fait quelque chose qu'on avait

40
00:01:53,870 --> 00:01:57,190
déjà vu, c'est que en Pharo on a
des keywords messages c'est-à-dire

41
00:01:57,390 --> 00:02:02,220
que le nom de la méthode,
c'est formAt: put:, donc

42
00:02:02,420 --> 00:02:06,190
ça c'est équivalent avec
une syntaxe Java classique à

43
00:02:06,390 --> 00:02:09,880
FormAtput, donc le nom de
méthode tout collé et je passe

44
00:02:10,080 --> 00:02:12,440
tous les arguments entre parenthèses.

45
00:02:15,790 --> 00:02:19,610
Donc là je vous montre sur
ce slide le code complet de

46
00:02:19,810 --> 00:02:22,870
cette petite application
web, construite avec Zinc.

47
00:02:25,650 --> 00:02:27,750
Je vais vous présenter
maintenant certains morceaux de ce

48
00:02:27,950 --> 00:02:30,630
code point par point. Tout
d'abord par exemple, on a une

49
00:02:30,830 --> 00:02:33,180
première partie qui correspond
à la configuration du serveur.

50
00:02:33,620 --> 00:02:37,690
Donc on a en premier lieu
ici sur la première ligne des

51
00:02:37,890 --> 00:02:40,860
déclarations de variables
locales qui commencent par des

52
00:02:41,060 --> 00:02:42,530
lettres minuscules, je vous rappelle.

53
00:02:43,310 --> 00:02:46,440
Donc books teapot, deux
variables locales qui sont dans

54
00:02:46,640 --> 00:02:48,370
des barres verticales.

55
00:02:48,570 --> 00:02:50,670
Ensuite, on a des affectations.

56
00:02:50,870 --> 00:02:53,310
Donc ici, on a une
première affectation 2:= en Pharo.

57
00:02:55,720 --> 00:02:59,430
On peut avoir des symboles,
donc le point numéro 3 on a

58
00:02:59,630 --> 00:03:04,310
#port qui est ici dans le
code donc qui correspond à un

59
00:03:04,510 --> 00:03:08,000
symbole, donc c'est une chaîne unique
qui ne sera créée qu'une seule fois.

60
00:03:09,200 --> 00:03:12,920
On a des messages qui sont
envoyés à la classe teapot, là

61
00:03:13,120 --> 00:03:14,680
par exemple, on a la
 classe qui est ici.

62
00:03:15,590 --> 00:03:17,850
Et puis, je vais lui
envoyer le message configure.

63
00:03:18,150 --> 00:03:21,000
Donc configure: je vous
rappelle le 2 points c'est pour

64
00:03:21,200 --> 00:03:25,510
marquer la présence d'un
argument qu'on va envoyer dans

65
00:03:25,830 --> 00:03:30,010
cette méthode. Et là
l'argument commence par une

66
00:03:30,710 --> 00:03:33,150
accolade et se termine
ici par une accolade.

67
00:03:33,620 --> 00:03:37,160
Donc ce qu'il y a entre
accolades c'est un tableau dynamique.

68
00:03:39,420 --> 00:03:41,410
Tout ce qui est entre
accolades, en fait on va évaluer

69
00:03:41,610 --> 00:03:43,930
chacune des expressions
séparées par des points dans ce

70
00:03:44,130 --> 00:03:46,560
tableau-là, et on va
construire un tableau avec le

71
00:03:46,760 --> 00:03:47,910
résultat de chacune des expressions.

72
00:03:49,340 --> 00:03:51,490
On voit qu'il y a qu'un seul
argument dans la méthode configure.

73
00:03:52,000 --> 00:03:56,460
Et puis à l'intérieur de ce tableau

74
00:03:56,660 --> 00:04:01,340
dynamique entre accolades,
on va utiliser ici la flèche

75
00:04:01,540 --> 00:04:03,540
qui va permettre de
construire des objets association.

76
00:04:04,090 --> 00:04:05,540
C'est une clé, une valeur.

77
00:04:10,940 --> 00:04:14,110
Pour faire marcher le
serveur, on ne va pas seulement

78
00:04:14,310 --> 00:04:17,050
définir la configuration du
serveur, on va aussi définir

79
00:04:17,250 --> 00:04:18,690
des roots, ce qu'on
appelle des roots.

80
00:04:19,270 --> 00:04:21,800
Je vous explique sur un
exemple plus petit, donc un

81
00:04:22,000 --> 00:04:25,000
extrait de code du code
complet. Si je veux dans mon

82
00:04:25,200 --> 00:04:26,830
application, être
capable de traiter des urls qui

83
00:04:27,030 --> 00:04:31,860
ressemblent à ça, qui se
terminent par books/1, si je

84
00:04:32,060 --> 00:04:35,040
veux les informations du
livre no 1 par exemple, donc je

85
00:04:35,240 --> 00:04:37,100
vais définir ce qu'on
appelle une route dans mon

86
00:04:37,300 --> 00:04:41,330
application Zinc, je vais
dire quand je reçois une

87
00:04:41,530 --> 00:04:45,920
requête de type GET qui
commence par /books/ et puis

88
00:04:46,120 --> 00:04:49,560
quelque chose qui est un
entier, vous voyez ici id qui

89
00:04:49,760 --> 00:04:52,450
est un entier, alors
exécute ce block de code.

90
00:04:52,650 --> 00:04:54,370
Donc un block, je vous
rappelle ça commence par un

91
00:04:54,570 --> 00:04:59,000
crochet, ça termine par un
crochet, c'est une méthode

92
00:04:59,200 --> 00:05:01,340
anonyme qui peut prendre un
paramètre, en l'occurrence

93
00:05:01,540 --> 00:05:03,710
ici il y a un paramètre
qui s'appelle request qui

94
00:05:03,910 --> 00:05:07,660
commence par: et qui est
séparé par une barre verticale.

95
00:05:09,040 --> 00:05:11,890
Et ensuite le corps du
block, toutes les expressions qui

96
00:05:12,090 --> 00:05:14,240
sont dedans, ici il n'y en
a qu'une expression c'est

97
00:05:14,440 --> 00:05:19,040
celle-là, donc on va
envoyer le message At à l'objet

98
00:05:19,240 --> 00:05:24,150
books, Ok, et puis on veut quel

99
00:05:25,430 --> 00:05:27,810
livre dans la collection de livres.

100
00:05:28,090 --> 00:05:30,150
En fait on veut le livre qui
correspond à l'id qui a été

101
00:05:30,350 --> 00:05:31,440
passé en paramètre dans l'url.

102
00:05:32,030 --> 00:05:33,490
Je vais demander à la requête.

103
00:05:33,900 --> 00:05:37,000
La variable qui est ici
c'est bien le paramètre du block

104
00:05:37,200 --> 00:05:39,950
qui était défini au début.
Je vais récupérer l'élément

105
00:05:40,150 --> 00:05:42,580
qui s'appelle id
dans cette requête ici.

106
00:05:43,100 --> 00:05:44,910
Je vais convertir cet
élément, souvenez-vous c'était un

107
00:05:45,110 --> 00:05:47,040
entier, je le convertis
en chaîne de caractères.

108
00:05:47,580 --> 00:05:51,140
Et puis ça va me permettre
de récupérer le livre no 1.

109
00:05:52,750 --> 00:05:56,370
En conclusion, on a revu
tous les points syntaxiques de

110
00:05:56,570 --> 00:05:58,170
Pharo dans cette séquence.

111
00:05:58,630 --> 00:06:00,930
L'objectif c'était vraiment
de s'intéresser à la syntaxe.

112
00:06:01,270 --> 00:06:04,450
Mais on a pu en même temps
redécouvrir cette syntaxe sur

113
00:06:04,650 --> 00:06:07,040
un package qui est assez
intéressant, qui est vraiment

114
00:06:07,240 --> 00:06:08,850
rigolo et fun à
 programmer qui est Teapot.

115
00:06:09,290 --> 00:06:10,840
Vous pouvez aller le
découvrir par vous-même et le

116
00:06:11,040 --> 00:06:14,410
 charger depuis Smalltalkhub.
Donc ça permet de construire

117
00:06:14,610 --> 00:06:16,700
facilement des
applications http, on l'a vu le très

118
00:06:16,900 --> 00:06:21,200
simplement, et en fait c'est un
package qui est construit au-dessus de Zinc.

119
00:06:21,400 --> 00:06:25,000
Et Zinc, c'est une des
bibliothèques très solides qui

120
00:06:25,200 --> 00:06:29,000
existent en Pharo pour
faire des applications Web plus

121
00:06:29,200 --> 00:06:32,000
complexes, comme on le verra
dans les séquences suivantes.

