A Microsoft liberou a versão Preview do Visual Studio 2015 em 12 de novembro de 2014. Junto veio também o C# 6.0 e muitas novidades na IDE. Neste artigo apresentaremos o Visual Studio 2015 e suas novidades, melhorias, pontos negativos e outros, e colocaremos tudo em prática.

Novidades do Visual Studio

O novo Visual Studio 2015 se destaca por trazer uma nova Timeline, que é uma nova área de diagnóstico de desempenho das aplicações baseados em WPF (Windows Presentation Foundation), além de algumas atualizações das funcionalidades para ASP.NET e também mudanças no serviço associado à linguagem XAML.

Framework 4.6

Nesta versão já existe um emulador Android para que possamos testar os nossos aplicativos desenvolvidos utilizando o Xamarin.

A última versão do Xamarin Tools já tem compatibilidade com o Visual Studio 2015 e com isso será possível utilizar a versão Stater do mesmo, tendo como plataforma alvo o iOS e Android.

Nesta versão temos templates para desenvolver diretamente no Visual Studio 2015 e suporte a várias extensões para facilitar o desenvolvimento de aplicativos iOS e Android.

Grande parte do .NET Framework 4.6 está ligada diretamente ao GitHub, pois agora existe um centro open source da Microsoft (vide seção Links).

Ocorreram mudanças também relacionadas à licença, que agora ficou por conta das licenças MIT, que são muito utilizadas em softwares livres, ou seja, ela permite a reutilização de software licenciado. Nessas licenças deixa-se bem explícito os direitos do usuário final, mas inclui o direto ao uso, cópia e alteração.

ASP .NET 5

O novo ASP .NET passou por algumas mudanças, dentre as quais destaca-se a mudança dos arquivos de configuração das nossas aplicações, pois antes o arquivo utilizado era no formato XML, mas agora utiliza-se o JSON, facilitando o acesso para linguagens client-side.

Além disso, o ASP .NET 5 teve a remoção do namespace System.Web, deixando assim as nossas soluções Web mais leves e com melhor performance, fazendo com que o carregamento das páginas ocorra mais rapidamente, já que não precisam mais carregá-la. Disponível pela primeira vez para MAC e Linux, além de incluir um servidor web chamado kestrel para dar suporte ao MAC e Linux.

Com o ASP .NET 5, o WebForms está perdendo sua força, mas ainda será possível utilizá-lo, pois a Microsoft não o descontinuará. O mesmo contará com atualizações, porém ele não fará mais parte do ASP .NET 5. Com isso, nessa versão não é interessante o uso de WebForms, pois haverá uma perda de vários recursos interessantes, como o uso do Membership, substituído pelo Identity e descontinuação do Visual Basic.

Além disso, com o ASP. NET 5, a injeção de dependência já vem embutida, não necessitando mais de frameworks (Ninject e AutoFac), como nas versões anteriores, pois agora é uma função nativa. Assim, o software só obtém as informações e componentes necessários naquele momento de execução, por demanda.

Roslyn

A nova versão do VS agora trabalha com o novo compilador para a plataforma .NET, que conta com uma API dentro dele responsável por efetuar análise de código, ou seja, este compilador será capaz de identificar se o código escrito pode ter melhorias no seu desenvolvimento. O Roslyn é Open Source e com isso, podemos analisar o seu código fonte para construirmos ferramentas de análise de código com base nas mesmas API’s utilizadas neste compilador. Foram liberadas algumas melhorias de sobrecarga e com isso o compilador decide com mais eficiência qual método deverá usar determinado argumento.O ponto em que podemos perceber essa melhora é em sobrecargas que contém tipos com valores nulos.

Além disso, as compilações ficaram bem mais rápidas e disponibilizam a geração de código para Link-Time (redução de tamanho de arquivos-objeto), ou seja, os aperfeiçoamentos nas bibliotecas do compilador resultaram em arquivos objetos e bibliotecas significantemente menores.

Podemos destacar também:

  • Diagnósticos de memórias, permitindo monitorar em tempo real o uso de memória por parte do aplicativo que está sendo compilado. Para verificar essa função basta pressionarmos as teclas Alt + F2;
  • Aperfeiçoamento na otimização escalar, que são melhorias referentes a quais caminhos o código deverá percorrer para ser executado mais rápido e de forma organizada. Houve uma mescla de fluxo de controle e otimização.

