De quoi parle-t-on sans cesse de «Lambda»? Beaucoup de gens semblent l'adorer, mais tout ce que je peux en déduire, c'est que c'est juste une façon de regrouper beaucoup de lignes de code dans une seule expression.
Quelqu'un peut-il s'il vous plaît m'éclairer sur sa vraie valeur?
Réponses:
Fonctions sans nom
En termes simples, un lambda est une fonction sans nom ou une fonction anonyme. Un petit morceau de code exécutable, qui peut être transmis comme s'il s'agissait d'une variable. En JavaScript:
Voyons maintenant quelques utilisations de ces lambdas.
Résumé du code passe-partout
Les lambdas peuvent être utilisés pour extraire le code standard. Par exemple des boucles. Nous avons l'habitude d'écrire
for
et dewhile
boucler toute la journée. Mais c'est du code qui ne s'écrit pas. Nous pourrions extraire le code à l'intérieur de la boucle, la partie la plus importante de la boucle, et faire abstraction du reste:en utilisant les
forEach
objets de tableau, devient:L'abstraction ci-dessus n'est peut-être pas très utile, mais il existe d'autres fonctions d'ordre supérieur, comme
forEach
, qui effectuent des tâches beaucoup plus utiles. Par exemplefilter
:Délai d'exécution du code
Dans certains environnements, dans lesquels le concept d'événement est disponible, nous pourrions utiliser des lambdas pour répondre aux événements qui peuvent se produire à un moment donné.
Cela aurait pu être fait d'autres manières, mais celles-ci sont plutôt verbeuses. Par exemple, en Java, il y a l'
Runnable
interface.Usines de fonctions
Jusqu'à ce point, nous n'utilisions que des lambdas pour ses capacités de sucre syntaxique principalement. Mais il y a des situations où les lambdas peuvent être beaucoup plus utiles. Par exemple, nous pouvons avoir des fonctions qui renvoient des lambdas. Disons que nous avons une fonction dont nous voulons que ses valeurs de retour soient mises en cache.
Plus tard, nous pouvons remarquer que nous avons une fonction similaire:
Il y a clairement un modèle là-dedans, alors abstenons-le. Utilisons la mémorisation .
Comme vous pouvez le voir, en utilisant des lambdas, nous avons pu faire abstraction de la logique de mise en cache / mémorisation. Si pour l'autre exemple il y avait des solutions de contournement, je pense que ce problème particulier est difficilement résolu par d'autres techniques. Nous avons réussi à extraire un code passe-partout important en un seul endroit. Sans oublier que nous nous sommes débarrassés des variables globales
users
etphotos
.En regardant votre profil, je vois que vous êtes principalement un utilisateur de Python. Pour le modèle ci-dessus, Python a le concept de décorateurs. Il existe de nombreux exemples sur le net pour les décorateurs de mémorisation . La seule différence est qu'en Python, vous avez très probablement une fonction imbriquée nommée à l' intérieur de cette fonction de décorateur. La raison étant que Python ne prend en charge que les lambdas à expression unique. Mais le concept est le même.
Comme exemple d'utilisation de Python lambda. Le code ci-dessus dans lequel nous avons filtré les nombres pairs peut être représenté en Python comme ceci:
Quoi qu'il en soit, les lambdas ne sont pas si puissants sans fermetures. Les fermetures sont ce qui rend le concept de lambdas si puissant. Dans mon exemple de mémorisation, j'ai utilisé des fermetures pour créer une fermeture autour du
store
paramètre. De cette façon, j'ai accès à ce paramètre même après que lamemoize
fonction a renvoyé son résultat (un lambda).la source
Le terme «lambda» est utilisé pour désigner une fonction anonyme, généralement une fermeture . Ils sont utiles car ils vous permettent d'écrire des fonctions qui utilisent d'autres fonctions sans gonfler inutilement votre code. Par exemple, dans Ruby:
Cela créera un tableau contenant les nombres pairs entre 1 et 100. Nous n'avons pas besoin d'écrire une boucle explicite - la méthode select prend une fonction qu'elle utilise pour tester les valeurs, donc tout ce dont nous avons besoin est notre logique personnalisée. Cela nous permet de personnaliser considérablement la méthode sans pratiquement aucun effort ni surcharge. Fondamentalement, nous pouvons composer des fonctions à partir de fonctions plus petites.
Ce n'est qu'un exemple simple de ce qu'ils peuvent faire. La capacité de passer des fonctions en tant que données est vraiment puissante et les programmeurs de langage fonctionnels font régulièrement des choses vraiment étonnantes avec.
la source
"Lambda" peut-être juste trop peu. Jetez un œil au calcul Lambda . C'est utile dans la programmation fonctionnelle.
Et la programmation fonctionnelle est encore un autre paradigme de programmation (comme procédural ou orienté objet).
la source
Les lambdas dans .NET sont souvent appelés «sucre syntaxique». Ils n'affectent pas directement la fonctionnalité, mais ils facilitent l'utilisation de la langue par les gens.
Lorsque vous aurez compris la puissance de leur utilisation, je suis sûr que vous constaterez que vous allez écrire moins de code par rapport à l'ancienne méthode utilisant des délégués / méthodes anonymes.
la source
Le Dr Dobbs Journal a un article utile présentant les expressions lambda (dans le contexte du C ++ mais je pense que vous pouvez appliquer les principes à n'importe quel langage).
Comme le dit l'article: "Une expression lambda est une expression très compacte qui ne nécessite pas de définition de classe / fonction distincte."
Donc, en utilisant les exemples des listes 1 et 2 de DDJ au lieu d'écrire:
Ce qui nécessite une définition de classe distincte comme:
En utilisant la bibliothèque Lambda Boost, cela peut devenir:
Ce qui maintient la définition en ligne.
L'article explique également d'autres applications des expressions lambda.
Je pense qu'un point clé de l'article DDJ est "En règle générale, les expressions lambda sont utilisées lorsque des fonctions petites et pas trop complexes sont nécessaires sur le site d'appel. Si la fonction n'était pas triviale, vous ne voudriez pas d'une expression lambda mais d'une fonction normale ou un objet de fonction. "
la source
Si vous avez déjà travaillé avec des fonctions / méthodes qui utilisent des pointeurs de fonction, des délégués, une stratégie ou une gestion des modèles / événements d'observateur et que vous vous êtes dit "J'écris toute cette fonction juste pour l'utiliser une seule fois - pour la transmettre à cette méthode ; J'aimerais pouvoir simplement l'écrire sur place, plutôt que d'encombrer mon code "- c'est là que vous pourriez utiliser les fonctions Lambda. Les langages qui prennent en charge cette construction tirent également largement parti du concept de passage de fonctions en tant que paramètres, en particulier en ce qui concerne le travail avec des listes (fonctions de première classe et fonctions d'ordre supérieur). Cela est particulièrement vrai pour les langages fonctionnels, qui reposent sur la composition de fonctions plutôt que sur la modification de la mémoire pour les calculs. Dans certains cas (dans des langages tels que Python),
la source
«lambda» en tant que mot est la terminologie de l'époque où les informaticiens étaient aussi susceptibles d'être formés en mathématiques ou en logique que d'avoir un diplôme en informatique. Certains d'entre eux ont élaboré un paradigme appelé «programmation fonctionnelle», assez différent de l'impératif et assez puissant aussi. Autant que je sache c'est le milieu où le terme est entré en usage.
Les mathématiciens et les logiciens sont habitués à utiliser des mots étranges.
«lambda» semble vraiment ésotérique - comme s'il s'agissait d'une chose très étrange et spéciale. Vraiment, si vous écrivez du JavaScript pour une application de navigateur Web et que vous utilisez l'idiome "var foo = function () {...}", vous avez toujours utilisé les fonctions lambda.
la source
Une expression lambda est une forme simple de fonction. L'idée est que quelque chose de la forme à gauche (équivalent aux paramètres) devient quelque chose de la forme à droite (équivalent au corps).
par exemple, en c sharp:
est un lambda pour mettre au carré une valeur. Quelque chose de la forme
devient quelque chose de la forme
la source
"Une expression lambda est une fonction anonyme qui peut contenir des expressions et des instructions, et peut être utilisée pour créer des délégués ou des types d'arborescence d'expression.
Toutes les expressions lambda utilisent l'opérateur lambda =>, qui est lu comme "va à". Le côté gauche de l'opérateur lambda spécifie les paramètres d'entrée (le cas échéant) et le côté droit contient l'expression ou le bloc d'instructions. L'expression lambda x => x * x est lue «x va à x fois x».
depuis MSDN
la source
Pour une explication complète des expressions Lambda, consultez également Wikipedia . (Faites défiler jusqu'à la partie Calcul Lambda et langages de programmation .) Les expressions Lambda ne sont pas si nouvelles et elles ne font pas seulement partie de C #, mais quelque chose qui a été introduit dans l'informatique il y a près de 80 ans! Les expressions Lambda sont la base de la programmation fonctionnelle.
Sa valeur? Eh bien, étant donné qu'il est en fait assez ancien, je dirais: très utile pour quiconque fait des calculs.
la source
Si vous aimez Java, vous avez beaucoup entendu parler de lambdas ou de fermetures au cours des deux derniers mois, car il y avait différentes propositions pour ajouter cette fonctionnalité à Java 7. Cependant, je pense que le comité l'a abandonnée. L'une des propositions vient de Neal Gafter et est expliquée en détail ici: javac.info . Cela m'a aidé à comprendre les cas d'utilisation et les avantages (en particulier par rapport aux classes internes)
la source
Vous trouverez tout ce que vous devez savoir (sur C # Lambdas) pour commencer ici:
Expressions Lambda
la source
Pour java lambdas, cela pourrait être un bon point de départ:
http://rodrigouchoa.wordpress.com/2014/09/10/java-8-lambda-expressions-tutorial/
la source
Oui, c'est juste un moyen de regrouper beaucoup de lignes de code dans une seule expression. Mais étant un bourrage aussi efficace, il permet de nouvelles façons de structurer votre programme.
Souvent, on éviterait d'écrire des délégués ou des rappels et reviendrait au style procédural simplement parce que déclarer de nouvelles fonctions ou classes pour une seule expression représente trop de travail.
Les expressions Lambda valent la peine d'utiliser des rappels, même pour les tâches les plus infimes, ce qui peut rendre le code plus clair. Peut-être pas.
la source