-
Notifications
You must be signed in to change notification settings - Fork 0
/
subroutine.tex
136 lines (116 loc) · 2.97 KB
/
subroutine.tex
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
\section{Les sous-routines}
\begin{frame}[fragile]
\frametitle{Les sous-routines}
\begin{block}{Définition}
\begin{itemize}
\item les sous-routines sont des fonctions
\item elles peuvent être appelées avec ou sans paramètre
\item elles sont définies n'importe où dans un programme
\item elles sont nommées comme les variables
\item le symbole \& est utilisé pour les appels
\item la valeur retournée par la sous-routine est le résultat de la
dernière expression évaluée (il n'y a donc pas de mot-clé spéficique)
\end{itemize}
\end{block}
\begin{exampleblock}{Un exemple}
\begin{lstlisting}[language=perl]
$result = &hello_world; # appel à la sous-routine hello_world
sub hello_world
{
"hello"."world";
}
\end{lstlisting}
\end{exampleblock}
%$
\end{frame}
\begin{frame}[fragile]
\frametitle{Les sous-routines}
\begin{alertblock}{Un autre exemple}
\begin{lstlisting}[language=perl]
sub max
{
if ( $x <= $y )
{
$y;
}
else
{
$x;
}
}
\end{lstlisting}
\end{alertblock}
%$
\begin{block}{\textit{return}}
On peut aussi utiliser \textit{return}
\begin{lstlisting}[language=perl]
sub max
{
return $y if $x <= $y;
$x;
}
\end{lstlisting}
\end{block}
\end{frame}
\begin{frame}[fragile]
\frametitle{Les sous-routines}
\begin{block}{Paramètres}
\begin{itemize}
\item on peut passer des paramètres aux sous-routinex lors de l'appel
\item dans les sous-routines, les paramètres sont accessibles via la
variable spéciale @\_ (une liste)
\item chaque sous-routine a son propre @\_
\end{itemize}
\end{block}
\begin{exampleblock}{Un exemple}
\begin{lstlisting}[language=perl]
$result = &add($x, $y);
sub add
{
($m, $n) = @_;
$m + $n;
}
\end{lstlisting}
\end{exampleblock}
%$
\end{frame}
\begin{frame}[fragile]
\frametitle{Les sous-routines}
\begin{block}{Variables locales}
\begin{itemize}
\item par défaut, toutes les variables sont globales
\item on peut définir des variables locales de deux manières différentes :
\begin{itemize}
\item grâce à une déclaration via \textit{my}
\item grâce à la fonction \textit{local}
\end{itemize}
\item dans le cas de la fonction \textit{local}, s'il existe une variable
globale de même nom qu'une variable locale, la variable globale est cachée
temporairement
\item une variable locale peut être de n'importe quel type
\end{itemize}
\end{block}
\end{frame}
\begin{frame}[fragile]
\frametitle{Les sous-routines}
\begin{exampleblock}{Un exemple avec \textit{local}}
\begin{lstlisting}[language=perl]
sub foo
{
local($x, $y);
($x,$y) = @_;
local ($x, $y) = @_; # on peut assigner lors de la declaration
...
}
\end{lstlisting}
\end{exampleblock}
\begin{alertblock}{Un exemple avec \textit{my}}
\begin{lstlisting}[language=perl]
sub foo
{
my ($x, $y) = @_;
...
}
\end{lstlisting}
\end{alertblock}
\end{frame}