Bonjour. Dans cette séquence on va revenir sur quelque
chose encore, que vous avez des déjà vue dans les
séquences précédentes, mais on va réenfoncer le clou,
donc sur les tableaux littéraux et les tableaux
dynamiques, donc la différence entre les 2.
Donc ce que vous allez apprendre c'est vraiment que l'es
tableaux littéraux ne sont pas créés par envoi de
messages, les tableaux dynamiques sont vraiment créés à l'exécution,
grâce à des envois de messages, mais que tous les 2 dans
les 2 cas sont des instances de la classe Array.
Donc c'est juste 2 méthodes de création de tableaux différents.
Donc vous vous souvenez, pour créer un tableau literal on
utilise la syntaxe Dièse parenthèse et, puis au milieu je
peux mettre n'importe quel objet sous sa forme textuelle.
Donc l'entier 45, la Chaîne de caractères "Milou", le
nombre 1 300, le booléen true et puis ici un symbole #tintin.
D'accord. Donc si je demande la classe à ce tableau, sa
classe à cet objet littéral, il me rend bien "Array".
Donc c'est bien une instance de la classe Array.
Donc la version dynamique, le pendant dynamique de ce
tableau literal, la voici, d'accord.
Donc pour créer un tableau long je prends la classe
Array, je vais en créer une instance, là c'est grâce à la
méthode "with with with with".
D'accord, que je vais envoyer avec tous les paramètres et
ça me crée bien un tableau, d'accord, une instance de la
classe Array qui est complètement équivalente à celle du dessus.
C'est juste 2 manières de créer des objets différentes.
Alors la version dynamique, je vous en montre encore une nouvelle version.
Donc j'aurais pu créer ici un tableau manuellement, en
envoyant un message "new" à la classe "Array" et puis j'aurais
pu faire des "at put", d'accord, pour remplir les cases
du tableau et puis retourner le tableau in fine, d'accord.
C'est encore une manière de créer un tableau dynamiquement.
Mais en fait on a une syntaxe particulière qui est du
sucre syntaxique en fait, avec les accolades, d'accord.
Donc les accolades, ça me permet juste d'écrire
exactement ce que j'ai écrit dans la version du dessus
ici, mais plus rapidement. Donc de façon plus concise.
Qui est complètement équivalente aussi.
Donc c'est-à-dire, je vais utiliser des accolades et je
vais mettre des expressions, un ensemble d'expressions,
séparé par des points qui vont être évalués pour créer la collection.
Donc la grosse différence entre un tableau literal et un
tableau créé dynamiquement, grâce aux accolades, la
voici, c'est que je prends une expression par exemple, je
dis, je vous donne l'exemple ici.
Je prends une variable, j'initialise à 12.
Et je veux créer un tableau ici et je mets Dièse
parenthèse, donc c'est un tableau literal, je fais "a + 1.
13" ça va me rendre le tableau suivant.
D'accord. Donc c'est un tableau qui va contenir le
symbole "a" le symbole "+", l'entier "1", le symbole.
et l'entier 13. Je fais la même chose ici avec un tableau
dynamique : a =12 { A + 1.
13} et j'obtiens un tableau à 2 éléments,
13 et 13. Pourquoi ?
Parce que a+1 a été évalué comme une expression d'accord.
Donc ça a a vaut 12, plus 1, 13 donc on a bien évalué
chacune des expressions séparées par des points avant de
construire le tableau.
Donc la grosse différence, elle est vraiment ici, c'est
ça qui est important, c'est que quand j'utilise les
accolades, ça exécute les expressions, alors que j'utilise
Dièse parenthèses à un tableau literal, les expressions à
l'intérieur ne sont pas du tout exécutées.
Et pourquoi? Parce que c'est le compilateur qui va créer
le tableau quand c'est dans le cas d'un tableau literal.
Donc je vous en montre ici, un autre exemple un peu plus compliqué.
Donc ici je fais Dièse parenthèse et puis je réutilise
des parenthèses à l'intérieur. Donc là c'est un point, d'accord,
et puis je réutilise des parenthèses à l'intérieur, et caetera.
On voit qu'en fait il n'y a rien qui a été interprété au
moment dans ce tableau littéral, d'accord, puisqu'il a
été créé à la compilation par le compilateur et donc on a
un tableau qui contient des sous- tableaux, d'accord,
vous les voyez ici.
OK. Donc le premier sous-tableau contient "10", le
symbole "arobase" et l'entier "20" et caetera.
D'accord.
Donc pour preuve si je demande l'élément "1" de ce
tableau, je récupère bien un tableau.
Donc dès que je vais mettre des parenthèses dans un
tableau literal, ça va créer des sous-tableaux.
Donc en résumé ce qu'il faut retenir c'est qu'on a une
seule sorte de tableau en Pharo, c'est-à dire que la
classe "Array" et les instances de la classe "Array".
Mais on a plusieurs façons d'instancier cette classe
Array, de créer des tableaux.
Donc on a une première forme qui est la syntaxe littérale, # ().
Attention, les tableaux vont être créés par le
compilateur au moment de la compilation.
On a la forme dynamique la plus simple, "Array new", j'envoie
le message new à la classe array, donc je vais créer
dynamiquement le tableau.
Et on a une forme plus compacte syntaxiquement, mais qui
est aussi dynamique, avec les accolades, { ouvrante et }
fermante, où vais mettre des expressions séparées par des
points, qui seront évaluées pour construire le tableau.