Article image
Jefferson Mesquita
Jefferson Mesquita02/02/2024 18:38
Compartilhe

C# Records: A Evolução Necessária na Construção de Tipos Imutáveis e Eficientes

  • #C#
  • #C#

Fala, galera! Hoje, vamos tentar falar um pouco sobre C# Records de maneira lúdica. Mas o que exatamente são e para que servem? 

Os Records no C# são como superpoderes para programadores, surgindo no C# 9 para resolver um desafio: criar tipos que não mudam, algo como ter super-heróis com habilidades sempre iguais. Vamos explorar essa incrível evolução, como se estivéssemos construindo uma Liga da Justiça em código!

Sintaxe Posicional para Definição de Propriedade

Imagine criar um super-herói tão fácil quanto dizer quais são seus poderes. Com a sintaxe posicional, podemos definir propriedades sem complicações:

public record SuperHeroi(string Nome, string Poder);

Imutabilidade

Super-heróis são imutáveis, e os Records também. Uma vez que criamos um herói, suas características não mudam, garantindo que nossos personagens mantenham suas habilidades originais:

var homemDeFerro = new SuperHeroi("Homem de Ferro", "Inteligência e tecnologia");
// As habilidades do Homem de Ferro permanecem as mesmas após a criação!

Igualdade de Valor

Se dois heróis têm as mesmas habilidades, são considerados iguais. Isso simplifica a comparação, como se tivéssemos dois super-heróis com poderes idênticos:

var thor = new SuperHeroi("Thor", "Força e trovão");
var thorClone = new SuperHeroi("Thor", "Força e trovão");
Console.WriteLine(thor == thorClone); // true

Mutação não destrutiva com with

Os Records têm um poder chamado with, permitindo criar heróis aprimorados sem destruir os originais:

public record SuperHeroiAprimorado : SuperHeroi
{
  public string NovoPoder { get; init; }


  public SuperHeroiAprimorado ComNovoPoder(string poder) => this with { NovoPoder = poder };
}

Formatação Interna para Exibição

A formatação interna dos Records facilita a visualização, como ter cartões de identificação claros para cada super-herói:

var capAmerica = new SuperHeroi("Capitão América", "Força e escudo");
Console.WriteLine(capAmerica); // SuperHeroi { Nome = Capitão América, Poder = Força e escudo }

Exemplo Prático de uma DTO

Em uma WebAPI, a DTO é como o uniforme dos super-heróis, simplificando a transmissão de informações pela internet:

public record ProdutoDTO(string Nome, decimal Preco);


// Em um controlador de API
[ApiController]
[Route("api/produtos")]
public class ProdutosController : ControllerBase
{
  [HttpGet("{id}")]
  public ActionResult<ProdutoDTO> ObterProduto(int id)
  {
      // Lógica para obter dados do produto
      var produto = ObterProdutoDoBancoDeDados(id);


      if (produto == null)
          return NotFound();


      var produtoDTO = new ProdutoDTO(produto.Nome, produto.Preco);
      return produtoDTO;
  }
}

Vantagem da Abordagem em Aplicações Modernas

Usar Records em uma DTO em uma WebAPI agiliza a transmissão de dados, crucial em aplicações modernas. Com a simplicidade e eficiência dos Records, apenas as informações essenciais são enviadas pela rede, tornando a aplicação mais ágil.

image

Os Records do C# são verdadeiros aliados na construção de tipos imutáveis e eficientes. Incorporar essa evolução em nosso código é como equipar nossos super-heróis com novos poderes. Prepare-se para elevar seu código a níveis extraordinários!

Siga-me no Linkedin para mais aventuras no universo da programação!

⚒️Ferrramentas de produção:

Imagens geradas por: I.A. lexica.art

Editor de imagem: Power Point e Photoshop

Conteúdo gerado por: ChatGPT 

Revisões Humanas: Jefferson Mesquita

#.NET #Microsoft #Backend

Compartilhe
Comentários (0)