Introdução
Vai-se aproximando o lançamento da nova versão da linguagem C# 6.0 (vNext) e muitos já estarão a pensar se devem adoptar a nova versão de imediato ou se devem aguardar algum tempo até ver se vale mesmo a pena.
Para dar uma ajuda, temos hoje um artigo sobre algumas das características e novas funcionalidades do C# vNext [1].
Para começar, a primeira novidade é que o novo compilador será open source. É verdade! Já se pode obter o código fonte da nova plataforma .NET Compiler Platform (“Roslyn”). A Microsoft já está a disponibilizar no CodePlex duas versões preview da nova plataforma de compiladores, uma para o Visual Studio 2013 e outra em conjunto com a versão preview também do seu novo IDE de desenvolvimento. Ambas as versões podem ser obtidas aqui.
[1] actualizadas até 10-Set-2014
Conteúdo
Primary Constructors
Os primary constructors são uma abreviação sintática para a criação de um construtor que automaticamente atribui valores a variáveis privadas de instância.
Actual
{
private int x, y;
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
}
vNext
{
private int x, y;
}
Melhorias nas Auto Properties
As melhorias consistem numa abreviação sintática para a criação de auto properties readonly e inicializadores.
Actual
{
private string _nome = "Henrique";
private string _apelido ="Rodrigues";
public string Nome
{
get { return _nome; }
set { _nome=value; }
}
public string Apelido
{
get { return _apelido; }
}
}
vNext
{
public string Nome { get; set; } = "Henrique"
public string Apelido { get; } = "Rodrigues"
}
Utilização de membros Static
Mais uma abreviação sintática, que permite utilizar os membros estáticos de uma classe (mesmo os extension methods) sem necessitar de referenciar explicitamente a classe. Basta indicá-la numa expressão using.
Actual
namespace vNext
{
public class Program
{
private static void Main(string[] args)
{
Console.WriteLine("Hellow World");
}
}
}
vNext
namespace vNext
{
public class Program
{
static void Main(string[] args)
{
//usar o mtodo writeLine da classe Console
//sem especificar o nome da classe
WriteLine("Hellow World");
}
}
}
Expressões de declaração
Mais uma abreviação sintática, que permite declarar uma variável no meio duma expressão.
Actual
if (!long.TryParse(Request.QureyString["Id"], out id))
{ }
vNext
{ }
Inicialização de Índices e de Dicionários
Nota: os inicializadores de índices (Index Initializers) – sinal $ - já tinham sido previamente previstos, mas não funcionam na CTP atual.
A inicialização de dicionários e outros objectos com indexadores é pouco elegante. Temos agora uma melhoria sintática que permite fazer esta inicialização duma forma mais clara.
Actual
{
{ "Portugal", "Lisboa" },
{ "Angola", "Luanda" },
{ "EUA", "Washington" }
};
vNext
{
["Portugal"] = "Lisboa",
["Angola"] = "Luanda",
["EUA"] = "Washington"
};
Melhorias no tratamento de Excepções
No tratamento de excepções, temos duas novidades:
- Filtros de excepção (Exception Filters)
- Chamadas assíncronas em blocos catch (await)
Exception Filters
{
throw new Exception("Eu");
}
catch (Exception ex) if (ex.Message == "Tu")
{
// este bloco no executa
}
catch (Exception ex) if (ex.Message == "Eu")
{
// este bloco executa
}
await em blocos catch
{
DoSomething();
}
catch (Exception)
{
await LogService.LogAsync(ex);
}
Conclusões
Ao considerar apenas estas alterações de linguagem, percebemos que não há nada de particularmente revolucionário no C# 6.0. A grande novidade é mesmo a do compilador ser disponibilizado como open source.
Esta versão não vai revolucionar a codificação do C#, mas isso não significa que não tenham sido feitos progressos reais na eliminação de algumas ineficiências de codificação. Depois de se começar a usar estas novas funcionalidades, no dia-a-dia da programação, rapidamente se vão tornar como certas, como um dado adquirido.
Referências
http://msdn.microsoft.com/en-us/magazine/dn683793.aspx
Sem comentários:
Enviar um comentário