|
|
|
|
|
- Présentation
- Procédure lambda
- Exemple
- Syntaxes
- Remarques
- Expression lambda
- Exemple
- Syntaxes
- Remarque
- Procédure lambda typée
- Exemple
- Syntaxe
- Remarques
Lambda : Expressions et procédures
Une lambda ("lambda fonction") est une écriture plus concise des procédures internes. Les lambdas sont utiles pour toutes les fonctions qui prennent des procédures de type "callback" en paramètre : il est ainsi possible de saisir directement le code de la fonction à la place du paramètre. Dans ce cas : - la procédure n'a pas de nom,
- à l'endroit où l'on devrait trouver le nom de la procédure, on trouve directement le code de la procédure.
Le WLangage propose plusieurs syntaxes pour utiliser des lambdas. Une procédure lambda est une procédure interne anonyme, pour laquelle les paramètres et la valeur de retour n'ont pas besoin d'être typés. Exemple
tabFichier est un tableau de chaînes
fListeFichier(fRepDonnées() + "\*.*", (Répertoire,Fichier)=>{tabFichier.Ajoute(Fichier)} )
Dans ce code, la procédure lambda correspond au code suivant : (Répertoire,Fichier)=>{tabFichier.Ajoute(Fichier)} Syntaxes - Procédure lambda n'attendant aucun paramètre :
() => { <Code WLangage de la procédure>} - Procédure lambda attendant un seul paramètre :
- syntaxe complète :
(<Paramètre 1>) => { <Code WLangage de la procédure>} - syntaxe simplifiée :
<Paramètre 1> => { <Code WLangage de la procédure>}
- Procédure lambda attendant plusieurs paramètres :
(<Paramètre 1>, ..., <Paramètre N>) => { <Code WLangage de la procédure>}
Dans ces syntaxes : - <Paramètre X> correspond au nom du paramètre.
- <Code WLangage de la procédure> correspond au code WLangage de la procédure. Il est délimité par les signes { et }. Il est possible d'utiliser plusieurs instructions
Remarques - Cette syntaxe peut être utilisée sur les fonctions du WLangage (fListeFichier, ...) mais aussi sur les procédures du projet. Pour cela, le paramètre formel auquel la procédure lambda est passée doit être de type "Procédure".
- La procédure est anonyme, elle n'a donc pas de nom et ne peut pas être appelée ailleurs ou récursivement.
- Une procédure lambda n'a pas besoin de récupérer tous les paramètres :
- les paramètres inutilisés ne provoquent pas de warning à la compilation,
- les paramètres omis à la fin du prototype ne provoquent pas d'erreur à l'exécution.
Une expression lambda est une simplification d'une procédure lambda lorsque le code WLangage à exécuter correspond à : Exemple - Exemple utilisant une procédure lambda :
tabValeur est un tableau d'entiers = [1,2,3,4,5]
Trace(CompteValeurs(tabValeur, x=>{RENVOYER modulo(x,2)=1}))
PROCÉDURE CompteValeurs(tabValeur est un tableau d'entiers,
Condition est une procédure(x entier):booléen)
soit n = 0
POUR TOUT x DE tabValeur
SI Condition(x) ALORS
n++
FIN
FIN
RENVOYER n
- Simplification en expression lambda :
tabValeur est un tableau d'entiers = [1,2,3,4,5]
Trace(CompteValeurs(tabValeur, x=>modulo(x,2)=1))
PROCÉDURE CompteValeurs(tabValeur est un tableau d'entiers,
Condition est une procédure(x entier):booléen)
soit n = 0
POUR TOUT x DE tabValeur
SI Condition(x) ALORS
n++
FIN
FIN
RENVOYER n
Syntaxes - Expression lambda n'attendant aucun paramètre :
() => <Expression WLangage> - Expression lambda attendant un seul paramètre :
- syntaxe complète :
(<Paramètre 1>) => <Expression WLangage> - syntaxe simplifiée :
<Paramètre 1> => <Expression WLangage>
- Expression lambda attendant plusieurs paramètres :
(<Paramètre 1>, ..., <Paramètre N) => <Expression WLangage>
Dans ces syntaxes : - <Paramètre X> correspond au nom du paramètre.
- <Expression WLangage> correspond à l'expression WLangage à renvoyer.
Remarque Cette syntaxe peut être utilisée sur les fonctions du WLangage ( fListeFichier, ...) mais aussi sur les procédures du projet. Pour cela, le paramètre formel auquel l'expression lambda est passée doit être de type "Procédure". Une procédure lambda typée est une procédure interne anonyme, pour laquelle les paramètres et la valeur de retour peuvent être typés. Exemple
tabFichier est un tableau de chaînes
fListeFichier(fRepDonnées() + "\*.*", ...
PROCÉDURE(Répertoire est une chaîne, Fichier est une chaîne):chaîne {tabFichier.Ajoute(Fichier)})
Syntaxe PROCEDURE (<Paramètre 1>, ..., <Paramètre N>) : <Type de retour> { <Code WLangage de la procédure>} Dans cette syntaxe : - <Paramètre X> correspond au nom du ou des paramètres de la procédure lambda. Ce paramètre peut être typé ou non. Si un paramètre est typé, sa syntaxe est
<Identifiant> [est] <Type> - <Type de retour> correspond au type renvoyé par la procédure lambda.
- <Code WLangage de la procédure> correspond au code WLangage de la procédure. Il est délimité par les signes { et }.
Remarques - Cette syntaxe peut être utilisée sur les fonctions du WLangage (fListeFichier, ...) mais aussi sur les procédures du projet. Pour cela, le paramètre formel auquel la procédure lambda est passée doit être de type "Procédure".
- La procédure est anonyme, elle n'a donc pas de nom et ne peut pas être appelée ailleurs ou récursivement.
- Une procédure lambda n'a pas besoin de récupérer tous les paramètres :
- les paramètres inutilisés ne provoquent pas de warning à la compilation,
- les paramètres omis à la fin du prototype ne provoquent pas d'erreur à l'exécution.
Documentation également disponible pour…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|