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”);

Publicidade

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s