Continuando o nosso artigo anterior eu vou mostrar como podemos usar expressões lambdas para implementar delegates na linguagem C#.
Vamos implementar o cálculo da raiz quadrada de segundo grau usando métodos anônimos e mostrar como simplificar o código usando expressões lambdas e delegates como Func<T>.
Para você poder acompanhar e entender este artigo você tem que saber o que é um delegate. Se você tem dúvidas leia o meu artigo : C# - Delegates e Eventos : Conceitos básicos e depois prossiga na leitura.
Eu não vou entrar em detalhes sobre o que é um delegate (para detalhes leia o artigo) vou apenas apresentar a sua definição (uma delas):
Um Delegate é um ponteiro para um método. Um Delegate pode ser passado como um parâmetro para um método. Podemos mudar a implementação do método dinamicamente em tempo de execução, a única coisa que precisamos seguir fazendo isso seria manter o tipo de parâmetro e o tipo de retorno.
Dependendo do cenário não precisamos criar o nosso delegate pois já existem delegates prontos que podemos pegar e usar. Este é o nosso caso pois o nosso exemplo esta usando 3 parâmetros e retornando um valor e para isso temos um delegate pronto chamado Func.
O Delegate Func encapsula um método que pode possuir até 16 parâmetros e que retorna um tipo especificado pelo parâmetro TResult.
Então porque se dar ao trabalho de declarar um delegate e depois atribuí-lo cada vez que precisamos usar a expressão lambda se podemos usar o delegate Func ?
O delegate EquacaoSegundoGrauDelegate não precisaria ser mais definido e seria substituído pelo delegate Func que já esta implementando na plataforma .NET.
Mas na implementação do cálculo do discriminante e das raízes vamos usar agora o delegate Func<> e as expressões lambdas.
Lembre-se que temos que passar 3 parâmetros (a, b, c) e temos que obter como retorno o valor da raiz.
Assim teremos que declarar o delegate Func com 4 parâmetros sendo que o último é o parâmetro de retornos. Veja como ficou a nossa implementação:
Dessa forma abaixo temos as implementações dos delegates usando expressões lambdas usando o delegate Func com 3 exemplos de cálculos feitos :
            // calcula as raizes para : x^2 + 5x + 6 usando a implementação das instâncias dos delegates
            Console.WriteLine("Para a equação:  x^2 + 5x + 6 : As raízes são {0}, {1}", valor1, valor2);
            Console.WriteLine("Para a equação : x^2 - 10x + 24 : As raízes são {0}, {1}", valor3, valor4);
            Console.WriteLine("Para a equação : x^2 + 8x + 16 : As raízes são {0}, {1}", valor5, valor6);
Dessa forma o nosso código ficou ainda mais enxuto e não houve mudança alguma na sua funcionalidade.
            Console.WriteLine("Cálculo das raízes da equação do segundo grau pela fórmula de Bhaskara");
Assim mostramos como podemos usar delegates com métodos anônimos, expressões lambdas e também como usar o delegate Func, já implementado na plataforma .NET, para simplificar e melhorar o nosso código.
Porque não vos fizemos saber a virtude e a vinda de nosso Senhor Jesus Cristo, seguindo fábulas artificialmente compostas; mas nós mesmos vimos a sua majestade. (2 Pedro 1:16)