
Les fonctions
Vous êtes ici : Accueil / Cours / Cours de Javascript / Débuter en Javascript
Qu’est-ce qu’une fonction ?
Une fonction est un ensemble d’instructions qui, pour des paramètres donnés, retournera une valeur. Le principe de fonction en informatique est assez proche de celui d’une fonction mathématique.
La syntaxe d’une fonction en Javascript est la suivante :
// Corps de la fonction
return ma_valeur;
}
Prenons un exemple :
return m + n;
}
// Affichera 6
alert( somme( 2, 4 ) );
Une autre syntaxe de définition de fonction est :
// Corps de la fonction
return ma_valeur;
}
Cette seconde syntaxe sera très utilisée en programmation orientée objet.
Quelques définitions
L’ensemble function somme( m, n ) s’appelle signature de la fonction.
Le code entre les accolades est le corps de la fonction.
m et n sont les paramètres formels de la fonction.
La dernière ligne de code est un appel à la fonction.
2 et 4 sont les paramètres réels de la fonction.
L’arité est le nombre de paramètres formels d’une fonction.
Paramètres d’une fonction
Il est théoriquement possible de définir autant de paramètres que l’on veut. D’après mes tests sur Internet Explorer, son nombre maximum de paramètres est 32767.
Il n’est pas nécessaire que le nombre de paramètres formels et le nombre de paramètres réels soit le même : Si le nombre de paramètres réels est inférieur, les autres paramètres formels prennent la valeur null. Si le nombre de paramètres réels est supérieur, les derniers paramètres ne seront pas pris en compte.
Les paramètres formels d’une fonction ainsi que toute variable déclarée à l’intérieur d’une fonction ne sont pas accessibles en dehors de son corps. Ainsi, le code suivant retournera une erreur :
var b = 6;
}
test( 3 );
alert( a );
alert( b );
La variable arguments contient un tableau des paramètres réels. Il permet de gérer les fonctions dont on ne connaît pas le nombre de paramètres. Nous n’avons pas encore vu les tableaux. Acceptez donc cette syntaxe pour l’instant et revenez dessus après les avoir étudiés.
Voyons un exemple d’une meilleure implémentation de la fonction somme :
var retour = 0;
// Aditionne tous les arguments
for( var i=0; i<arguments.length; i++ ) {
retour += arguments[i];
}
return retour;
}
alert( somme( 2, 6, 4 ) );
La fonction précédente peut maintenant aditionner autant de valeur que nous voulons.
Récursivité
Le corps d’une fonction pouvant contenir n’importe quelle instruction, il peut non seulement contenir des appels à d’autres fonction, mais également à lui même. L’appel d’une fonction par elle-même s’appelle la récursivité.
Exemple : Une définition récurrente de la factorielle.
return n == 0 ? 1 : n * factorielle( n - 1 );
}
Vous avez reconnu ici l’opérateur ternaire condition ? si oui : si non.
Attention ! il est absolument nécessaire de s’assurer une condition de sortie, sinon, la fonction va s’appeler en boucle jusqu’à ce qu’il n’y aie plus de place dans la pile. Vous aurez alors une erreur de type stack overflow.
La plupart des erreurs de récursivités provient des fonction qui s’appellent par l’intermédiaire d’une autre fonction. Voici un exemple de récursivité n’ayant pas de condition de sortie :
return !est_superieur( a, b );
}
function est_superieur( a, b ) {
return !est_inferieur( a, b );
}
alert( est_inferieur( 3, 6 ) );
Il est possible de connaître la fonction appelante grâce la propriété caller. La notion de propriété est liée aux objets. Nous admettrons cette syntaxe pour l’instant et celle-ci sera justifiée ensuite lors de notre étude des objets.
La propriété caller retourne la fonction qui l’a appelée. Si la fonction n’a pas été appelée par une autre fonction, mais par un bloc d’instructions du fichier javascript directement, caller vaudra null :
alert( enfant.caller );
}
function parent() {
enfant();
alert( parent.caller );
}
parent();
Le code précédent va afficher successivement la source de la fonction parent() et null.
Il est possible de créer une fonction qui affichera le chemin emprunté pour accéder à une fonction. La fonction suivante existe dans beaucoup de langages est est très utilisée pour le débuggage :
// Se positionner sur la fonction printStackTrace
var o = print_stack_trace;
// Tant que la fonction est appelée par une autre fonction
while( o.caller ) {
// Afficher la fonction appelante
alert( o.caller );
// Se positionner sur la fonction appelante
o = o.caller;
}
}



