c6
Share on facebook
Share on twitter
Share on linkedin

A nova e melhorada C#: conheça a C# 6.0

No primeiro semestre de 2014, a Microsoft anunciou o lançamento de novas versões do Visual Studio e da tecnologia ASP.NET. Batizado inicialmente como “14”, este novo release do Visual Studio seria renomeado para 2015. Já o projeto do novo ASP.NET foi chamado num primeiro momento de vNext, sendo posteriormente rebatizado como ASP.NET 5. Estas atualizações nas soluções de desenvolvimento da Microsoft foram concebidas priorizando questões como performance, o uso de ambientes de cloud computing, interoperabilidade com outros sistemas operacionais (como Linux e Mac), além de representar uma iniciativa que visa transformar o .NET numa plataforma open source.

Paralelo a isto, a Microsoft também trabalhou no lançamento de uma nova versão da linguagem C#: trata-se do C# 6, o qual contempla novas construções de código e melhoramentos em estruturas pré-existentes. Portanto, aqui abordaremos as novidades envolvendo o C# 6, detalhando duas modificações nas funcionalidades de Auto-Property Initializers e Primary Constructors que visam simplificar e agilizar o trabalho de codificação no Visual Studio 2015.

Auto-Property Initializers

O C# 3 trouxe um recurso muito interessante chamado Auto-Property. Seu objetivo era facilitar a criação daquele tipo de propriedade que apenas expõe um estado. Antes das propriedades auto implementadas era comum códigos como o fragmento abaixo:

public class Charp2Entity
{
             private Guid _id;
	
             public Guid Id
               {
                       get { return _id; }
                      protected set { _id = value; }
               }
}

Este mesmo código com a propriedade auto implementada fica mais expressivo, deixando para o código gerado pelo compilador a parte meramente burocrática de utilizar uma variável ali.

public Guid Id { get; protected set; }

Bem melhor, não é? Agora digamos que esta propriedade tivesse um valor inicial. Para inicializá-la, tínhamos que implementar um construtor para fazer o serviço.

public class Charp3Entity
{
	public class Charp3Entity
{
	public Charp3Entity()
	{
                          Id = Guid.NewGuid();
               }
	
	public Guid Id { get; protected set; }
}

O C# 6 trouxe um recurso para facilitar este trabalho. A ideia é fornecer uma forma mais fluída de inicializar propriedades auto implementadas, novamente deixando a parte burocrática para o código gerado pelo compilador.

public class Charp6Entity
{
	public Guid Id { get; protected set; } = Guid.NewGuid();
}

BEEEEMMMM melhor, hein! Apesar de ser uma simples modificação sintática, quando analisamos historicamente, vemos claramente que a linguagem proporcionou que o código ficasse bem mais expressivo com o tempo, não é? Vale ressaltar que este tipo de inicialização também funciona muito bem com propriedades somente leitura.

public class Charp6Entity
{
	public string Tip { get; } = "Getter-only auto-properties also works...";
}

Primary Constructors

Quem é que lembra lá da longínqua versão 2 do C# que, para criar uma classe, era necessário declarar primeiramente os atributos, criar as propriedades, e depois criar o construtor deixando o código gigantesco?

public class Cliente
{
	private string nome;
	private string sobrenome;
 
	public Cliente(string nome, string sobrenome)
	{
		this.nome = nome;
		this.sobrenome = sobrenome;
	}
	public string Nome
	{
		get { return nome; }
		set { nome = value; }
	}
	public string Sobrenome
	{
		get { return sobrenome; }
		set { sobrenome = value; }
	}
}

Na versão 3 do C# foi adicionado a possibilidade de deixar o código mais enxuto para executar a mesma tarefa:

 

public class Cliente
{
	public string Nome { get; set; }
	public string Sobrenome { get; set; }
}

Porém, agora com o C# 6 é possível construir uma classe através dos construtores primários que servem para representar em uma sintaxe mais concisa.

 

public class Cliente(string nome, string sobrenome)
{
	public string Nome { get; set; } = nome;
	public string Sobrenome { get; set; } = sobrenome;
}

Além disso, há a possibilidade de criar a classe já atribuindo valores constantes a ela:

public class Cliente
{
	public string Nome { get; set; } = "Rogger";
	public string Sobrenome { get; set; } = "Lacerda Gontijo";
}

Vale a pena destacar também que, até antes do C# 6, não era possível declarar um construtor sem parâmetros em uma estrutura. Agora, isso é plenamente possível.

struct Cpf
{
	public Cpf()
	{
                         IsValid = false;
                         Number = string.Empty;
               }
}

Para entender este recurso é primordial pensar um pouco se o código abaixo vai funcionar:

var cpf = default(Cpf);

Isso cria uma instância da estrutura sem a necessidade de passar os parâmetros. Ou seja, até aqui não tínhamos como declarar um construtor padrão para estruturas em C#, o que nos impedia de ter uma forma alternativa de criar uma instância da estrutura sem passar todos os parâmetros. O que temos no C# 6 é uma maneira de dizer na estrutura como ela deve ser inicializada sem os parâmetros. É importante ter mente que default(T) continua com o mesmo comportamento de antes. Ele não vai desencadear uma chamada para seu construtor sem parâmetros.

Conclusão

Portanto, como pôde-se observar, a principal motivação da Microsoft para essa nova versão do C# são pequenas mudanças que fazem diferença na simplicidade e produtividade. As mudanças aqui realmente parecem pequenas, mas se olharmos do panorama de um grande projeto, elas podem fazer muita diferença na hora de escrever o código.

Veja a parte 2 das nossas dicas sobre C# 6.0!

Referências

 

Por: Rogger Lacerda e Jéssica Saliba.

Tá na dúvida?

c[email protected]

R. Antônio de Albuquerque, 330 – 14° andar
Savassi, Belo Horizonte – MG, 30112-010