Hoje vamos recordar como usar variáveis Discards na linguagem C#. |
A partir da versão 7.0, o C# introduziu um novo recurso chamado
discard (descarte numa tradução livre)
para criar variáveis fictícias, definidas pelo caractere sublinhado
_ que se assemelham a variáveis atribuídas que não possuem um valor.
O objetivo desse recurso é usar essa variável quando você
deseja ignorar intencionalmente o valor não criando uma variável explicitamente.
Por exemplo - quando você está chamando um método que retorna o objeto, mas o
chamador está interessado apenas em chamar o método, e não no objeto retornado.
Nesses casos, podemos usar uma variável de descarte para reduzir a alocação de
memória e deixar seu código mais claro também.
Com isso podemos destacar dois grandes benefícios deste recurso:
Quando houver apenas uma única variável de descarte e sem espaço de armazenamento. Usar discard pode diminuir as alocações de memória;
O seu código fica mais transparente, mais legível e fácil de manter;
As variáveis discards são marcadas com um sublinhado "_" como nome.
O exemplo abaixo contém o método PessoaDetalhes, que retorna informações nome, peso, idade e cor onde peso e cor são descartados:
Demo d
= new
Demo(); (string nome, _, int idade, _) = d.PessoaDetalhes("Macoratti", 80, 54, "Branca"); class Demo{ public (string, int, int, string) PessoaDetalhes(string nome, int peso, int idade, string cor) { string p_nome = nome; int p_peso = peso; int p_idade = idade; string p_cor = cor; return (p_nome, p_peso, p_idade, p_cor); } } |
Vejamos outro cenário de uso do discard.
Vamos supor um cenário onde verificamos se a string fornecida é um objeto DateTime válido ou não, usando o método TryParse.
DateTime
resultado; if (DateTime.TryParse("02/29/2022", out resultado)){ Console.WriteLine("Data é válida"); } else { Console.WriteLine("Data não é válida"); } |
No entanto, o método
TryParse espera que o parâmetro
out produza o resultado
DateTime além de retornar o resultado booleano, portanto, devemos
declarar a variável de resultado DateTime para
usá-la no parâmetro out mesmo que não a usemos.
Esta seria uma situação ideal para usar a variável discard se não formos usar o objeto resultado.
if
(DateTime.TryParse("02/29/2022",
out
_)) { Console.WriteLine("Data é válida"); } else { Console.WriteLine("Data não é válida"); } |
Usando a variável de descarte, podemos ignorar completamente a variável de resultado. Se quisermos ignorar o resultado retornado e estivermos interessados apenas no objeto de resultado real, podemos fazer o exemplo usando o código abaixo:
var resultado; _ = DateTime.TryParse("02/29/2019", out resultado); |
Outro uso deste recursos seria quando usamos o método
Task.Run, na programação assíncrona, para chamar
métodos; se você não estiver interessado no resuultado do retorno, podemos usar
a variável discard :
_ = Tasl.Run(()=> {...}); |
Mas fique atento !!!
Se o descarte for usado como parâmetro e ao mesmo tempo, você tiver outra variável de descarte no escopo da função. Então o descarte do escopo “_” agirá como uma variável normal.
static
void
ExibirValor(string
_) { _ = "Método Exibir com discard"; Console.WriteLine(_); } |
E estamos conversados...
"E sereis odiados por todos por amor do meu
nome; mas quem perseverar até ao fim, esse será salvo."
Marcos 13:13
Referências: