Israel Aéce

Microsoft MVP, MCP, MCAD, MCTS, MCPD e MCT

My Links

Blog Stats

Archives

Post Categories

Links

Login

Lambda Expressions no VB.NET

Estive vendo como funcionam as Lambda Expressions no VB.NET. Para testar, criei uma instancia da classe List(Of T) e adicionei nomes dentro dela. Em seguida, utilizei o método ForEach para iterar por essa coleção, onde em cada item eu gostaria de escreve-lo na tela. Inicialmente o código foi:

Dim nomes As New List(Of String)
nomes.Add("Israel")
nomes.Add("Claudia")
nomes.Add("Juliano")
nomes.Add("Virginia")
nomes.ForEach(Function(n) Console.WriteLine(n))

Ao compilar, aparece a seguinte mensagem de erro: Expression does not produce a value. O que aparentemente faz sentido. No Visual Basic, quando queremos que um método retorne um valor, então o criamos como Function. O comportamento desta keyword nas Lambda Expressions tem o mesmo comportamento, ou seja, obrigatoriamente ela precisa retornar algum valor que, neste caso, não ocorre. Se, ao invés de utilizar o método ForEach, utilizar o método Find que, por sua vez, retorna o nome caso o mesmo seja encontrado dentro da coleção, então eu poderia fazer o uso da Lambda Expressions sem problemas:

Dim resultado = nomes.Find(Function(n) n = "Israel")

Há uma alternativa para utilizar uma Lambda Expression para o método ForEach e outros métodos que não retornam valor mas, na minha opinião, perde toda a elegancia destas expressões. Exemplo:

nomes.ForEach(Function(n) Write(n))

Function Write(ByVal nome As String) As String
    Console.WriteLine(nome)
    Return Nothing
End Function


Já no C#, podemos utilizar o operador => para ambos os casos:

nomes.ForEach(n => Console.WriteLine(n));
var resultado = nomes.Find(n => n == "Israel");

posted on Tuesday, March 25, 2008 8:19 PM

Feedback

# re: Lambda Expressions no VB.NET 3/26/2008 12:42 AM Cleydson

Boa dica! Bem interessante, eu não tinha observado isso nas minhas leituras.
Pode parecer estranho mas só entendi essas tais lambdas expressions depois que aprendi um pouco de Ruby lendo o livro do TaQ(http://eustaquiorangel.com/).

Title  
Name  
Url
Box Code
Protected by FormShield
Comments