O que é esse 'Lambda' que todo mundo vive falando? Muitas pessoas parecem amá-lo, mas tudo o que posso deduzir é que é apenas uma maneira de agrupar muitas linhas de código em uma única expressão.
Alguém pode me esclarecer sobre seu verdadeiro valor?
Respostas:
Funções sem nome
Simplificando, um lambda é uma função sem um nome ou uma função anônima. Um pequeno pedaço de código executável, que pode ser passado como se fosse uma variável. Em JavaScript:
Vamos ver agora alguns usos para esses lambdas.
Abstraindo código clichê
Lambdas podem ser usados para abstrair o código clichê. Por exemplo, loops. Estamos acostumados a escrever
for
e fazerwhile
loops o dia todo. Mas este é um código que não pode ser escrito. Poderíamos extrair o código dentro do loop, a parte mais importante do loop, e abstrair o resto:usando os
forEach
objetos da matriz, torna-se:A abstração acima pode não ser tão útil, mas existem outras funções de ordem superior, como
forEach
, que realizam tarefas muito mais úteis. Por exemplofilter
:Atraso na execução do código
Em alguns ambientes, nos quais o conceito de evento está disponível, podemos usar lambdas para responder a eventos que podem acontecer em algum momento.
Isso poderia ter sido feito de outras maneiras, mas são bastante prolixas. Por exemplo, em Java existe a
Runnable
interface.Fábricas de funções
Até este ponto, usamos lambdas principalmente por seus recursos de açúcar sintático. Mas há situações em que lambdas podem ser muito mais úteis. Por exemplo, podemos ter funções que retornam lambdas. Digamos que temos uma função para a qual queremos que seus valores de retorno sejam armazenados em cache.
Mais tarde, podemos notar que temos uma função semelhante:
Há claramente um padrão ali, então vamos abstraí-lo. Vamos usar memoização .
Como você pode ver, usando lambdas, fomos capazes de abstrair a lógica de cache / memoização. Se no outro exemplo houvesse algumas soluções alternativas, acredito que este problema específico dificilmente será resolvido com outras técnicas. Conseguimos extrair alguns códigos clichê importantes em um único lugar. Sem mencionar que nos livramos das variáveis globais
users
ephotos
.Olhando para o seu perfil, vejo que você é principalmente um usuário Python. Para o padrão acima, Python tem o conceito de decoradores. Existem muitos exemplos na rede para decoradores de memoização . A única diferença é que no Python você provavelmente tem uma função aninhada nomeada dentro dessa função decoradora. A razão é que Python suporta apenas lambdas de expressão única. Mas o conceito é o mesmo.
Como um exemplo de uso de lambda em Python. O código acima, no qual filtramos os números pares, pode ser representado no Python assim:
De qualquer forma, lambdas não são tão poderosos sem fechamentos. Fechamentos é o que torna o conceito de lambdas tão poderoso. Em meu exemplo de memoização, usei fechamentos para criar um fechamento em torno do
store
parâmetro. Dessa forma, tenho acesso a esse parâmetro mesmo depois que amemoize
função retornou seu resultado (um lambda).fonte
O termo "lambda" é usado para se referir a uma função anônima, geralmente um encerramento . Eles são úteis porque permitem que você escreva funções que usam outras funções sem sobrecarregar seu código desnecessariamente. Por exemplo, em Ruby:
Isso criará uma matriz contendo os números pares entre 1 e 100. Não precisamos escrever um loop explícito - o método select usa uma função que usa para testar os valores, então tudo que precisamos é nossa lógica customizada. Isso nos permite personalizar muito o método com praticamente nenhum esforço ou sobrecarga. Basicamente, podemos compor funções a partir de funções menores.
Esse é apenas um exemplo fácil do que eles podem fazer. A capacidade de passar funções como dados é realmente poderosa e os programadores de linguagens funcionais rotineiramente fazem coisas realmente incríveis com ela.
fonte
"Lambda" talvez apenas muito poucos. Dê uma olhada no cálculo Lambda . É útil na programação funcional.
E a programação funcional é outro paradigma de programação (como procedural ou orientado a objetos).
fonte
Lambdas no .NET são freqüentemente chamados de "açúcar sintático". Eles não afetam diretamente a funcionalidade, no entanto, tornam a linguagem mais fácil para as pessoas usarem.
Quando você compreender o poder de usá-los, tenho certeza de que descobrirá que escreverá menos código em comparação com o estilo antigo usando delegados / métodos anônimos.
fonte
O Dr. Dobbs Journal tem um artigo útil que apresenta expressões lambda (dentro do contexto de C ++, mas acho que você pode aplicar os princípios a qualquer linguagem).
Como diz o artigo: "Uma expressão lambda é uma expressão altamente compacta que não requer uma definição de classe / função separada."
Portanto, use os exemplos das listagens 1 e 2 do DDJ em vez de escrever:
O que requer uma definição de classe separada como:
Usando a biblioteca Boost lambda, isso pode se tornar:
O que mantém a definição embutida.
O artigo também explica mais algumas aplicações de expressões lambda.
Acho que um ponto-chave no artigo DDJ é "Normalmente, as expressões lambda são usadas quando funções pequenas e não excessivamente complexas são necessárias no site da chamada. Se a função não fosse trivial, você não iria querer uma expressão lambda, mas uma função normal ou um objeto de função. "
fonte
Se você já trabalhou com funções / métodos que usam ponteiros de função, delegados, estratégia ou manipulação de padrão / evento de observador e pensou "Estou escrevendo esta função inteira apenas para usá-la apenas uma vez - para passá-la para este método ; Eu gostaria de poder escrever no lugar, em vez de bagunçar meu código "- é onde você pode usar funções Lambda. As linguagens que suportam essa construção geralmente também tiram grande vantagem do conceito de passagem de funções como parâmetros, particularmente no que diz respeito ao trabalho com listas (funções de primeira classe e funções de ordem superior). Isso é especialmente verdadeiro para linguagens funcionais, que dependem da composição da função em vez da modificação da memória para cálculos. Em alguns casos (em linguagens como Python),
fonte
'lambda' como palavra é a terminologia da época em que os tipos de ciência da computação eram mais propensos a ser treinados em matemática ou lógica do que a ter um diploma em ciência da computação. Alguns deles elaboraram um paradigma chamado 'programação funcional', bastante diferente do imperativo e bastante poderoso também. AFAIK é o meio onde o termo entrou em uso.
Matemáticos e lógicos costumam usar palavras estranhas.
'lambda' soa realmente esotérico - como se fosse algo muito estranho e especial. Na verdade, se você escreve JavaScript para um aplicativo de navegador da web e usa o idioma "var foo = function () {...}", está usando funções lambda o tempo todo.
fonte
Uma expressão lambda é uma forma simples de função. A ideia é que algo do formulário à esquerda (equivalente a parâmetros) se torne algo do formulário à direita (equivalente ao corpo).
por exemplo, em dó sustenido:
é um lambda para elevar o valor ao quadrado. Algo da forma
torna-se algo na forma
fonte
"Uma expressão lambda é uma função anônima que pode conter expressões e instruções e pode ser usada para criar delegados ou tipos de árvore de expressão.
Todas as expressões lambda usam o operador lambda =>, que é lido como "vai para". O lado esquerdo do operador lambda especifica os parâmetros de entrada (se houver) e o lado direito contém o bloco de expressão ou instrução. A expressão lambda x => x * x é lida "x vai para x vezes x."
do MSDN
fonte
Para uma explicação completa sobre as expressões Lambda, verifique também a Wikipedia . (Role para baixo até o cálculo Lambda e a parte das linguagens de programação .) As expressões lambda não são tão novas e não são apenas parte do C #, mas algo que foi introduzido na computação quase 80 anos atrás! As expressões lambda são a base da programação funcional.
É valor? Bem, considerando que é bastante antigo, eu diria: muito valioso para quem faz cálculos.
fonte
Se você gosta de Java, já ouviu falar muito sobre lambdas ou encerramentos nos últimos dois meses, porque havia diferentes propostas para adicionar esse recurso ao Java 7. No entanto, acho que o comitê o abandonou. Uma das propostas é de Neal Gafter e explicada em detalhes aqui: javac.info . Isso me ajudou a entender os casos de uso e vantagens (especialmente sobre classes internas)
fonte
Você encontrará tudo que precisa saber (sobre C # Lambdas) para começar aqui:
Expressões Lambda
fonte
Para java lambdas, este pode ser um bom ponto de partida:
http://rodrigouchoa.wordpress.com/2014/09/10/java-8-lambda-expressions-tutorial/
fonte
Sim, é apenas uma maneira de agrupar muitas linhas de código em uma única expressão. Mas sendo um amontoado tão eficiente, ele permite algumas novas maneiras de estruturar seu programa.
Freqüentemente, evita-se escrever delegados ou retornos de chamada e reverter para o estilo procedural simplesmente porque dá muito trabalho declarar novas funções ou classes para uma única expressão.
As expressões lambda fazem com que valha a pena usar callbacks mesmo para tarefas mínimas, o que pode deixar o código mais claro. Pode não.
fonte