Com isso, podemos efetuar mudanças no nosso código web sem precisar efetuar o build novamente para visualizar as alterações. Para isso necessitamos apenas executar (CTRL + F5) no nosso navegador Web ao invés de utilizar o modo debug para visualizarmos as mudanças em tempo real.

Com o Roslyn temos a impressão de já ter utilizado uma versão de um conhecido plugin chamado ReSharper, que ajuda o programador na refatoração do código em tempo de desenvolvimento.

.NET Open Source

O compilador do C# é Open Source, com uma licença Apache 2, ou seja, ela é uma licença onde terceiros pode utilizar o código, porém os direitos principais ficam ligados ao criador do código. Com isso, você poderá baixar o compilador (vide seção Links) que foi reescrito em C# e testar na sua máquina, usando o botão clonar que tem na página. Podemos destacar também que o core do .Net é oficialmente suportado em Linux e OsX (Mac).

Code Analysis

É o novo pacote responsável por validar a sua aplicação para que a mesma tenha um código melhor elaborado, ou seja, seu código receberá diversas sugestões relacionadas à melhoria de desempenho de código, aplicando as melhores práticas, já que o mesmo possui um conjunto de regras de análise de código para identificar e resolver problemas de desempenho, escalabilidade e tempo de execução.Esta ferramenta analisa a estética do código que foi introduzida.

Nesta versão, se o nosso código não estiver otimizado de acordo com os critérios da ferramenta, a mesma poderá barrar a gravação do código.

Na Figura 1 vemos uma pequena demonstração de melhoria de código utilizando o Code Analysis. Efetuamos a chamada de um método não existente no escopo do nosso código e o Code Analysis sugeriu a criação desse método já com os tipos de parâmetros já definidos.

Code Analysis verificando melhoria de código

Figura 1. Code Analysis verificando melhoria de código – Solicitando criação de método

Entity Framework 7.0

Com o novo Entity Framework teremos suporte a acesso a dados em bancos não relacionais, ou seja, poderemos manipular e consultar informações em banco de dados orientados a objetos como, por exemplo, MongoDB, Azure Storage Table, Redis e Cache. Apesar das mudanças, a API de superfície será a mesma de acesso a dados a um banco de dados relacional.

Para instalarmos o Entity Framework 7.0 basta utilizarmos o Nuget e digitar a seguinte linha de comando:

kpm install EntityFramwwork.SqlServer 7.0.0-beta2

Suporte a GIT

Agora não será necessário ter uma grande experiência com linhas de comandos no GIT, pois ele funcionará bastante similar a outros controladores de versão tradicionais, como SVN e Team Foundation Server. Agora ele funciona também integrado ao Visual Studio e para que possamos gravar determinado arquivo, por exemplo, basta clicarmos com o botão direito sobre o mesmo e já teremos várias propriedades do GIT disponíveis.

Code Lens

É um recurso que fornece diversas informações sobre o código fonte das nossas aplicações como, por exemplo, quantas vezes um determinado método foi referenciado (repare que na Figura 1 o método criado tem na legenda “0 references”), quantas vezes a linha do código foi alterada. Com ele o desenvolvedor terá grande facilidade para localizar alterações de código e histórico de alterações, além de discutir o histórico do código com a sua equipe de trabalho dentro.

Microsoft Pex

É o conceito de testes unitários inteligentes, ou seja, a cada criação de uma classe, por exemplo, o Visual Studio 2015 irá criar um teste unitário ao mesmo tempo.

O Microsoft Pex é responsável por desenvolver, através do nosso código, um conjunto de entrada de testes necessários para executar e verificar se os métodos existentes em uma classe funcionarão corretamente sem erros. Observe um exemplo na Listagem 1.

Listagem 1. Criação método adicionando Microsoft Pex


protected void AdicionarItens(List<int> lista, int valor)
{
// Adicionando Item a lista
lista.Add(valor);
   Assert.True(list[list.Count – 1] == item);
} 

Ao criarmos uma classe com esse código, automaticamente o Visual Studio 2015 criará uma classe de teste unitário com método referente a Listagem 2.

Listagem 2. Método da classe de teste unitário referente ao método criado anteriormente


[TestMethod]
[PexGeneratedBy(typeof(TestClass))]
protected void AdicionarItens01()
{
  // Testando o método criado anteriormente
  AdicionarItens(new List<int>(),0);
} 

AngularJS

O Visual Studio 2015 conterá alguns templates suportados pelo AngularJS. Com a integração nativa com o npm, Grunt e Bower, o ASP.NET 5 se torna um framework server-side para o desenvolvimento de aplicativos client-side. Existe no próprio Visual Studio 2015 o AngularJS Template SPA que contem um esqueleto de uma aplicação web simples utilizando AngularJS, Bootstrap e ASP.NET, além de poder ser baixado externamente ao Visual Studio (vide seção Links).

Windows Azure

O Microsoft Azure SDK 2.5 integra-se ao VS e permite que você crie rapidamente um ambiente de desenvolvimento. Com isso, seus códigos fontes ficam armazenados diretamente na sua conta da Azure nas nuvens, além de podermos publicar nossas aplicações diretamente nos servidores da Azure.

Novidades do C#

String Interpolation

Nas versões anteriores, um dos métodos mais utilizados era o String.Format, mas era bastante repetitivo na aplicação, pois em todo local onde era necessário efetuar a junção de variáveis com texto se fazia necessária a chamada do método. Com as mudanças existentes no C# 6.0, agora é possível ter o mesmo resultado usando as String Interpolation. Elas nos permitem inserirmos variáveis dentro de uma determinada string sem a necessidade de utilizar um método para isso.

Veja três exemplos nas Listagens 3 a 5.

Listagem 3. Uso de Strings Interpoladas


public string getStringInterpolada(string nome)
{
  // Montagem string interpolada
  var str = $"Olá {nome} , seja bem vindo ao Visual Studio 2015 e as novidades do C# 6.0.";
  return str.ToString();
} 

Nesse exemplo vemos como concatenar valores com texto de forma mais simples e mais intuitiva.

Listagem 4. Strings Interpoladas com formatações de inteiro e decimal


public string GetstringInterpolada()
{
  // Criando um objeto
  var carro = new Carro
  {
    Modelo = "PUNTO T-JET",
    Preço = 62000,
    Cor = "Branco",
    AnoFabricao = 2014,
    AnoModelo = 2015
  };
  // Montando nossa String Interpolada
  var sentença = $"Modelo: {carro.Modelo} - Cor: {carro.Cor} - Valor(R$):   {carro.Preço :n2} - Ano: {carro.AnoFabricao}/{carro.AnoModelo}";
  return sentença.ToString();
}
public string GetUltimoAcessoUser(Usuario user)
{
  // usando a string interpolada conseguimos o mesmo resultado de uma forma mais simplificada
  return "\{user.UltimoAcessoCapturado:hh:mm}";
}

Listagem 5.Strings Interpoladas com expressões


public string GetStringInterpoladaFormatada()
{
  // Criando um objeto
  var p = new Produto
  {
    Descricao = "Produto Teste",
    Valor = 6.7
  };
  //Expressões lambda dentro da string interpolada. Caso o valor for < 10 aparecerá o nome promoção na nossa string de saída.
  var sentença = $"{p.Descricao} {p.Valor:c} {(p.Valor< 10 ? "promoção!" : "" )}";
  return sentença;
  // sentença: Produto Teste R
array5
nbsp;6.70promoção!
}

Na Listagem 5, além de utilizarmos a string interpolada, utilizamos também expressões dentro delas, evitando a necessidade de efetuar um teste condicional para montar a determinada mensagem.

Outro ponto interessante que podemos destacar é a evolução da estrutura das nossas classes.

Na versão anterior deixávamos o código mais limpo e organizado, com isso, os nossos get’s e set’s poderiam ser criados diretamente ao lado do atributo, como podemos ver na Listagem 6.

Listagem 6. Criação Classe C# 3.0


public class Cliente
{
  public string NomeCompleto { get; set; }
  public string Endereco { get; set; }
}

Ao chegarmos ao C# 6.0, a evolução na criação das nossas classes foi muito proveitosa, pois agora podemos criá-las através dos construtores primários já inicializando as propriedades dos nossos objetos, como mostra a Listagem 7.

Listagem 7. Criação de Classes no C# 6.0


public class Cliente(string nome, string endereco)
{
  public string NomeCompleto { get; set; } = nome;
  public string Endereco { get; set; } = endereco;
}

Existe ainda a possibilidade de criarmos a classe já atribuindo os valores de forma constante aos nossos objetos criados, como mostra a Listagem 8.

Listagem 8. Criação de Classe no C# 6.0 com constantes


public class Cliente()
{
  //Nosso construtor já será inicializado com os valores fixos
  public string NomeCompleto { get; set; } = "Thiago Santana";
  public string Endereco { get; set; } = "Av. Dr. José Thomaz Davilla Nabuco, Farolândia.";
}

