C# - Valores padrão para parâmetros em lambdas
Hoje vou apresentar um recurso do C# que permite usar valores padrão para parâmetros em expressões lambdas. |
Indo
direto ao ponto , a partir do C# 12 você pode especificar valores padrão para
seus parâmetros em expressões lambda. A sintaxe e as restrições nos valores de
parâmetro padrão são as mesmas dos métodos e funções locais.
Apresentando o novo recurso
Vamos apresentar um exemplo para ilustar o uso deste recurso usando o VS 2022 Preview e
vamos criar um projeto
Console App usando a versão do .NET 8.0
preview :
E para poder usar
a versão do C# 12 no projeto teremos que incluir no arquivo de projeto a tag:
<LangVersion>preview</LangVersion> :
<Project
Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net8.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <LangVersion>preview</LangVersion> <Nullable>enable</Nullable> </PropertyGroup> </Project> |
var
incremento = (int
valor, int
inc = 1) => valor + inc; Console.WriteLine(incremento(10, 10)); Console.ReadKey(); |
Você notou que definimos : var incremento = (int valor, int inc = 1)
Antes do C# 12 isso não era permitido agora é, e com isso podemos passar os parâmetros de duas maneiras:
Console.WriteLine(incremento(10, 10));
Console.WriteLine(incremento(10));
O resultado será o seguinte:
No primeiro passamos os dois parâmetros e no segundo usamos o valor padrão do parâmetro definido na expressão lambda.
Podemos ainda declarar expressões lambda com um array params como parâmetro:
var
Soma = (params
int[]
valores) => { int soma = 0; foreach (var valor in valores) { soma += valor; } return soma; }; |
E podemos consumir esta expressão lambda usando o código abaixo:
var
Soma = (params int[]
valores) => { int soma = 0; foreach (var valor in valores) { soma += valor; } return soma; }; var vazio = Soma();Console.WriteLine(vazio); var numeros = new[] { 1, 2, 3, 4, 5 };var total = Soma(numeros); Console.WriteLine(total); Console.ReadKey(); |
O resultado obtido será o seguinte:
Um exemplo
clássico em que isso pode ser útil é usar em uma API
Minimal, onde são usadas expressões lambdas, para fazer uma paginação :
app.MapGet("getblogposts", async (serviço MyService,
int? page = 1, int? pageSize = 50) => {}
Observações:
- Sintaxe dos valores padrão: Assim como em métodos, os valores padrão são definidos na declaração dos parâmetros na lambda.
- Chamada flexível: Você pode omitir argumentos no momento da chamada para usar os valores padrão.
- Ordem dos parâmetros: Quando você passa apenas alguns argumentos, eles são associados aos parâmetros na ordem definida.
Assim, Essa funcionalidade melhora a flexibilidade e reduz a necessidade de criar métodos auxiliares apenas para lidar com valores padrão.
E estamos conversados.
Referências:
An Introduction to Xamarin.Forms - Xamarin