C# Records: A Evolução Necessária na Construção de Tipos Imutáveis e Eficientes
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.
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