Logo DartDart - Le nouveau langage du Web

Les fonctions

Syntaxe

En Dart, les fonctions ont une syntaxe de base classique, elle sont composées d'un type de retour, un nom, des paramètres et un corps. Une fonction est aussi un objet, il est donc possible de les manipuler dans des variables ou de les passer en paramètre d'autres fonctions. Le type de retour n'est pas obligatoire, on peut ne pas le spécifier, mais toute fonction renvoit obligatoirement quelque chose, si aucun "return" n'est spécifié, un "return null" implicite est effectué. Le nom respecte les règles de nommage classique. Concernant les paramètres, on peut aussi ne pas spécifier de type, il est aussi possible de positionner des paramètres optionnels, ce point est traité dans la section suivante. Voici un exemple de fonctions simples :

/**
 * Cette fonction additionne deux entier et renvoit le résultat
 */
int ajout(p1, int p2) {
	var res = p1 + p2;
	return res;
}

/**
 * Fonction sans type de retour
 */
hello() {
	return "Bonjour !";
}
		

Il existe aussi une syntaxe sur une seule ligne pour certaines fonctions qu'on appelle des closures. Pour cela il faut que la fonction ne comporte qu'une seule ligne de code. Un exemple ci-dessous :

/**
 * Fonction équivalente à la fonction "ajout" précédente
 */
int ajout(int p1, int p2) => p1 + p2;

/**
 * Affichage du texte en paramètre
 */
affiche(String text) => print(text);

/**
 * Cette fonction renvoit une fonction anonyme
 */
Function additionneur(num n) {
	return (num i) => n + i;
}

// Utilisation de la fonction anonyme
void main() {
	var f = additionneur(10);
	affiche(f(2));
}
		

Cette syntaxe peut être utilisée pour créer une fonction anonyme comme dans le troisième exemple ci-dessus. Une fonction renvoie une fonction anonyme qui permet d'ajouter au nombre passé en paramètre de la première fonction au nombre de la fonction anonyme. Dans cet exemple, il est à noter que la fonction main() est le point d'entrée dans le programme tout comme en Java.

Les paramètres optionnels

Dart autorise l'utilisation de paramètres optionnels. Il en existe deux types, les paramètres optionnels nommés et positionnés. Il est aussi possible de leur donner une valeur par défaut. Cette fonctionnalité existe aussi et permet d'éviter la surchage de fonction / méthode. Il faut noter que seul les paramètres optionnels peuvent avoir une valeur par défaut. De plus, pour tester si un argument optionnel a une valeur, on utilise l'opérateur ? (if (?param) ...).

Les paramètres nommés

Les paramètres optionnels nommés sont placés entre accolades ({ }) lors de la déclaration de la fonction. Pour les utiliser, il suffit de préciser leur nom lors de l'appel de la fonction. Voici un exemple de fonction avec un appel :

fonction1(p1, {op1 : "Texte", int op2}) {
	print("p1 = $p1, op1 = $op1, op2 = $op2");
}

main() {
	fonction1(1);
	fonction1(1, op1 : "Autre", op2 : 56);
}
		

Ce code affiche les lignes suivantes :


p1 = 1, op1 = Texte, op2 = null
p1 = 1, op1 = Autre, op2 = 56
		

La fonction possède deux paramètres optionnels, le premier, op1, a une valeur par défaut, "Text", le deuxième, op2, est un simple entier sans valeur par défaut et p1 est un paramètre obligatoire. Elle affiche simplement la valeur de chaque paramètre. Lors du premier appel, seul le paramètre obligatoire est renseigné, op1 prend sa valeur par défaut et op2 vaut null. Dans le deuxième appel, tous les arguments sont donnés, la fonction affiche bien les valeurs passées.

Les paramètres positionnés

Les paramètres de position sont déclarés entre crochets ([ ]) à la déclaration de la fonction. L'utilisation est plus simple que pour les paramètres optionnels nommés, en effet, il n'y a pas besoin de spécifier le nom lors de l'appel, il suffit de placer les arguments dans le même ordre qu'à la déclaration. Cependant, ces paramètres doivent être placés à la fin, après les paramètres obligatoires.

fonction2(String p1, int p2, [String op1 = "defaut"]) {
	print("p1 = $p1, p2 = $p2, op1 = $op1");
}

main() {
	fonction2("Param1", 35);
	fonction2("Param1", 35, "Option");
}

// Résultat :
// p1 = Param1, p2 = 35, op1 = defaut
// p1 = Param1, p2 = 35, op1 = Option