Verified Commit 6916999d authored by Quentin Duchemin's avatar Quentin Duchemin
Browse files

Précisions fonctions, exemple code de retour, convention code de retour

parent 8a38dda4
......@@ -9,7 +9,7 @@
\medskip
\begin{alertblock}{Définition}
Une fonction, c’est un ensemble d’instructions, permettant d'effectuer une tâche spécifique, en fonction de paramètres d'entrée.
Une fonction, c’est un ensemble d’instructions réutilisable permettant d'effectuer une tâche spécifique. Les fonctions peuvent prendre des \textbf{paramètres} en entrée, ce qui leur permet d'être \textbf{dynamiques}.
\end{alertblock}
\end{frame}
......@@ -17,18 +17,20 @@
\begin{frame}[fragile]{Déclarer une fonction}
Pour déclarer une fonction, on peut utiliser deux syntaxes différentes :
\medskip
\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
\begin{Verbatim}
ma_fonction ()
ma_fonction()
\{
instructions
instructions
\}
//OU
# OU
function ma_fonction
\{
instructions
instructions
\}
\end{Verbatim}
\end{beamercolorbox}
......@@ -42,12 +44,12 @@ function ma_fonction
\begin{block}{Paramètres}
Une fonction se comporte comme un mini script local. On peut lui passer des paramètres et les récupérer avec la même syntaxe que pour le programme principal.
\end{block}
Le script ci-dessous affichera \enquote{toto}
Exemple : le script ci-dessous affichera \enquote{toto} :
\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
\begin{Verbatim}
afficheParam ()
afficheParam()
\{
echo $1
echo $1
\}
afficheParam toto
......@@ -62,15 +64,14 @@ afficheParam toto
Par défaut, toutes les variables ont une portée \textbf{globale}, c'est à dire qu'elles sont accessibles depuis n'importe quelle partie du script.
\end{block}
\begin{block}{Portée locale}
Pour faciliter le déboggage et la lisibilité d'un programme, il est conseillé d'utiliser le moins possible des variables globales.
On essaiera donc d'utiliser le plus possibles des variables \textbf{locales} à l'intérieur de nos fonction.
Pour faciliter le déboggage et la lisibilité d'un programme, il est conseillé d'utiliser le plus possibles de variables \textbf{locales} à l'intérieur de nos fonctions, grâce au mot-clé \texttt{local}.
\end{block}
\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
\vspace{-10pt}
\begin{Verbatim}
ma_fonction ()
ma_fonction()
\{
local var_locale=``C'est une variable locale''
local var_locale="C'est une variable locale"
\}
ma_fonction
......@@ -84,24 +85,43 @@ echo $var_locale
\begin{frame}[fragile]{Retour de fonctions}
\begin{block}{Contexte}
En bash, on ne peut pas comme dans la plupart des autres langages renvoyer n'importe quoi depuis une fonction via un \texttt{return}.
En Bash, on ne peut pas comme dans la plupart des autres langages renvoyer n'importe quoi depuis une fonction via un \texttt{return}.
Cette directive ne permet en effet de renvoyer que des entiers (en général des codes d'erreur).
\end{block}
\begin{block}{Comment faire ?}
Pour utiliser des valeurs de retour dans une fonction, on utilisera alors de la substitution de commande.
Rappelez vous, c'est la syntaxe avec les backquotes qui permet de signaler que le contenu est une commande !
Pour récupérer la sortie d'une fonction, ou d'un programme, on utilisera la \textbf{substitution} de commande.
Rappelez vous, c'est la syntaxe avec les backquotes qui permet de capturer la sortie d'une commande dans une variable !
En revanche, pour récupérer la valeur de retour d'une fonction, ou d'un programme, on utilisera la variable spéciale \verb+$?+.
\end{block}
\end{frame}
\begin{frame}[fragile]{Retour de fonctions}
\framesubtitle{Exemple}
\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
\vspace{-10pt}
\begin{Verbatim}
#!/bin/bash
fonction ()
fonction()
\{
echo 'Salut !'
echo 'Salut !'
return 0
\}
var=`fonction`
echo $?
echo $var
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\medskip
L'exécution affichera le résultat suivant. Comprenez-vous pourquoi ?
\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
\begin{Verbatim}
0
Salut !
\end{Verbatim}
\end{beamercolorbox}
\begin{alertblock}{Valeur du code de retour}
Par convention, un code de retour de $0$ indique le \textbf{succès} de la fonction ou du programme. C'est notamment ce qui est utilisé par Bash pour vérifier qu'une commande a réussi.
\end{alertblock}
\end{frame}
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment