Ir para o conteúdo

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.