Alors dans cette séquence on va revisiter la syntaxe
Pharo, c'est-à-dire qu'on va la revoir quasiment
entièrement sur un exemple concret, l'exemple d'une l'application
toute simple: http donc issue du monde réel.
On va analyser le code et revoir tous les points
syntaxiques de Pharo à travers cette analyse.
Donc cette application, là voici.
C'est une application Web classique qui va nous afficher
des informations sur des livres.
Donc je vous donne un premier exemple donc on va utiliser
le framework Zinc, c'est un framework http qu'on reverra
dans la suite des cours, qui permet d'effectuer qu'il y a
2 parties: une partie client et une partie serveur qui
permet d'effectuer des requêtes et caetera, http.
Donc ici, un premier point, on peut voir que ZnClient, c'est
une classe donc ça commence par un Z majuscule comme on l'a
vu dans une précédente séquence, les noms de classe, les
noms de variables globales commencent par une lettre majuscule.
Donc ZnClient est une classe, on lui envoie le message
"New" ici à cette classe. Cela va nous créer une nouvelle
instance de ZnClient. A cette nouvelle instance, on va
lui envoyer un premier message qui est url qui est un
paramètre, donc ici qui est une chaîne de caractères.
Et puis on va utiliser la cascade, donc je vous rappelle
le point virgule à la fin.
C'est-à-dire qu'au même receveur, on va lui envoyer un
nouveau message qui s'appelle get.
Ce bout de code en fait ici permet de simuler exactement
ce que ferait votre navigateur, quand vous lui rentrez l'url
et qu'on appuie sur entrée, si je tape url et que j'appuie
sur entrée, en fait on contacte le serveur de cette
application web et ça nous rend une réponse http en l'occurrence
les informations sur un livre donné, et pas n'importe
quel livre le livre numéro 1.
Donc je vous donne un autre exemple ici, une deuxième
requête construite avec Pharo et ZnClient, donc toujours
pareil on instancie un objet ZnClient, on lui envoie un
ensemble de messages en utilisant des cascades.
Et puis, on peut voir en fait quelque chose qu'on avait
déjà vu, c'est que en Pharo on a des keywords messages c'est-à-dire
que le nom de la méthode, c'est formAt: put:, donc
ça c'est équivalent avec une syntaxe Java classique à
FormAtput, donc le nom de méthode tout collé et je passe
tous les arguments entre parenthèses.
Donc là je vous montre sur ce slide le code complet de
cette petite application web, construite avec Zinc.
Je vais vous présenter maintenant certains morceaux de ce
code point par point. Tout d'abord par exemple, on a une
première partie qui correspond à la configuration du serveur.
Donc on a en premier lieu ici sur la première ligne des
déclarations de variables locales qui commencent par des
lettres minuscules, je vous rappelle.
Donc books teapot, deux variables locales qui sont dans
des barres verticales.
Ensuite, on a des affectations.
Donc ici, on a une première affectation 2:= en Pharo.
On peut avoir des symboles, donc le point numéro 3 on a
#port qui est ici dans le code donc qui correspond à un
symbole, donc c'est une chaîne unique qui ne sera créée qu'une seule fois.
On a des messages qui sont envoyés à la classe teapot, là
par exemple, on a la classe qui est ici.
Et puis, je vais lui envoyer le message configure.
Donc configure: je vous rappelle le 2 points c'est pour
marquer la présence d'un argument qu'on va envoyer dans
cette méthode. Et là l'argument commence par une
accolade et se termine ici par une accolade.
Donc ce qu'il y a entre accolades c'est un tableau dynamique.
Tout ce qui est entre accolades, en fait on va évaluer
chacune des expressions séparées par des points dans ce
tableau-là, et on va construire un tableau avec le
résultat de chacune des expressions.
On voit qu'il y a qu'un seul argument dans la méthode configure.
Et puis à l'intérieur de ce tableau
dynamique entre accolades, on va utiliser ici la flèche
qui va permettre de construire des objets association.
C'est une clé, une valeur.
Pour faire marcher le serveur, on ne va pas seulement
définir la configuration du serveur, on va aussi définir
des roots, ce qu'on appelle des roots.
Je vous explique sur un exemple plus petit, donc un
extrait de code du code complet. Si je veux dans mon
application, être capable de traiter des urls qui
ressemblent à ça, qui se terminent par books/1, si je
veux les informations du livre no 1 par exemple, donc je
vais définir ce qu'on appelle une route dans mon
application Zinc, je vais dire quand je reçois une
requête de type GET qui commence par /books/ et puis
quelque chose qui est un entier, vous voyez ici id qui
est un entier, alors exécute ce block de code.
Donc un block, je vous rappelle ça commence par un
crochet, ça termine par un crochet, c'est une méthode
anonyme qui peut prendre un paramètre, en l'occurrence
ici il y a un paramètre qui s'appelle request qui
commence par: et qui est séparé par une barre verticale.
Et ensuite le corps du block, toutes les expressions qui
sont dedans, ici il n'y en a qu'une expression c'est
celle-là, donc on va envoyer le message At à l'objet
books, Ok, et puis on veut quel
livre dans la collection de livres.
En fait on veut le livre qui correspond à l'id qui a été
passé en paramètre dans l'url.
Je vais demander à la requête.
La variable qui est ici c'est bien le paramètre du block
qui était défini au début. Je vais récupérer l'élément
qui s'appelle id dans cette requête ici.
Je vais convertir cet élément, souvenez-vous c'était un
entier, je le convertis en chaîne de caractères.
Et puis ça va me permettre de récupérer le livre no 1.
En conclusion, on a revu tous les points syntaxiques de
Pharo dans cette séquence.
L'objectif c'était vraiment de s'intéresser à la syntaxe.
Mais on a pu en même temps redécouvrir cette syntaxe sur
un package qui est assez intéressant, qui est vraiment
rigolo et fun à programmer qui est Teapot.
Vous pouvez aller le découvrir par vous-même et le
charger depuis Smalltalkhub. Donc ça permet de construire
facilement des applications http, on l'a vu le très
simplement, et en fait c'est un package qui est construit au-dessus de Zinc.
Et Zinc, c'est une des bibliothèques très solides qui
existent en Pharo pour faire des applications Web plus
complexes, comme on le verra dans les séquences suivantes.