10 - Les fonction (2)

Introduction

Nous avons vu comment déclarer des fonctions simplement à l’aide de la structure ci-dessous:

function nom ( paramètres ){
	Bloc d'instructions
}

Il existe d’autres méthodes pour déclarer des fonctions (fonctions anonymes ou déclaration flêchée).

Nous avons vu aussi qu’une fonction peut prendre des paramètres comme des entiers, des booléens ou des chanes de caractères et renvoyer des données de ces types là.

Nous verrons comment faire en sorte que les fonctions prennent des tableaux en paramètres et comment elles peuvent renvoyer des tableaux comme résultat.

Fonction anonyme

En Javascript, il est possible de stocker une focntion dans une variable de la façon suivante:

let surfaceCercle = function (rayon){
	const PI = 3.1416;
	return PI * rayon**2;
}

Ce qui est absolument identique à:

function surfaceCercle (rayon){
	const PI = 3.1416;
	return PI * rayon**2;
}

Fonction flêchée

On peut aussi définir une fonction de la façon suivante:

let surfaceCercle = rayon => 3.1416 * rayon**2;

Une structure plus générale de la fonction fl^chée serait :

let nomFonction = (param1, param2, ...) => {
  instruction1;
  instruction2;
}

Dans tous les cas, la fonction est appelée de la même façon.

Paramètres par défaut

Si un paramètre est omis lors de l’appel d’une fonction, il aura alors la valeur undefined.

Pour éviter cela, on peut donner une valeur par défaut à certains pparamètres.

function direBonjour(nom="Inconnu.e"){
	document.write("Bonjour " + nom);
}

direBonjour();

Ce programme affichera Bonjour Inconnu.e.

Fonctions variadiques

On appelle une fonction variadique une fonction dont le nombre total de paramètres n’est pas défini d’avance.

En JS, toute fonction peut recevoir plus d’arguments que spécifié, il suffit alors d’accéder aux autres paramètres à l’aide du tableau arguments.

let somme = function(val1, val2){
	let resultat = val1+val2;
	for (let i=2; i < arguments.length; i++) { 
		resultat += arguments[ i ];	
	}
	return resultat;
}

ES6 a introduit une nouvelle syntaxe pour définir des fonctions variadiques en utilisant la notation ellipse ....

let somme = function(val1, val2, ...autres){
	let resultat = val1+val2;
	for (let i=0; i < autres.length; i++) { 
		resultat += autres[ i ];	
	}
	return resultat;
}

Il est préférable d’utiliser cette syntaxe car elle améliore la maintenabilité du code.

En Javascript fonction = données

En JS, une fonction est une donnée qu’on peut affecter…

function surfaceCercle(rayon){
	const PI = 3.1416;
	return PI * rayon**2;
}
let sc = surfaceCercle;
document.write( sc(10) )

On peut même retourner une fonction :

let creerPuissance = function (puissance){
	let resultat =  function(valeur){ 
		return valeur ** puissance; 
	}

	return resultat;
}

carre = creerPuissance(2); 
// Carre est une fonction créée par creerPuissance
document.write( carre(10) );

Et passer une fonction en paramètre…

let calculer = function (valeur1, valeur2, operation){
	let resultat = operation(valeur1, valeur2);

	return resultat;
}

let somme = (v1, v2) => v1 + v2;

document.write( calculer(10, 17, somme) );
Exercices

Faire les exercices 1 à 3

Portée des variables

Une variable définie à l’intérieur d’une fonction n’est pas visible à l’extérieur de la fonction, on parle de variable locale.

Une variable définie à l’extérieur d’une fonction peut être lue et modifiée dans le corps de la fonction, on parle de variable globale.

Tableaux et fonctions

Un tableau en paramètre d’une fonction

Javascript n’étant pas un langage typé, on peut pseer un tableau en paramètre d’une fonction comme on psserait un autre type de variable.

Exemple :

Un tableau comme valeur de retour d’une fonction

De la même façon, un tabeau peut être renvoyé par une fonction.

Exercices

Faire les exercices 4 à 6