csharp06a00

Este artigo inicial fará parte de uma série breve, em que irei abordar novidades envolvendo o C# 6.0. Além de recursos que foram incorporados à linguagem, também serão detalhadas algumas funcionalidades novas que visam simplificar e agilizar o trabalho de codificação no Visual Studio 2015.

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 vem trabalhando no lançamento de uma nova versão da linguagem C#: trata-se do C# 6.0, o qual contempla novas construções de código e melhoramentos em estruturas pré-existentes.

Nesta primeira parte serão abordados os seguintes tópicos:

  • Using Static;
  • O operador nameof;
  • Removendo declarações using desnecessárias.

OBSERVAÇÃO: Todos os exemplos aqui discutidos foram implementados a partir do Visual Studio Ultimate 2015 Preview.

Using Static

O uso de métodos estáticos constitui uma prática relativamente comum, sobretudo em cenários que envolvam a conversão de valores e cálculos aritméticos. Quando uma situação como esta acontecer, não será difícil que uma classe seja referenciada inúmeras vezes ao longo de um método, construtor ou tipo que dependa da mesma. Na Listagem 1 está um exemplo disto, no qual foram utilizados os métodos Sqrt (raiz quadrada) e Power (potenciação) da classe Math.

using System;

namespace TesteUsingStatic
{
    class Program
    {
        static void Main(string[] args)
        {
            int numero = 4;

            Console.WriteLine("Número: " + numero);
            Console.WriteLine("Raiz quadrada = " + Math.Sqrt(numero));
            Console.WriteLine("4 ^ 5 = " + Math.Pow(numero, 5));
            Console.WriteLine("4 ^ 10 = " + Math.Pow(numero, 10));

            Console.ReadKey();
        }
    }
}

Listagem 1: Exemplo de utilização de métodos da classe Math

A fim de possibilitar a obtenção de um código mais enxuto, a versão 6.0 da linguagem C# disponibilizou um recurso conhecido como Using Static. A ideia com este novo tipo de construção é simplificar a invocação de métodos estáticos, dispensando o desenvolvedor da necessidade de indicar a classe à qual a operação em questão pertence. O uso deste mecanismo requer a inclusão de uma referência similar à de um namespace num arquivo .cs, empregando para isto a palavra-chave using acompanhada do nome de tipo tipo a ser omitido (este último deverá estar indicado em sua forma completa, ou seja, precedido por seu namespace correspondente).

Supondo que este recurso venha a ser utilizado com a classe Math (retomando o exemplo da Listagem 1), é possível observar que o próprio IntelliSense já incluirá os métodos estáticos deste tipo na relação de opções disponíveis (Imagem 1).


Imagem 1. IntelliSense já prevendo o recurso Using Static

Já a Listagem 2 apresenta o exemplo anterior refatorado. Após a inclusão de uma nova instrução using referenciando o tipo Math, o nome desta classe foi retirado das instruções que faziam uso dos métodos Sqrt e Power. Na Imagem 2 está o resultado da execução desta aplicação de testes.

using System;
using static System.Math; // using System.Math; - Com o VS 2015 CTP 5 tornou-se necessário o uso do "static"

namespace TesteUsingStatic
{
    class Program
    {
        static void Main(string[] args)
        {
            int numero = 4;

            Console.WriteLine("Número: " + numero);
            Console.WriteLine("Raiz quadrada = " + Sqrt(numero));
            Console.WriteLine("4 ^ 5 = " + Pow(numero, 5));
            Console.WriteLine("4 ^ 10 = " + Pow(numero, 10));

            Console.ReadKey();
        }
    }
}

Listagem 2: Exemplo de utilização do recurso Using Static com a classe Math

csharp06a02
Imagem 2. Resultado dos testes após o uso do recurso Using Static

O operador nameof

