C# 7.0 - Tuples

Olá pessoal,

Há algum tempo atrás eu publiquei um post falando sobre Tuples em C#, que é um recurso bem interessante para retorno de múltiplos valores, principalmente quando você não quer criar uma classe somente para isto.

Agora com o C# 7.0 (ainda em preview) as Tuplas ganharam novos recurso que facilitam ainda mais a sua utilização, agora podemos dar nomes aos elementos, faclitando ainda mais o nosso código.

Para executarmos os exemplos você vai precisar baixar o Visual Studio “15” Preview 4. Atenção: se você ja tiver uma versão anterior deste Visual Studio, precisará removê-la antes de instalar o Preview 4.

O preview 4 é uma nova IDE, com novos recursos e um novo modelo de instalação, veja:

Você pode escolher o que achar interessante e depois clicar em “Install”. Esta instalação nos dá uma idéia do que esrá por vir, um modelo bem mais intuitivo de setup.

Depois de instalado o Visual Studio “15” Preview, vamos criar um projeto Console:

Inicialmente vou mostrar como estâo as tuplas hoje. Para isto vou criar um método que retorna vários parâmetros:

class Program
{
  static void Main(string[] args)
  {
      var ret = BuscaNomeLimite(1);
      Console.WriteLine($"Nome: {ret.Item1} - Limite: {ret.Item2}");
  }

  static Tuple<string,decimal> BuscaNomeLimite(int ID)
  {
      return new Tuple<string, decimal>("Carlos",1000);
  }
}

Isto já facilita muito o desenvolvimento, principalmente quando você não quer criar uma classe para fazer isto, mas ao mesmo tempo gera um código um tanto confuso, pois os parâmetros sâo nomeados como Item1, Item2, etc.

Agora vamos ao C# 7 e ver como isto melhorou, e muito!!! Entâo vamos fazer um upgrade no nosso método usando a sintaxe nova, mas como ainda estamos em Preview, é necessário instalar o pacote System.ValueTuple usando o Nuget. Para isto clique com o botão direto no seu projeto e selecione “Manage Nuget Packages”, depois marque a opção “Include prerelease” e depois digite “tuple” na caixa de pesquisa:

Clique no botão Install e siga os passos! Pronto, agora vamos melhorar nosso código:

static void Main(string[] args)
{
  var ret = BuscaNomeLimite(1);
  Console.WriteLine($"Nome: {ret.nome} - Limite: {ret.limite}");
}

static (string nome, decimal limite) BuscaNomeLimite(int ID)
{
  return ("Carlos", 1000);
}

Veja que com a nova sintaxe, você pode nomear os campos da Tupla, ou seja, pode usar nomes mais intuitivos e a sintaxe é bem simples. Basicamente você coloca os nomes e tipos entre parênteses, no mesmo local onde antes estava a Tuple<>:

E no retorno você coloca os valores, também entre parênteses, na mesma sequência da definição do médodo:

Você pode também nomear os parâmetros no retorno, para isto basta colocar o nome do parâmetro e dois pontos, seguido do valor de retorno:

Tuplas são um recurso muito legal do C#, e agora, com a nomeção dos campos, seu código vai ficar ainda mais simples de ser entendido!

Abraços e até a próxima!

Carlos dos Santos.