-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvariable.tex
More file actions
475 lines (404 loc) · 13.8 KB
/
variable.tex
File metadata and controls
475 lines (404 loc) · 13.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
\section{Les variables et les types}
\begin{frame}[fragile]
\frametitle{Les variables}
\begin{block}{Définition}
\begin{itemize}
\item Perl est un langage faiblement typé
\item une variable est ``typée'' par sa valeur et son contexte
d'utilisation
\item le nom d'une variable est composé de lettres, de chiffres et du
caractères \_, et ne peut pas commencer par un chiffre
\item le caractère de ponctuation précédant le nom de la variable
indique son type
\end{itemize}
\end{block}
\begin{exampleblock}{Les types}
\begin{itemize}
\item les scalaires commencent par \$
\item les tableaux par @
\item les tables de hachage (ou dictionnaires) par \%
\end{itemize}
\end{exampleblock}
\end{frame}
\begin{frame}[fragile]
\frametitle{Les variables}
\begin{block}{Définition}
\begin{itemize}
\item il n'est pas nécessaire de déclarer les variables mais c'est
préférable (cela permet de bien poser les variables utilisées)
\item dès l'utilisation d'une variable, elle est déclarée
\item par défaut, une variable de type scalaire contient la valeur
\textit{undef}
\item on déclare une variable de la manière suivante :
\begin{lstlisting}[language=perl]
my $x;
my $x = 'Hello world';
\end{lstlisting}
\item on peut déclarer plusieurs variables en une seule ligne
\begin{lstlisting}[language=perl]
my ($x,$y);
\end{lstlisting}
\end{itemize}
\end{block}
\begin{alertblock}{Visibilité}
\begin{itemize}
\item une variable est accessible dans le bloc où elle est définie
\item au sein d'un bloc, les variables peuvent être définies où l'on veut
\end{itemize}
\end{alertblock}
\end{frame}
\begin{frame}[fragile]
\frametitle{Les types}
\framesubtitle{Les scalaires}
\begin{block}{Définition}
\begin{itemize}
\item un scalaire est une simple valeur
\item par exemple; les nombres, les chaînes de caractères, \ldots
\end{itemize}
\end{block}
\begin{exampleblock}{Les nombres}
\begin{itemize}
\item les nombres sont représentés en double précision
\item un nombre peut être un entier ou un réel
\item quelques exemples de valeurs possibles :
\begin{itemize}
\item 4294967295
\item 4\_294\_967\_295
\item 0xFFFFFFFF
\item 0xFF\_FF\_FF\_FF
\item 0b1111\_1111\_1111\_1111
\end{itemize}
\item le caractère \_ permet de rendre lisible certaines valeurs et il est
ignoré
\end{itemize}
\end{exampleblock}
\end{frame}
\begin{frame}[fragile]
\frametitle{Les types}
\framesubtitle{Les scalaires}
\begin{block}{Les opérateurs sur les nombres}
\begin{itemize}
\item arithmétique : +, -, * et /
\item exponentiel : **
\item modulo : \%
\item comparaison : <, >, ==, !=, <=, >=
\item logique : not ou !, \&\&, ||
\end{itemize}
\end{block}
\end{frame}
\begin{frame}[fragile]
\frametitle{Les types}
\framesubtitle{Les scalaires}
\begin{block}{Les chaînes de caractères}
\begin{itemize}
\item deux délimiteurs sont possibles : double quote (") et simple quote(')
\item dans le cas de la simple quote : aucune interprétation n'est faite
\item par exemple, \\n est vu comme une chaîne à 2 caractères et non
comme un retour chariot
\item dans le cas de la double quote, les séquences spéciales sont
interprétées
\begin{lstlisting}[language=perl]
"hello ${name}\\n" ou "hello $name\\n"
\end{lstlisting}
\item \$name est remplacé par la valeur de la variable
\end{itemize}
\end{block}
\begin{exampleblock}{Opérateurs}
\begin{itemize}
\item concaténation avec le point
\begin{lstlisting}[language=perl]
'Hello ' . 'World!' # 'Hello World!'
\end{lstlisting}
\item réplication avec x
\begin{lstlisting}[language=perl]
'Hello ' x 3 # 'Hello Hello Hello '
\end{lstlisting}
\end{itemize}
\end{exampleblock}
\end{frame}
\begin{frame}[fragile]
\frametitle{Les types}
\framesubtitle{Les scalaires}
\begin{block}{Les opérateurs de comparaison}
\begin{itemize}
\item les noms des opérateurs est comme en Fortran
\item c'est une comparaison basée sur les codes ASCII
\end{itemize}
\end{block}
\begin{exampleblock}{Liste}
\begin{lstlisting}{language=perl}
'Peter' gt 'Joey' # greater than, TRUE
'Sammy' lt 'Dean' # less than, FALSE
'Frank' eq 'frank' # equals, FALSE
'Frank' ne 'Peter' # not equals, TRUE
'Frank' ge 'Dean' # greater or equal, TRUE
'Frank' le 'Joey' # lesser or equal, TRUE
'2' gt '10' # TRUE
\end{lstlisting}
\end{exampleblock}
\end{frame}
\begin{frame}[fragile]
\frametitle{Les types}
\framesubtitle{Les scalaires}
\begin{block}{Le contexte}
En fonction des opérateurs et des opérandes, un scalaire peut
être vu comme un nombre ou une chaîne de caractères
\end{block}
\begin{exampleblock}{Exemple}
\begin{lstlisting}{language=perl}
"1234 My Way" => 1234
5 + "1234 My Way" => 1239
'$' . (102/5) => '$20.4'
\end{lstlisting}
\end{exampleblock}
\end{frame}
\begin{frame}[fragile]
\frametitle{Les types}
\framesubtitle{Les listes}
\begin{block}{Définition}
\begin{itemize}
\item une liste est un ensemble de scalaires
\item les éléments sont indexés et les indices commencent par 0
\item les paranthèses marquent la définition d'une liste
\begin{lstlisting}{language=perl}
('Lapin', 'Poule', 'Canard')
\end{lstlisting}
\item il est possible de sélectionner une sous-partie de la liste
\begin{lstlisting}{language=perl}
('Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam', 'Dim')[1,5]
('Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam', 'Dim')[-2,-1]
\end{lstlisting}
\end{itemize}
\end{block}
\begin{alertblock}{Liste et fonction}
Certaines fonctions retournent des listes
\begin{lstlisting}{language=perl}
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
($mon, $mday, $year) = (localtime())[4,3,5]
\end{lstlisting}
\end{alertblock}
\end{frame}
\begin{frame}[fragile]
\frametitle{Les types}
\framesubtitle{Les listes}
\begin{block}{Accès aux éléments d'une liste}
\begin{itemize}
\item il faut utiliser \$ pour accéder à un seul élément d'une liste
contenant des scalaires
\begin{lstlisting}{language=perl}
print $fruits[0];
print $fruits[2];
\end{lstlisting}
\item si on veut accèder à plusieurs éléments alors il faut utiliser \@
\begin{lstlisting}{language=perl}
print @fruits[1 .. 3];
\end{lstlisting}
\end{itemize}
\end{block}
\end{frame}
\begin{frame}[fragile]
\frametitle{Les types}
\framesubtitle{Les listes}
\begin{exampleblock}{Affectation}
\begin{itemize}
\item affectation d'une case de la liste
\begin{lstlisting}{language=perl}
$fruits[4] = 'pomme';
$fruits[2] = 'poire';
\end{lstlisting}
\item affectation d'une sous-partie de la liste
\begin{lstlisting}{language=perl}
@array[4, 7 .. 9] = ('quatre', 'sept', 'huit', 'neuf');
\end{lstlisting}
\end{itemize}
\end{exampleblock}
\begin{alertblock}{Permutation}
Permutation des éléments d'une liste (\textit{swap})
\begin{lstlisting}{language=perl}
@array[1, 2] = @array[2, 1];
($x, $y) = ($y, $x);
\end{lstlisting}
\end{alertblock}
\end{frame}
\begin{frame}[fragile]
\frametitle{Les types}
\framesubtitle{Les listes}
\begin{block}{Taille d'une liste}
\begin{itemize}
\item \textit{\$\#array} est l'index du dernier élément de la liste
\textit{\@array}
\item le nombre d'éléments est donc : \textit{\$\#array + 1}
\item de manière plus simple, il suffit d'affecter
la liste à un scalaire : \textit{\$count = \@array;}
\end{itemize}
\end{block}
\end{frame}
\begin{frame}[fragile]
\frametitle{Les types}
\framesubtitle{Les listes}
\begin{exampleblock}{Quelques opérateurs}
\begin{itemize}
\item l'opérateur \textit{shift} supprime le premier élément d'une liste
\begin{lstlisting}{language=perl}
@num = 4 .. 7;
$first = shift @num; # @num is ( 5..7 )
\end{lstlisting}
\item l'opérateur \textit{unshift} ajoute un élément en début de liste
\begin{lstlisting}{language=perl}
unshift @num, $first; # @num is ( 4 .. 7 )
unshift @num, 1 .. 3; # @num is ( 1 .. 7 )
\end{lstlisting}
\item les opérateurs \textit{push} et \textit{pop} permettent de faire la
même chose
\begin{lstlisting}{language=perl}
$last = pop @num; # @num is ( 1 .. 6 )
push @num, $last, 8, 9; # @num is ( 1 .. 9 )
\end{lstlisting}
\end{itemize}
\end{exampleblock}
\end{frame}
\begin{frame}[fragile]
\frametitle{Les types}
\framesubtitle{Les dictionnaires}
\begin{block}{Définition}
\begin{itemize}
\item un dictionnaire est une table associant une clé à une valeur
\item deux syntaxes pour l'initialisation:
\begin{itemize}
\item à l'aide d'une liste
\begin{lstlisting}{language=perl}
%french = ('one', 'un', 'two', 'deux', 'three', 'trois');
\end{lstlisting}
\item à l'aide de l'opérateur \textit{=>}
\begin{lstlisting}{language=perl}
%german = (one => 'ein',
two => 'zwei',
three => 'drei');
\end{lstlisting}
\end{itemize}
\end{itemize}
\end{block}
\begin{exampleblock}{Accès}
Comme pour les listes, l'accès à une valeur utilise le symbole \$
\begin{lstlisting}{language=perl}
$three = $french{three};
\end{lstlisting}
et l'accès à plusieurs valeurs utilise le symbole \@
\begin{lstlisting}{language=perl}
@mots = @french{'one','two','three'};
\end{lstlisting}
\end{exampleblock}
\end{frame}
\begin{frame}[fragile]
\frametitle{Les types}
\framesubtitle{Les dictionnaires}
\begin{block}{Affectation}
On peut affecter :
\begin{itemize}
\item une seule entrée du dictionnaire
\begin{lstlisting}{language=perl}
$french{four} = 'quatre';
$french{five} = 'cinq;
\end{lstlisting}
\item un ensemble d'entrées
\begin{lstlisting}{language=perl}
@french{'six', 'seven'} = ('six', 'sept');
\end{lstlisting}
\item échange d'entrées
\begin{lstlisting}{language=perl}
@hash{'foo', 'bar'} = @hash{'bar', 'foo'};
\end{lstlisting}
\end{itemize}
\end{block}
\end{frame}
\begin{frame}[fragile]
\frametitle{Les types}
\framesubtitle{Les dictionnaires}
\begin{block}{Tests d'existence}
Deux tests possibles :
\begin{itemize}
\item sur les clés
\begin{lstlisting}{language=perl}
$ok = exists $french{'ten'};
\end{lstlisting}
\item sur les valeurs
\begin{lstlisting}{language=perl}
$ok = defined $french{'dix'};
\end{lstlisting}
\end{itemize}
\end{block}
\begin{alertblock}{Attention !}
Si la clé n'existe pas, la variable \$ok n'existe pas.
\end{alertblock}
\end{frame}
\begin{frame}[fragile]
\frametitle{Les types}
\framesubtitle{Les dictionnaires}
\begin{block}{Quelques opérateurs}
\begin{itemize}
\item \textit{keys} : récupére la liste de toutes les clés (dans un ordre
quelconque)
\begin{lstlisting}{language=perl}
@keys = keys %french;
\end{lstlisting}
\item \textit{values} : récupére la liste de toutes les valeurs
\begin{lstlisting}{language=perl}
@values = values %french;
\end{lstlisting}
\item \textit{each} : récupére la prochaine pair (cké, valeur)
\begin{lstlisting}{language=perl}
($key, $value) = each %french;
\end{lstlisting}
\end{itemize}
\end{block}
\end{frame}
\begin{frame}[fragile]
\frametitle{Les variables spéciales}
\begin{block}{Définition}
Les variables spéciales :
\begin{itemize}
\item sont en majuscules ou utilisent des symboles de ponctuation comme nom
\item sont des variables par défaut (par exemple, l'élément parcouru dans
une boucle, la ligne courante lue dans un fichier, \ldots)
\end{itemize}
\end{block}
\begin{exampleblock}{Exemples}
\begin{itemize}
\item \textit{\$\_} est la variable par défaut (ou la variable contenant
la "valeur courante" ; par exemple, l'élément parcouru dans une boucle)
\item \textit{\$.} est le numéro de la ligne courante (lors d'un parcours
d'un fichier)
\item \textit{\$,} est le séparateur de champs pour la fonction print()
\item \textit{@\_} contient les arguments passés au sous-programme en cours
\end{itemize}
\end{exampleblock}
\end{frame}
\begin{frame}[fragile]
\frametitle{Les variables spéciales}
\begin{exampleblock}{Encore des exemples}
\begin{itemize}
\item \textit{@ARGV} contient la liste des paramètres passés sur la
ligne de commande au script en cours d'exécution
\item \textit{\%ENV} ontient l'ensemble des variables d'environnement
définies lorsque le script a été lancé
\end{itemize}
\end{exampleblock}
\end{frame}
\begin{frame}[fragile]
\frametitle{Le contexte}
\begin{alertblock}{Résumé}
\begin{center}
\rowcolors[]{1}{blue!5}{blue!8}
\begin{tabular}{l!{\vrule}cc}
\rowcolor{blue!20}& \textbf{scalaire} & \textbf{liste}\\\hline
\texttt{\$a} & un scalaire & une liste à un élément \\
\texttt{@a} & le nombre d'éléments & un tableau \\
\texttt{\$a[\$n]} & un élément du tableau & une liste à un élément \\
\texttt{@a[@n]} & le dernier élément de la sélection & une sélection du tableau \\
\texttt{\%a} & les stats du dictionnaire & la liste des pairs (clé,valeur) \\
\texttt{\$a{\$n}} & un élément du dictionnaire & une liste à un élément\\
\texttt{@a{@n}} & le dernier élément de la sélection & une sélection du dictionnaire \\
\end{tabular}
\end{center}
\end{alertblock}
\end{frame}