none
Delegates e Expressão Lâmbda RRS feed

  • Pergunta

  • Olá,

    Preciso saber para que servem os delegates e a expressão lâmbada, qual a relação entre eles, qual sua utilidade e maior utilização, se possível com exemplos mais simples, sem muitos termos técnicos.

    terça-feira, 3 de julho de 2012 20:03

Respostas

  • um exemplo de uma consulta Lâmbda

    Contatos.Any(c => c.Id == contato.Id);

    Muito mais prático do que usar a LINQ, que por sua vez é mais prático que fazer lógica com o for each, etc.

    no exemplo verifico se existe o contato na lista.

    • Marcado como Resposta Camila_cd quarta-feira, 4 de julho de 2012 19:47
    quarta-feira, 4 de julho de 2012 14:11
  • Como o Felipe mostrou, o lambda é usado muitoo junto com Linq.

                var listaDeInteiros = new List<int> {1, 2, 3, 4, 5, 6, 7, 8, 9};
    
                var valoresMaioresQueCinco = listaDeInteiros.Where(valor => valor > 5);
    
    o que estou passando como parâmetro para o método Where é uma expressão lambda(valor => valor > 5).


    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    • Marcado como Resposta Camila_cd quarta-feira, 4 de julho de 2012 19:47
    quarta-feira, 4 de julho de 2012 14:19
  • Camila,

    É bem comum sim, mas depende de que tipo de aplicação você programa.

    Você deve saber, conhecer e entender esses recursos.

    Você no momento e cenário certo, tendo conhecimento deles, saberá quando usar.

    Sugiro que monte mini laboratórios para aprimorar sua prática, uma hora vai ficar claro como e quando utilizar cada um.


    É possível sim! Ponha isso na sua cabeça. É possível. "Steve Jobs"

    Eduardo Pires
    www.eduardopires.net.br

           

    • Marcado como Resposta Camila_cd quarta-feira, 4 de julho de 2012 19:47
    quarta-feira, 4 de julho de 2012 18:02
  • Camila,

    Vou tentar ajudar, mal não faz :p

    Eu tenho a expressão lambda como uma cláusula where,

    provavelmente ela é muito mais que isso, mas como também sou iniciante, talvez entenda sua dificuldade.

    Eu utilizo por exemplo para a busca de informações no meu banco, que é ligado ao Entidade Fremework, ficando assim:

    objExemplo = objExemploDao.Find(c => c.codigo == codigoExemplo && c.nome == nomeExemplo);
    

    Ou seja, a expressão lambda está "filtrando" a minha busca na tabela "Exemplo". É como se eu associasse a tabela que eu quizer à uma condição feita em lambda.

    Se eu estiver errado me corrijam, também sou leigo. :p

    Abraço.


    Pedro Henrique Peres

    • Marcado como Resposta Camila_cd quarta-feira, 4 de julho de 2012 22:25
    quarta-feira, 4 de julho de 2012 19:58
  • Eduardo,

    Obrigada, vou fazer o exercício, é que muitas vezes mesmo fazendo, fica difícil entender.

    É assim mesmo, é por isso que nossa profissão é valorizada, não é fácil mandar tudo isso para dentro...

    Foque nos exercicios e estudos, não se desespere com possíveis dúvidas, aprenda com foco e no seu ritmo, com o tempo as coisas irão ficando mais claras, esse é o caminho...


    É possível sim! Ponha isso na sua cabeça. É possível. "Steve Jobs"

    Eduardo Pires
    www.eduardopires.net.br

           

    • Marcado como Resposta Camila_cd quarta-feira, 4 de julho de 2012 22:24
    quarta-feira, 4 de julho de 2012 20:11

