PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

  • Présentation
  • Procédure lambda
  • Exemple
  • Syntaxes
  • Remarques
  • Expression lambda
  • Exemple
  • Syntaxes
  • Remarque
  • Procédure lambda typée
  • Exemple
  • Syntaxe
  • Remarques
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget iOSApple WatchCatalystUniversal Windows 10 AppWindows Mobile
Autres
Procédures stockées
Présentation
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.
Procédure lambda
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

// Remplir un tableau avec les noms de tous les fichiers du répertoire des données
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.
Expression lambda
Une expression lambda est une simplification d'une procédure lambda lorsque le code WLangage à exécuter correspond à :
RENVOYER <Expression>

Exemple

  • Exemple utilisant une procédure lambda :
    // compte les éléments impairs d'un tableau
    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 :
    // compte les éléments impairs d'un tableau
    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".
Procédure lambda typée
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

// Remplir un tableau avec
// les noms de tous les fichiers du répertoire des données
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.
Version minimum requise
  • Version 25
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire