Exemplo Prático: Quando usar uma Tupla?
O uso mais comum e poderoso para tuplas é retornar múltiplos valores de um método de forma clara e sem precisar de parâmetros out
ou criar uma classe/struct só para isso.
Imagine que você precisa de um método que busque o nome e o preço de um produto.
Antes das Tuplas (o jeito antigo):
Você precisaria criar uma classe ou usar parâmetros out
, o que é mais verboso.
// Precisaria de uma classe só para o retorno
public class ResultadoBuscaProduto
{
public string Nome { get; set; }
public decimal Preco { get; set; }
}
public ResultadoBuscaProduto BuscarProduto(int id)
{
// Lógica para buscar no banco...
return new ResultadoBuscaProduto { Nome = "Teclado Mecânico", Preco = 299.90m };
}
Com Tuplas (o jeito moderno e simples):
Você pode definir o retorno diretamente na assinatura do método.
// O tipo de retorno é uma tupla (string, decimal)
public (string Nome, decimal Preco) BuscarProduto(int id)
{
// Lógica para buscar no banco...
string nomeDoProduto = "Teclado Mecânico";
decimal precoDoProduto = 299.90m;
return (nomeDoProduto, precoDoProduto);
}
// --- Como usar ---
// Chamando o método:
var produtoInfo = BuscarProduto(1);
// Acessando os valores pelos nomes que você deu:
Console.WriteLine($"Produto: {produtoInfo.Nome}"); // Saída: Produto: Teclado Mecânico
Console.WriteLine($"Preço: {produtoInfo.Preco:C}"); // Saída: Preço: R$ 299,90
// Ou você pode "desconstruir" a tupla em variáveis separadas
(string nome, decimal preco) = BuscarProduto(1);
Console.WriteLine($"O produto {nome} custa {preco:C}.");
Resumo: Tupla vs. Classe/Struct
Característica | Tupla (ValueTuple) | Classe (class) |
---|---|---|
Propósito | Agrupar dados de forma leve e temporária. Ideal para retornos de métodos. | Modelar entidades complexas com identidade, estado (propriedades) e comportamento (métodos). |
Definição | Definida "na hora", na assinatura do método ou na variável. | Requer um arquivo e uma definição formal (public class...). |
Performance | Muito eficiente. É um struct (Tipo de Valor), geralmente alocado na Stack. | Mais pesada. É um Tipo de Referência, alocado no Heap. |
Quando Usar | Para dados que só fazem sentido no contexto imediato onde são criados/usados (ex: retorno de um método privado). | Para modelos de domínio (Cliente, Produto, Pedido) que são passados por várias camadas da aplicação. |
Relação com POO | Uma ferramenta da linguagem C# usada em código OO. | A principal ferramenta para construir um sistema orientado a objetos. |
As tuplas são uma ferramenta fantástica para escrever um código mais limpo e expressivo no dia a dia.