Durante a implementação de uma classe haverá casos nos quais será necessário preencher detalhes de uma ação em um log ou, mesmo, lançar uma exceção em resposta a um estado inválido para um determinado contexto. Em tais situações o ideal será que se registre o maior número possível de informações, de forma a gerar com isto uma base de conhecimento para uso futuro. Um bom detalhamento do que realmente aconteceu contribuirá não apenas para facilitar o monitoramento de uma aplicação, como também será um diferencial na resolução de eventuais problemas.

Dentre as informações que poderão ser registradas estão nomes de elementos como variáveis e parâmetros. Embora comum a identificação destes itens por meio de strings, a mudança no nome dos mesmos via refatoração poderá gerar problemas: ações deste gênero são incapazes de atualizar o conteúdo de uma sequência de texto, resultando então na gravação incorreta dos detalhes descrevendo um erro ou situação específica.

O uso do operador nameof seria a solução para este tipo de problema. Este novo recurso permite a obtenção do nome de uma variável em tempo de execução, eliminando assim o uso de strings que estariam suscetíveis a erros.

Na Listagem 3 está um exemplo de utilização do operador nameof com duas referências do tipo DateTime. O resultado da execução deste código pode ser observado na Imagem 3.

using System;

namespace TesteNameOf
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime dataExemplo1 = new DateTime(2014, 11, 01);
            DateTime dataExemplo2 = new DateTime(2014, 12, 01);

            Console.WriteLine("Variável 1: " + nameof(dataExemplo1));
            Console.WriteLine("Variável 2: " + nameof(dataExemplo2));

            Console.ReadKey();
        }
    }
}

Listagem 3: Exemplo de utilização do operador nameof

csharp06a03
Imagem 3. Resultado dos testes após o uso do operador nameof

Removendo declarações using desnecessárias

Embora releases anteriores do Visual Studio contem com uma funcionalidade para remover usings desnecessários em um arquivo .cs (no Visual Studio 2013 este recurso estava localizado no menu Edit > IntelliSense > Organize Usings > Remove Unused Usings), a IDE da versão 2015 trouxe alguns melhoramentos para simplificar a vida do desenvolvedor (Imagem 4):

  • Declarações envolvendo namespaces não utilizados ficam destacadas com uma fonte na cor cinza;
  • Um ícone com uma lâmpada (Quick Actions) aparecerá do lado direito da janela (desde que com o cursor posicionado em uma linha que corresponda a um namespace que não esteja em uso). A partir deste atalho será possível acessar a opção “Remove Unnecessary Usings”, a qual irá retirar do início de um arquivo .cs linhas de código desnecessárias.

csharp06a04
Imagem 4. Removendo usings desnecessários em um arquivo .cs

Conclusão

Conforme já mencionado anteriormente, a ideia deste post simples foi dar início a uma série apresentando as principais novidades do C# 6.0. Em artigos futuros analisarei outras mudanças na linguagem, partindo sempre de exemplos que facilitem a compreensão dos recursos disponibilizados.

Até uma próxima oportunidade!

Links

A C# 6.0 Language Preview
http://msdn.microsoft.com/en-us/magazine/dn683793.aspx

New Features in C# 6
http://blogs.msdn.com/b/csharpfaq/archive/2014/11/20/new-features-in-c-6.aspx

The New and Improved C# 6.0
http://msdn.microsoft.com/en-us/magazine/dn802602.aspx

What’s New In C# 6.0
http://channel9.msdn.com/Events/Visual-Studio/Connect-event-2014/116

Renato Groffe

Atua como consultor em atividades voltadas ao desenvolvimento de softwares há mais de 13 anos. Bacharel em Sistemas de Informação, com especialização em Engenharia de Software. Microsoft Certified Technology Specialist (Web, WCF, Distributed Applications, ADO.NET, Windows Forms), Microsoft Specialist (HTML5 with JavaScript and CSS3, Developing ASP.NET MVC 4 Web Applications), Oracle Certified Associate (PL/SQL), Sun Certified (SCJP, SCWCD), ITIL Foundation V2, Cobit 4.1 Foundation.

Facebook Google+ 

Comentários

comentarios