Fonctions¶
Déclaration¶
Type de retour¶
Spécifié après : ou -> :
fonction double(n: entier): entier
retourne n * 2
fin
fonction aire(r: décimal) -> décimal
retourne 3.14159 * r * r
fin
Paramètres par défaut¶
fonction saluer(nom: texte, salutation: texte = "Bonjour")
afficher(salutation + " " + nom + " !")
fin
saluer("Alice") // Bonjour Alice !
saluer("Bob", "Salut") // Salut Bob !
Retour¶
Le mot-clé retourne renvoie une valeur :
Sans valeur, retourne sort de la fonction (type de retour rien) :
Récursivité¶
Le mot-clé récursif indique qu'une fonction est récursive :
récursif fonction fibonacci(n: entier): entier
si n <= 1 alors
retourne n
sinon
retourne fibonacci(n - 1) + fibonacci(n - 2)
fin
fin
afficher(fibonacci(10)) // 55
Note
L'annotation récursif permet au compilateur d'optimiser les appels terminaux (tail-call optimization).
Fermetures et lambdas¶
Lambda en ligne¶
Fermeture capturant l'environnement¶
fonction créer_compteur(): fonction(): entier
mutable compte = 0
retourne () =>
compte = compte + 1
retourne compte
fin
fin
Pipeline¶
L'opérateur |> passe le résultat de gauche comme premier argument de droite :
soit résultat = [1, -2, 3, -4, 5]
|> filtrer(x => x > 0)
|> transformer(x => x * 2)
|> réduire(0, (acc, x) => acc + x)
Équivalent à :
soit étape1 = filtrer([1, -2, 3, -4, 5], x => x > 0)
soit étape2 = transformer(étape1, x => x * 2)
soit résultat = réduire(0, (acc, x) => acc + x)
Fonctions asynchrones¶
Le mot-clé asynchrone déclare une fonction asynchrone :
asynchrone fonction récupérer_données(url: texte): texte
soit réponse = attends(requête_http(url))
retourne réponse.corps
fin
Le mot-clé attends attend le résultat d'une opération asynchrone.
Fonctions génériques¶
Les fonctions peuvent être paramétrées par des types :