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>

A seguir vamos definir na classe Program o código abaixo:
 
var incremento = (int valor, int inc = 1) => valor + inc;

Console.WriteLine(incremento(10, 10));
Console.WriteLine(incremento(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

O que é o .NET MAUI ? - Macoratti .net

NET MAUI - Xamarin Forms - Macoratti .net

NET MAUI - Criando seu primeiro projeto


José Carlos Macoratti