Définir de nouvelles fonctions dans Scilab se fait au moyen de la construction syntaxique suivante :
function [<nom1>,<nom2>,...]=<nom-de-fonction>(<arg1>,<arg2>,...) <instructions> endfunction
Dans la définition de la fonction on précise bien sûr le nom de la fonction, la liste de ses arguments d'entrée et la liste des arguments de sortie. On notera qu'une fonction peut renvoyer plusieurs valeurs. L'appel d'une fonction se fait de la façon suivante :
<nom-de-fonction>(<expr1>,<expr2>,...)ou encore :
[<v1>,<v2>,...<vp>]=<nom-de-fonction>(<expr1>,<expr2>,...)Dans le premier cas la valeur retourné par la fonction est la première valeur de retour et dans le deuxième cas ce sont les
p
premières valeurs de retour qui sont affectées aux
variables <v1>
, <v2>
,...,<vp>
.
Lors de l'appel de la fonction les expressions fournie en
arguments sont d'abord évaluées et leur valeurs sont passées
a l'environnement d'exécution de la fonction sous les
noms <arg1>
, <arg2>
,.... Les arguments des
fonctions sont donc passés par valeurs quel que soit leur type.
Notons toutefois que, si un argument est un nom de variable,
la variable ne sera pas copiée si dans le corps de la fonction
la variable correspondante n'est jamais modifiée.
L'exécution d'une fonction se termine normalement quand tout le bloc
<instructions>
a été exécuté, mais elle peut aussi se terminer
si l'exécution du corps de la fonction conduit à une instruction
return
. Le retour de la fonction à lieu alors immédiatement
après l'instruction return
. Les variables de retour
<nom1>
,<nom2>
,... ont alors la valeur courante
qu'elles avaient dans l'environnement d'exécution de la fonction.
Comme on l'a vu une fonction admettant variables en entrée et
retournant valeurs en sortie peut être appelée avec moins
d'arguments d'entrée et le nombre de valeurs de retour demandées
peut être inférieur à . Il est possible de contrôler les valeurs
utilisées dans un appel de fonction au moyen de la fonction argn
. .
En effet une ligne d'instruction [lhs,rhs]=argn()
permet
d'obtenir dans les variables lhs
(resp. rhs
) le nombre de valeurs
de retour (resp. d'entrée) utilisées. Cela permet de gérer des
arguments optionnels comme illustré sur l'exemple suivant.
On notera sur cet exemple que l'on peut utiliser la fonction error
pour
produire une erreur Scilab.
Normalement le nombre d'argument d'entrées doit être inférieur ou égal
au nombre d'argument d'entrée de la fonction appelée. Il y a une
exception à cela. Si le dernier argument d'une fonction comportant
arguments d'entrées à pour nom varargin
alors la fonction
peut être appelée avec plus de arguments. Les arguments fournis
à partir du -ième sont stockés dans une liste Scilab de nom
varargin
.
Une fonction Scilab peut utiliser les variables courantes de
l'environnement d'appel mais en lecture seulement. Il est possible
de modifier une variable de l'environnement d'appel que pour un
ensemble particulier de variables dites globales. Les variables
globales doivent être déclarées dans l'environnement initial
au moyen de la fonction global
, et pour être utilisée en
écriture elle doivent aussi être déclarées dans les fonctions
qui peuvent changer leurs valeurs