====== Fonctions ======
===== Déclaration =====
Exemple la déclaration d'une fonction qui renvoie la somme des entiers plus petits que ''n'',
en Python
def somme(n):
total = 0
for i in range(n):
total += i
return total
et en JS
function somme(n) {
let total = 0;
for (let i = 1; i < n; i++) {
total += i;
}
return total;
}
Vous constater que ce n'est pas très différent.
===== let et var =====
Dans beaucoup de langages, comme en Python, les variables définies dans une fonction n'existent que le temps de la fonction.
def f(x):
y = 5
return x + y
a = f(60)
print(y) # Erreur, y n'existe plus !
function f(x){
var y = 5;
return x + y;
}
var a = f(60);
console.log(y) // Erreur, y n'existe plus !
En JS, une variable définie par ''var'' existe le temps du bloc de la fonction dans la quelle la variable est définie.
Mais en JS -- comme par exemple en [[nsi:langages:lua:start|Lua]] -- on dispose du mot-clé ''let'' qui permet de faire encore plus fin : une variable déclarée par ''let'' n'existe que le temps du bloc où elle est définie.
{
let x = 3;
console.log(x); // x existe
}
console.log(x); // x n'existe plus !
Dans cet exemple, ''x'' est défini à l'intérieur d'un bloc délimité par ''%%{ }%%''. Dès que l'on sort de ce bloc, ''x'' n'existe plus.
===== Fonction anonyme =====
En JS, comme d'ailleurs en Python, une fonction est une donnée -- une donnée un peu spécial mais une donnée tout de même.
Les deux définitions sont équivalentes :
function somme(n) {
let total = 0;
for (let i = 1; i < n; i++) {
total += i;
}
return total;
}
let somme = function(n) {
let total = 0;
for (let i = 1; i < n; i++) {
total += i;
}
return total;
}
Dans le cas de droite, on utilise le mot clé ''function'' pour définir une fonction mais on ne lui associe pas de nom. On appelle cela une fonction **anonyme**. On peut néanmoins stocker cette fonction dans une variable, par exemple ''somme'', ce qui revient au même.
Quand on définit les fonctions normalement, elles sont définies globalement. Elles sont visibles de tout le programme. Cela peut-être gênant dans un gros programme. Parfois, on souhaite définir une fonction qui n'existerait que le temps d'un besoin local. En définissant la fonction comme à droite, la fonction est associée à la variable ''somme'' qui n'existe que localement. Ainsi, dès que la variable ''somme'' n'est plus utilisée, la fonction qu'elle contenait disparaît.