Todas as Respostas

  • Leonardo boa noite,

    Eu havia lido já esse artigo e no Macoratti também, mas ainda é muito abstrato entender na prática para que uso, preciso de um exemplo bem simples para entender sua utilidade, tanto a lâmbada quanto o delegate e a relação entre eles.

    terça-feira, 3 de julho de 2012 20:53
  • Camila, simplificadamente, delegate e lambda são formas de criar métodos que podem ser passados como parâmetros..

    Você já programou em javascript? Se sim já deve ter passado uma função como parâmetro:

    $(function(){});

    no c# usamos delegates e expressões lambda.. no exemplo abaixo eu recebo um método como parâmetro e calculo quanto tempo ele demorou para ser executado:

            public void ShowTime(Func<double> function)
            {
                Stopwatch watch = new Stopwatch();
                watch.Start();
    
                function(); //executo o método que foi passado por parâmetro
    
                Response.Write(watch.ElapsedMilliseconds);
            }

    e no main do aplicação eu utilizo o método:

                Func<double> function1 = delegate() { return 10 * 10; }; //usando delegate
                Func<double> function2 = () => 10 * 10; //usando lambda
    
                ShowTime(function1);
                ShowTime(function2);
    as expressões lambda são iguais os delegates porêm mais simplificadas.


    http://www.linkedin.com/pub/murilo-kunze/44/191/455


    • Editado Murilo Kunze quarta-feira, 4 de julho de 2012 00:02
    • Sugerido como Resposta Leonardo D'Amato quarta-feira, 4 de julho de 2012 11:02
    quarta-feira, 4 de julho de 2012 00:01
  • um exemplo de uma consulta Lâmbda

    Contatos.Any(c => c.Id == contato.Id);

    Muito mais prático do que usar a LINQ, que por sua vez é mais prático que fazer lógica com o for each, etc.

    no exemplo verifico se existe o contato na lista.

    • Marcado como Resposta Camila_cd quarta-feira, 4 de julho de 2012 19:47
    quarta-feira, 4 de julho de 2012 14:11
  • Murilo,

    Nunca programei na verdade, só conhecia Clipper, estou tendo contato com orientação à objeto agora.

    Entendi parcialmente, no geral qual a aplicabilidade de se usar lâmbada e delegates, onde as utilizo? É comum usá-las nas programações cotidianas?

    Existiria outra forma de fazer o mesmo código sem usar lâmbada e delegate, pode me dar exemplo?

    quarta-feira, 4 de julho de 2012 14:14
  • Como o Felipe mostrou, o lambda é usado muitoo junto com Linq.

                var listaDeInteiros = new List<int> {1, 2, 3, 4, 5, 6, 7, 8, 9};
    
                var valoresMaioresQueCinco = listaDeInteiros.Where(valor => valor > 5);
    
    o que estou passando como parâmetro para o método Where é uma expressão lambda(valor => valor > 5).


    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    • Marcado como Resposta Camila_cd quarta-feira, 4 de julho de 2012 19:47
    quarta-feira, 4 de julho de 2012 14:19
  • Camila,

    É bem comum sim, mas depende de que tipo de aplicação você programa.

    Você deve saber, conhecer e entender esses recursos.

    Você no momento e cenário certo, tendo conhecimento deles, saberá quando usar.

    Sugiro que monte mini laboratórios para aprimorar sua prática, uma hora vai ficar claro como e quando utilizar cada um.


    É possível sim! Ponha isso na sua cabeça. É possível. "Steve Jobs"

    Eduardo Pires
    www.eduardopires.net.br

           

    • Marcado como Resposta Camila_cd quarta-feira, 4 de julho de 2012 19:47
    quarta-feira, 4 de julho de 2012 18:02
  • Felipe,

    Até consigo identificar ser uma lâmbda, mas o que ela está fazendo exatamente?

    Haveria uma outra forma de fazer a mesma coisa sem usar a lâmbada? Apenas para efeito de comparação.

    quarta-feira, 4 de julho de 2012 19:46
  • Eduardo,

    Obrigada, vou fazer o exercício, é que muitas vezes mesmo fazendo, fica difícil entender.

    quarta-feira, 4 de julho de 2012 19:47
  • Camila,

    Vou tentar ajudar, mal não faz :p

    Eu tenho a expressão lambda como uma cláusula where,

    provavelmente ela é muito mais que isso, mas como também sou iniciante, talvez entenda sua dificuldade.

    Eu utilizo por exemplo para a busca de informações no meu banco, que é ligado ao Entidade Fremework, ficando assim:

    objExemplo = objExemploDao.Find(c => c.codigo == codigoExemplo && c.nome == nomeExemplo);
    

    Ou seja, a expressão lambda está "filtrando" a minha busca na tabela "Exemplo". É como se eu associasse a tabela que eu quizer à uma condição feita em lambda.

    Se eu estiver errado me corrijam, também sou leigo. :p

    Abraço.


    Pedro Henrique Peres

    • Marcado como Resposta Camila_cd quarta-feira, 4 de julho de 2012 22:25
    quarta-feira, 4 de julho de 2012 19:58
  • Eduardo,

    Obrigada, vou fazer o exercício, é que muitas vezes mesmo fazendo, fica difícil entender.

    É assim mesmo, é por isso que nossa profissão é valorizada, não é fácil mandar tudo isso para dentro...

    Foque nos exercicios e estudos, não se desespere com possíveis dúvidas, aprenda com foco e no seu ritmo, com o tempo as coisas irão ficando mais claras, esse é o caminho...


    É possível sim! Ponha isso na sua cabeça. É possível. "Steve Jobs"

    Eduardo Pires
    www.eduardopires.net.br

           

    • Marcado como Resposta Camila_cd quarta-feira, 4 de julho de 2012 22:24
    quarta-feira, 4 de julho de 2012 20:11
  • ok, obrigada. Ainda bem complicado para mim. Vamos que uma hora entra na cabeça!
    quarta-feira, 4 de julho de 2012 22:25