Dans cette vidéo, je voudrais vous montrer l'inspecteur
et comme on l'utilise.
Qu'est-ce que l'inspecteur ?
C'est un outil qui va nous permettre d'interagir avec n'importe
quel objet du système.
Comme Pharo, tout est écrit à base d'objets, vous allez
pouvoir inspecter tous les objets qui composent Pharo.
La métaphore la plus proche de ce qu'est un inspecteur,
je dirais que c'est un microscope, mais un microscope qui
aurait des possibilités d'interagir avec les objets qu'il
est en train d'observer. C'est comme si vous étiez un
biologiste avec des cellules ou une culture de bactéries
et que tout d'un coup, vous allez pouvoir, avec une
petite pointe, interagir avec ces bactéries alors qu'elles sont vivantes.
Je vous ai préparé une petite expression.
Ça serait très rare dans la vraie vie qu'on mette dans un
dictionnaire une date, un temps et une "Morph" mélangés,
mais pour le but de l'exercice, c'est très bien.
On va voir ça. La première chose à faire une fois que
vous avez tapé cette expression, c'est d'invoquer l'
inspecteur. Donc, on obtient l'inspecteur.
Vous allez voir que c'est un objet qui a plusieurs formes.
Qu'est-ce que me montre l'inspecteur?
Là, il me montre que j'ai plusieurs éléments dans ma
collection. À chaque fois que je clique sur un des
éléments, je vais avoir un autre inspecteur qui s'ouvre
sur l'élément que j'ai sélectionné.
Alors ce qu'il faut voir, c'est que l'inspecteur, en tout
cas GT, la nouvelle version de l'inspecteur en Pharo qui
est développée par l'équipe GT de l'université de Berne,
qu'est-ce qu'il offre ?
Il offre la possibilité de définir différentes vues qui
vont s'adapter à chaque objet que l'on va manipuler.
On ne va peut-être pas vouloir inspecter un dictionnaire
comme on manipule un élément graphique.
Donc, l'intérêt, c'est que chacun de ces éléments va
pouvoir proposer à l'utilisateur des vues différentes.
La vue de base que vous avez, c'est la vue Raw.
C'est la vue qui montre l'implémentation.
Si on regarde, si j'ouvre la classe, par exemple, qui
correspond à OrderedDictionary, cette classe
a 2 variables d'instance, dictionary et orderedKeys.
Là, l'inspecteur va me montrer les valeurs brutes qui
sont contenues dans ces variables d'instances.
Si je clique sur dictionary, je vois que c'est un dictionnaire.
Donc, si j'avais cliqué dessus, je vois ici, c'est un dictionnaire.
Et là, je vois encore une fois la vue brute de cet objet-là.
Il a des clés ordonnées qui est un tableau apparemment.
J'ai un tableau avec Time, Date et Morph.
Maintenant, quand je suis en mode Items - le mode Items,
c'est que l'entité OrderedDictionary me propose de voir
ces clés et ces valeurs d'une manière plus sympa parce
que là, si on regarde, il faut aller à l'intérieur.
Ça devient un peu délicat.
Donc, là on ne sait pas "ah oui, c'est laquelle?
Ah, c'est celle-là, peut-être qu’à 6, ça veut dire que j'ai
une association dans laquelle j'ai Time, j'ai la clé et la valeur, etc.
". Donc, ce que vous voyez déjà, c'est que l'inspecteur navigue.
J'ai cette petite barre de navigation.
Quand je mets la souris sur les petits ronds, je vois un
preview de l'endroit où je vais aller si je clique dessus.
Et ce que je peux faire aussi, je peux réduire ou changer
la taille des fenêtres et le focus que je veux avoir.
Si je prends les trois par exemple, je vais mettre en
gros pour que vous le voyiez bien.
Maintenant, quand je suis en mode Items, c'est beaucoup
plus sympa parce que je vais pouvoir interagir.
Donc là, je vois date, j'ai la clé et la valeur, quand je
sélectionne, par exemple, je vois date, date au format
brut des variables d'instances.
Si je faisais self browse, vous imaginez ce qu'on va voir.
On va voir exactement une date, Timespan,
donc j'ai start et duration.
J'ai bien start et duration.
Si je regarde l'onglet Details,
ce que me propose la date, c'est de la voir avec, par
exemple, une année, un mois, ce genre de choses, sous
forme Iso par exemple.
Comment ça se passe ?
En fait, on le verra dans une autre vidéo, mais c'est que
chaque objet peut décider des facettes qu'il va exposer
et qu'il va proposer à l'inspecteur.
Donc là, il y a calendar, par exemple.
On voit qu'on a une représentation graphique de ce que c'est que la date.
Je reviens en arrière.
De la même manière, pour Times, vous voyez qu'on a les mêmes choses.
Alors je vous ai montré les onglets Raw.
Vous avez aussi l'onglet Meta.
C'est un mini browser de code qui vous montre toutes les méthodes.
Par exemple, là je peux voir toutes les méthodes parce
que j'aurais peut-être envie d'interagir avec ma date, time.
Imaginons que je ne sache pas ce que je peux lui envoyer,
peut-être que je peux lui envoyer hours.
Il me rend 18. Il est 18 heures.
Ça normalement, je devrais pouvoir le voir ici si je cherche hour.
J'ai la définition de la méthode.
C'est juste pour être plus dans le flow.
Maintenant, si je regarde Morph.
C'est un objet plus compliqué.
On voit plusieurs pans qui sont différents.
Ce qui est sympa là, par exemple, c'est que si je clique
sur Morph, je vois son rendu.
Je vois le rendu de l'objet Morph
qui est en fait un HSVAColorSelectorMorph.
Juste pour vous montrer, en fait avec l'inspecteur, ce
que je peux faire, je peux interagir avec mon objet.
Je peux lui dire de s'ouvrir dans un monde et je vais
pouvoir interagir avec mon objet.
Ça dépendra de ce qu'il me propose comme
fonctionnalité. Je peux lui demander
selectedColor. On va voir si ça fonctionne.
Si je fais self selectedColor.
Il me rend une couleur.
Là, c'est intéressant parce que ce que je peux faire avec
l'inspecteur, c'est que là j'ai fait un print, ça m'a
donné une représentation textuelle de l'objet.
Je pourrais invoquer, je pourrais faire inspect dessus
et ça m'ouvrirait un autre inspecteur.
C'est ce que je suis en train de faire là.
Maintenant, si je veux que le résultat de cette
expression soit injecté dans le flow de mon inspecteur,
qu'est-ce que je peux faire ?
Il suffit que je fasse Do it and go.
Si je fais Do it and go, j'ai ajouté dans le flow d'interaction
un nouvel objet et un inspecteur sur un nouvel objet.
Vous avez compris. Là, ce sont mes couleurs avec l'encodage des couleurs.
Rien de bien spécial.
On va revenir en arrière.
Ce qui est intéressant de voir, c'est que là, j'ai une
vision de mon objet par exemple en sous-morph.
Si je veux avoir la même vision et si je veux trouver les
sous-morph qui composent mon objet graphique, quand je
suis en mode Raw, je vais devoir aller naviguer
à l'intérieur de mon arbre de composants graphiques.
Ça peut être vraiment pénible.
Je vais vous montrer une astuce vraiment sympathique.
Imaginons que j'ai mon arbre de Morph.
J'ai 2 vues qui sont exactement les mêmes sur le même objet.
Ce que je peux faire, c'est faire Submorph.
Je vais faire Submorph dans celui-là et là j'ai Morph.
Maintenant, je vais pouvoir sélectionner dans mon arbre les éléments.
Ce que je lui dis, je ne veux que tu affiches ici que
celui-là, ou alors par exemple, là je suis vraiment
sur la sous-feuille de mon arbre qui correspond à ma sélection.
C'est super puissant parce que souvent, si je devais
trouver la sous-morph qui correspond à ce
petit indicateur, là c'est relativement facile, c'est celui-là.
Par contre, si je suis dans un mode traditionnel, c'est
une autre paire de manches parce qu'il va falloir, en
fait je ne sais pas comment faire.
Il va falloir que j'aille à l'intérieur
jusqu'à ce que je trouve.
C'est ici, il me semble, parce que là c'est un objet
simple.
Vous allez voir dans les autres vidéos qu'on va pouvoir
faire ce genre de manipulation sur tous les objets du système.
Je vais vous montrer en particulier qu'on peut faire ça
sur des systèmes de fichiers, sur les classes elles-mêmes.
En guise de conclusion, ce qu'on a vu finalement c'est
que l'inspecteur c'est un objet qui va vous permettre de
parler et d'interagir, de changer des objets vivants, vos
objets, et d'une autre part, c'est que chaque objet va
exposer différentes facettes ou différentes vues sur
lui-même de façon à vous permettre d'avoir une
interaction différente suivant vos scénarios.
Ça donne un objet qui est très, très puissant.
En fait, GT Inspector est vraiment un super outil.