Artigo no estilo: Curso

De que se trata o artigo

Dando continuidade ao artigo C# Orientado a Eventos – delegates e events, este artigo introduz o estudo de Expressões Lambda no .Net Framework em comparação ao Cálculo Lambda matemático, demonstrando sua utilidade e facilidade de uso.


Em que situação o tema é útil

A expressão lambda é recomendada para a escrita de métodos de extensão simplificados, normalmente orientados a funções matemáticas ou de operação de coleções.

Sua utilização visa uma codificação fluente, desmembrando algoritmos complexos em algoritmos mais simplificados e interdependentes.

Expressões Lambda

Neste artigo iremos abordar o estudo de expressões lambda em comparação ao cálculo lambda, com o intuito de demonstrarmos desmembramento de processos de um algoritmo, estendendo o estudo de delegates e introduzindo o estudo de coleções na api System.Linq.

Demonstraremos como funcionam internamente algumas estruturas do Microsoft Linq que se utilizam desta facilidade matemática.

A matemática é a base para a solução de qualquer algoritmo computacional, por isso é fundamental o conhecimento de alguns conceitos desta ciência para a elaboração da análise de um sistema sólido.

Um fluxo de trabalho conciso requer o desmembramento de fluxos de forma lógica com o intuito obter um resultado com o mínimo de falhas. Este é o paradigma Divide and Conquer (dividir e conquistar) que consiste em quebrar um processo em sub processos menores até que esses se tornem simples o suficiente para serem solucionados diretamente.

A organização de processos em algoritmos já foi largamente implementada em paradigmas procedurais, posteriormente evoluindo ao paradigma orientado a objetos com o intuito de criar segmentações mais definidas para cada passo.

Mesmo diante destes recursos nos deparamos com algumas tarefas muito repetitivas e recursivas que poderiam ser divididas em algoritmos mais simples, como, por exemplo, a varredura de uma lista de objetos para que seja montada uma lista de novos objetos, o agrupamento de uma coleção de dados ou um somatório baseado em parâmetros pré-definidos.

Atentos para o fato de que um computador funciona com cálculos matemáticos, é natural pensarmos que algumas metodologias aritméticas possam agregar mais agilidade e facilidade na execução de algumas etapas de um algoritmo, dentre estas metodologias destacamos o cálculo lambda (Nota do DevMan 1).

Nota do Devman 1

O Cálculo Lambda foi introduzido pelo matemático Alonzo Church na década de 1930, provendo uma semântica simplificada para o estudo formalizado de propriedades computacionais. Consiste em resolver problemas de forma lógica por intermédio de fenômenos relacionados com ligação e substituição de variáveis.

Imagine um cálculo de juros simples definido pela equação M = V + (V * T/100), onde V é o valor monetário, T é a taxa de juros.

Trazendo a equação para um cálculo lambda teremos a seguinte formulação:

juros(T, V) => V + (V * T/100) ou (T, V) => V + (V * T/100)

Neste primeiro momento deveremos informar os dois parâmetros para que a função tenha seu valor calculado, conforme a Listagem 1.

Listagem 1. Cálculo Lambda para juros simples


  1    (T, V) => V + (V * T/100) (5,100)
  2    = 100 + (100 * 5/100)
  3    = 105

Esta função utiliza dois argumentos (V e T), mas podemos transformá-la de tal modo que ela receba um parâmetro inicialmente e finalmente o parâmetro restante.

T => (V => V + (V * T/100)) 

Esta transformação é chamada de currying, onde podemos quebrar uma função que recebe vários parâmetros em uma cadeia de funções que podem receber um parâmetro de cada vez em forma de tupla. Esta situação é útil quando queremos efetuar cada bloco de cálculo separadamente para cada variável.

Vendo esta função na prática, imagine que temos uma taxa de juros e depois podemos adicionar um valor a ser acrescido. Assim sendo, iremos adicionar dois parâmetros à nossa função, o valor 5 para a taxa de juros e 100 para o valor a ser acrescido. A função desmembrada ficará descrita conforme a ...

Quer ler esse conteúdo completo? Tenha acesso completo