Além disso, a versão C# 6.0 nos possibilita realizar uma expressão dentro da declaração dos membros e propriedades de uma classe.Ou seja, conseguimos manipular os dados que serão atribuídos às propriedades da nossa classe diretamente no construtor da mesma, como mostra a Listagem 9.

Listagem 9. String Inteporlada no construtor das nossas classes


// Declaração da classe com parâmetros
public class Cliente(string nome, string sobrenome)
{
  public string Nome { get; set; } = nome;
  public string Sobrenome { get; set; } = sobrenome;
  //retorna o nome completo do cliente
  public string NomeCompleto => $"{nome} {sobrenome}";
  // Forma antiga
  //String.Format(“{0} {1}”, nome, sobrenome);
}

Propagação do operador NULL

Com a propagação do operador NULL podemos verificar se o objeto está nulo antes de executar os métodos disponíveis e pegar os objetos filhos, como mostra a Listagem 10.

Listagem 10. Utilizando a propagação do operador NULL


public string getCEP()
{
  // Propagação do NULL até obter o CEP
  var cep = clientes?.FirstorDefault()?.Compras?.FirstOrDefault()?.Cidade?.FirstOrDefault()?.Endereco?.CEP;
  return cep.ToString();
}

Veja que utilizamos a propagação do NULL, ou seja, através de um determinado objeto conseguimos chegar até a informação de outro objeto, desde que ambos tenham ligação.No exemplo obtemos o CEP a partir das compras dos clientes.

Filtro dentro das exceções

Outro ponto bastante relevante no C# 6.0 é que agora podemos efetuar filtros dentro das exceções.Se o filtro for verdadeiro, então a captura é processada, caso contrário, a exceção não é capturada. Na Listagem 11 demonstraremos o uso dessa nova funcionalidade.

Listagem 11. Filtro de Exceções


public void testandoExcecaoCondicional()
{
  try
  {
    // Criando um objeto DateTime com uma data específica
    DateTime data = DateTime.Parse("1988-10-10");
  }
  // No Catch agora podemos montar filtros   
  catch (FormatException e) if (e.Message.StartsWith("DateTime"))
  {
    // Lançando nossa exceção caso a mesma esteja dentro do nosso filtro informado
    throw new Exception("Formatação de Data Inválido.");   
  }
  catch (FormatException e) if (!e.Message.StartsWith("DateTime"))
  {
    throw new Exception("Outra Exceção detectada.");   
  }
}

Uso de membros estáticos (Static Using)

Uma ótima novidade é o uso dos membros estáticos, que terão o intuito de deixar o código mais legível e enxuto, assim é possível usar somente um método-membro de uma classe estática já referenciada (esse recurso foi adquirido do VisualBasic).Com isso, os membros estáticos acessíveis ficam disponíveis sem a qualificação da classe.

Listagem 12. Utilizando o Static Usign


using System.Console;
// Apenas adicionamos o using da classe e com isso podemos chamar os métodos diretamente
using System.Math;
class Program
{ 
  static void Main()
  {
    // Utilizamos o método Sqrt sem precisar referenciar a classe Math (versões anteriores: Math.Sqrt)
    WriteLine(Sqrt(3 * 3 + 4 * 4));
    WriteLine(Pow(5,6));
   }
}

Na Listagem 12 demonstramos como podemos utilizar o método da classe Math sem precisar referenciar a mesma.Os métodos dessa classe ficaram estáticos nessa nova versão do C#.

Até o nosso próximo artigo!

Links

Roslyn
https://roslyn.codeplex.com/
https://github.com/dotnet/roslyn

Code Analysis
https://www.nuget.org/packages/Microsoft.VisualStudio.Azure.CodeAnalysis

Microsoft Pex
https://msdn.microsoft.com/en-us/magazine/ee819140.aspx

Code Lens
https://msdn.microsoft.com/pt-br/library/dn269218.aspx

Novidades C# 6.0 – Documentação Oficial
https://roslyn.codeplex.com/wikipage?title=Language%20Feature%20Status

Template AngularJS para Visual Studio 2015
https://visualstudiogallery.msdn.microsoft.com/5af151b2-9ed2-4809-bfe8-27566bfe7d83

GitHub da Microsoft
http://microsoft.github.io

.NET Open Source
https://github.com/Microsoft/dotnet