1
00:00:00,590 --> 00:00:02,250
Bonjour. Dans cette
séquence on va revenir sur quelque

2
00:00:02,450 --> 00:00:04,170
chose encore, que vous
avez des déjà vue dans les

3
00:00:04,370 --> 00:00:06,730
séquences précédentes,
mais on va réenfoncer le clou,

4
00:00:07,170 --> 00:00:10,560
donc sur les tableaux
littéraux et les tableaux

5
00:00:10,760 --> 00:00:12,110
dynamiques, donc la
différence entre les 2.

6
00:00:13,180 --> 00:00:15,900
Donc ce que vous allez
apprendre c'est vraiment que l'es

7
00:00:16,100 --> 00:00:17,330
tableaux littéraux ne
sont pas créés par envoi de

8
00:00:17,530 --> 00:00:22,160
messages, les tableaux dynamiques
sont vraiment créés à l'exécution,

9
00:00:22,360 --> 00:00:24,920
grâce à des envois de
messages, mais que tous les 2 dans

10
00:00:25,120 --> 00:00:26,720
les 2 cas sont des
instances de la classe Array.

11
00:00:26,920 --> 00:00:29,460
Donc c'est juste 2 méthodes de
création de tableaux différents.

12
00:00:30,300 --> 00:00:33,170
Donc vous vous souvenez,
pour créer un tableau literal on

13
00:00:33,390 --> 00:00:37,000
utilise la syntaxe Dièse
parenthèse et, puis au milieu je

14
00:00:37,200 --> 00:00:40,080
peux mettre n'importe quel
objet sous sa forme textuelle.

15
00:00:40,570 --> 00:00:44,240
Donc l'entier 45, la
Chaîne de caractères "Milou", le

16
00:00:44,440 --> 00:00:48,190
nombre 1 300, le booléen true
et puis ici un symbole #tintin.

17
00:00:48,870 --> 00:00:52,250
D'accord. Donc si je
demande la classe à ce tableau, sa

18
00:00:52,450 --> 00:00:55,070
 classe à cet objet
littéral, il me rend bien "Array".

19
00:00:55,270 --> 00:00:56,270
Donc c'est bien une
instance de la classe Array.

20
00:00:57,060 --> 00:01:00,740
Donc la version dynamique,
le pendant dynamique de ce

21
00:01:00,940 --> 00:01:04,210
tableau literal, la voici, d'accord.

22
00:01:04,410 --> 00:01:06,650
Donc pour créer un
tableau long je prends la classe

23
00:01:06,850 --> 00:01:09,450
Array, je vais en créer une
instance, là c'est grâce à la

24
00:01:09,650 --> 00:01:10,410
méthode "with with with with".

25
00:01:10,610 --> 00:01:13,260
D'accord, que je vais
envoyer avec tous les paramètres et

26
00:01:13,460 --> 00:01:16,460
ça me crée bien un tableau,
d'accord, une instance de la

27
00:01:16,660 --> 00:01:18,360
 classe Array qui est
complètement équivalente à celle du dessus.

28
00:01:18,710 --> 00:01:21,610
C'est juste 2 manières de
créer des objets différentes.

29
00:01:22,740 --> 00:01:25,550
Alors la version dynamique, je vous
en montre encore une nouvelle version.

30
00:01:25,860 --> 00:01:29,590
Donc j'aurais pu créer ici
un tableau manuellement, en

31
00:01:29,790 --> 00:01:33,000
envoyant un message "new" à la
 classe "Array" et puis j'aurais

32
00:01:33,200 --> 00:01:36,510
pu faire des "at put",
d'accord, pour remplir les cases

33
00:01:36,710 --> 00:01:39,430
du tableau et puis retourner
le tableau in fine, d'accord.

34
00:01:39,630 --> 00:01:41,770
C'est encore une manière de
créer un tableau dynamiquement.

35
00:01:42,710 --> 00:01:46,120
Mais en fait on a une
syntaxe particulière qui est du

36
00:01:46,320 --> 00:01:51,170
sucre syntaxique en fait,
avec les accolades, d'accord.

37
00:01:51,370 --> 00:01:52,760
Donc les accolades, ça
me permet juste d'écrire

38
00:01:53,000 --> 00:01:55,420
exactement ce que j'ai
écrit dans la version du dessus

39
00:01:55,620 --> 00:01:59,150
ici, mais plus rapidement.
Donc de façon plus concise.

40
00:02:00,180 --> 00:02:01,520
Qui est
complètement équivalente aussi.

41
00:02:02,170 --> 00:02:05,770
Donc c'est-à-dire, je vais
utiliser des accolades et je

42
00:02:06,000 --> 00:02:07,830
vais mettre des
expressions, un ensemble d'expressions,

43
00:02:08,030 --> 00:02:10,800
séparé par des points qui vont
être évalués pour créer la collection.

44
00:02:11,770 --> 00:02:16,410
Donc la grosse différence
entre un tableau literal et un

45
00:02:16,610 --> 00:02:20,270
tableau créé
dynamiquement, grâce aux accolades, la

46
00:02:20,470 --> 00:02:24,100
voici, c'est que je prends
une expression par exemple, je

47
00:02:24,300 --> 00:02:25,600
dis, je vous donne l'exemple ici.

48
00:02:25,800 --> 00:02:27,750
Je prends une
variable, j'initialise à 12.

49
00:02:28,460 --> 00:02:31,810
Et je veux créer un
tableau ici et je mets Dièse

