Les fonctions en Julia - partie 2
Suite du tour d’horizon des fonctions en Julia. Je m’intéresse aujourd’hui aux arguments par défaut et aux arguments nommés (souvent appellés keyword arguments).
La fonction suivante possède un argument normal, a
, et un argument par
défaut, b
:
julia> function add(a, b = 10)
a + b
end
Lorsqu’on l’appelle avec deux arguments, elle les additionne:
julia> add(1, 2)
3
Lorsqu’on l’appelle avec un seul argument, la valeur par défaut du second argument est utilisé:
julia> add(1)
11
Tout ça est très classique, sans surprise. Voyons maintenant les arguments nommés:
julia> function add(a, b = 10 ; c = 0)
a + b + c
end
J’ai ici défini la fonction add
avec un argument normal, a
, un argument par
défaut, b
, et un argument nommé, c
. On doit séparer les arguments
nommés par un point-virgule.
Avec une seule valeur, b
vaut 10 et c
vaut 0:
julia> add(1)
11
Avec deux valeurs, b
vaut 2 et c
vaut 0:
julia> add(1, 2)
3
Avec trois valeurs, je suis obligé de nommer c
:
julia> add(1, 2, c = 10)
13
Lorsqu’on a uniquement des arguments nommés, la syntaxe peut paraître étrange, il ne faut pas oublier le point-virgule:
julia> function foo(; bar = "bar", baz = "baz")
"$bar $baz"
end
julia> foo()
"bar baz"
julia> foo(bar = "hello", baz = "world")
"hello world"
Pour finir, on va mettre en exergue une différence de portée entre les
arguments par défaut et les arguments nommés. Soit b
qui vaut 3:
julia> b = 3
3
Dans la fonction foo
suivante je n’ai que des arguments par défaut.
L’argument a
a comme valeur par défaut le contenu de b
. Il s’agit du
contenu du b
précédent, pas celui de l’argument:
julia> foo(a = b, b = 9) = a + b
julia> foo()
12
Maintenant, même chose avec des arguments nommés:
julia> foo(; a = b, b = 9) = a + b
julia> foo()
ERROR: b not defined
Oups ! Les arguments nommés n’ont pas accès au monde extérieur.
À demain.