50
00:02:32,010 --> 00:02:35,200
parenthèse, donc c'est un
tableau literal, je fais "a + 1.

51
00:02:35,440 --> 00:02:37,900
13" ça va me rendre
le tableau suivant.

52
00:02:38,870 --> 00:02:41,030
D'accord. Donc c'est un
tableau qui va contenir le

53
00:02:41,230 --> 00:02:43,770
symbole "a" le symbole
"+", l'entier "1", le symbole.

54
00:02:44,520 --> 00:02:47,530
et l'entier 13. Je fais la
même chose ici avec un tableau

55
00:02:47,730 --> 00:02:51,690
dynamique : a =12 { A + 1.

56
00:02:51,890 --> 00:02:56,000
13} et j'obtiens un
tableau à 2 éléments,

57
00:02:56,610 --> 00:02:59,000
13 et 13. Pourquoi ?

58
00:02:59,450 --> 00:03:04,250
Parce que a+1 a été évalué
comme une expression d'accord.

59
00:03:04,450 --> 00:03:08,240
Donc ça a a vaut 12, plus
1, 13 donc on a bien évalué

60
00:03:08,440 --> 00:03:11,150
chacune des expressions
séparées par des points avant de

61
00:03:11,350 --> 00:03:12,110
construire le tableau.

62
00:03:13,000 --> 00:03:15,080
Donc la grosse différence,
elle est vraiment ici, c'est

63
00:03:15,280 --> 00:03:17,000
ça qui est important,
c'est que quand j'utilise les

64
00:03:17,200 --> 00:03:19,700
accolades, ça exécute les
expressions, alors que j'utilise

65
00:03:19,900 --> 00:03:23,160
Dièse parenthèses à un
tableau literal, les expressions à

66
00:03:23,360 --> 00:03:25,210
l'intérieur ne sont
pas du tout exécutées.

67
00:03:26,180 --> 00:03:30,560
Et pourquoi? Parce que c'est
le compilateur qui va créer

68
00:03:31,000 --> 00:03:34,600
le tableau quand c'est dans
le cas d'un tableau literal.

69
00:03:35,220 --> 00:03:39,110
Donc je vous en montre ici, un
autre exemple un peu plus compliqué.

70
00:03:39,340 --> 00:03:42,000
Donc ici je fais Dièse
parenthèse et puis je réutilise

71
00:03:42,300 --> 00:03:45,480
des parenthèses à l'intérieur.
Donc là c'est un point, d'accord,

72
00:03:46,000 --> 00:03:48,670
et puis je réutilise des
parenthèses à l'intérieur, et caetera.

73
00:03:49,060 --> 00:03:51,610
On voit qu'en fait il n'y a
rien qui a été interprété au

74
00:03:51,810 --> 00:03:54,690
moment dans ce tableau
littéral, d'accord, puisqu'il a

75
00:03:54,890 --> 00:03:58,450
été créé à la compilation
par le compilateur et donc on a

76
00:03:58,650 --> 00:04:03,120
un tableau qui contient
des sous- tableaux, d'accord,

77
00:04:03,320 --> 00:04:04,210
vous les voyez ici.

78
00:04:05,490 --> 00:04:09,900
OK. Donc le premier
sous-tableau contient "10", le

79
00:04:10,630 --> 00:04:13,630
symbole "arobase" et
l'entier "20" et caetera.

80
00:04:14,230 --> 00:04:15,000
D'accord.

81
00:04:15,190 --> 00:04:17,330
Donc pour preuve si je
demande l'élément "1" de ce

82
00:04:17,530 --> 00:04:19,130
tableau, je récupère bien un tableau.

83
00:04:19,600 --> 00:04:22,360
Donc dès que je vais
mettre des parenthèses dans un

84
00:04:22,560 --> 00:04:24,670
tableau literal, ça va
créer des sous-tableaux.

85
00:04:26,380 --> 00:04:29,610
Donc en résumé ce qu'il
faut retenir c'est qu'on a une

86
00:04:29,810 --> 00:04:32,480
seule sorte de tableau en
Pharo, c'est-à dire que la

87
00:04:32,680 --> 00:04:34,060
 classe "Array" et les
instances de la classe "Array".

88
00:04:34,620 --> 00:04:37,080
Mais on a plusieurs façons
d'instancier cette classe

89
00:04:37,280 --> 00:04:38,300
Array, de créer des tableaux.

90
00:04:38,760 --> 00:04:42,470
Donc on a une première forme qui
est la syntaxe littérale, # ().

91
00:04:42,840 --> 00:04:44,370
Attention, les tableaux
vont être créés par le

92
00:04:44,570 --> 00:04:46,510
compilateur au
moment de la compilation.

93
00:04:47,440 --> 00:04:50,540
On a la forme dynamique la
plus simple, "Array new", j'envoie

94
00:04:50,740 --> 00:04:52,190
le message new à la classe
array, donc je vais créer

95
00:04:52,390 --> 00:04:53,580
dynamiquement le tableau.

96
00:04:53,780 --> 00:04:56,830
Et on a une forme plus
compacte syntaxiquement, mais qui

97
00:04:57,030 --> 00:05:01,040
est aussi dynamique, avec
les accolades, { ouvrante et }

98
00:05:01,240 --> 00:05:03,390
fermante, où vais mettre des
expressions séparées par des

99
00:05:03,590 --> 00:05:05,320
points, qui seront évaluées
pour construire le tableau.

