Novembro de 2017

Volume 33 - Número 11

Visual Studio - Edição e Depuração do Código no Visual Studio para Mac

Por Alessandro Del Del | Novembro de 2017

O Visual Studio para Mac é o novo e avançado ambiente de desenvolvimento nativo da Microsoft que representa perfeitamente a visão para celulares e nuvem da empresa. Ele o ajuda a criar aplicativos de plataforma cruzada com o Xamarin e o .NET Core — e jogos com o Unity — usando suas habilidades com o .NET e suas linguagens de programação favoritas, como C# e F#. Você encontrará uma introdução ao Visual Studio para Mac em msdn.com/magazine/mt790182. Neste artigo, focarei em alguns recursos avançados no editor de códigos e nas ferramentas de depuração que o ajudarão a aumentar sua produtividade.

Um Editor de Código da Plataforma Roslyn

O Visual Studio para Mac permite que você escreva código em C# e F# no macOS. Isso é possível porque o IDE aproveita a plataforma do compilador do .NET, também chamado de Projeto “Roslyn” (github.com/dotnet/roslyn). O Roslyn fornece compiladores do .NET com plataforma cruzada e de software livre que expõem APIs de análise sofisticada de códigos. Como no Visual Studio 2015 e 2017 no Windows, o Roslyn habilita o editor de códigos no Visual Studio para Mac, fornecendo uma experiência de codificação aprimorada com colorização de sintaxe, IntelliSense, detecção de problemas de código ao vivo, correções e refatorações. A documentação oficial explica como usar correções de código e refatorações em geral (bit.ly/2jKt69D). Portanto, neste artigo vou focar mais especificamente em recursos e capacidades, como a geração de tipos, remoção de código redundante, navegação em códigos, adição de suporte para linguagens personalizadas e trechos de código. Todos esses recursos estão disponíveis nos projetos Xamarin e .NET Core.

Geração rápida de tipos

Um dos melhores recursos de produtividade no editor de códigos é a capacidade de gerar novos tipos durante a codificação, sem perder o foco no editor ativo. Por exemplo, você pode escrever o nome de um tipo que ainda não existe e, quando o editor de código destacá-lo como um problema de código, clique com o botão direito do mouse nele (ou pressione Alt+Enter) e selecione Correção Rápida | Gerar Tipo. A Figura 1 mostra um exemplo baseado na geração de um tipo chamado Pessoa.

Geração de um novo tipo ao usar o editor ativo

Figura 1 - Geração de um novo tipo ao usar o editor ativo

A primeira opção, Gerar classe ‘Pessoa’ em novo arquivo, gera uma nova classe chamada Pessoa, com o modificador interno dentro de um novo arquivo chamado Person.cs. A segunda opção, Gerar classe ‘Pessoa’, gera uma nova classe chamada Pessoa, com o modificador interno dentro do arquivo atual. A terceira opção, Gerar classe ‘Pessoa’ aninhada, gera uma nova classe privada chamada Pessoa aninhada dentro do tipo que está ativo no editor de código (neste caso, a nova classe seria gerada dentro da classe Programa). Você pode, em seguida, alterar o modificador interno ou privado manualmente ou clicando com o botão direito do mouse no modificador e selecionando Correção Rápida. Em todos os casos, a nova classe é gerada com um construtor vazio. A quarta opção, Gerar novo tipo, mostra uma caixa de diálogo na qual você pode especificar o tipo que deseja criar (classe, interface ou enumeração), o modificador de acesso e o destino. E você não está limitado a isso, pode usar a mesma técnica para adicionar membros ao tipo gerado recentemente. Basta atribuir ou chamar uma propriedade, campo ou método que ainda não exista e aproveitar correções rápidas para adicioná-lo rapidamente, conforme demonstrado na Figura 2, que mostra como adicionar uma nova propriedade chamada Sobrenome à classe Pessoa. A opção Gerar variável ‘Sobrenome’ fornece diferentes sugestões com base no contexto atual.

Geração de um novo membro

Figura 2 - Geração de um novo membro

Neste caso, o código está fazendo uma atribuição, para que o editor de código sugira que você gere uma nova propriedade ou campo. Com base no código, o editor de código também atribuirá o tipo apropriado ao membro recentemente gerado, o que significa que ele gerará uma propriedade (ou campo) de cadeia de tipo. O editor de código pode analisar chamadas de método e gerar assinaturas de método correspondentes. Este recurso é parte da ferramenta de refatoração de código e o ajuda a manter o foco no código enquanto escreve.

Remoção de código redundante

O editor de código no Visual Studio para Mac também destaca código redundante, ou seja, código desnecessário e não utilizado. O código redundante é facilmente reconhecível porque ele fica esmaecido. Em segundo plano, o código redundante é destacado com base em algumas regras de análise de fonte que fazem com que o código redundante seja considerado um problema. (Você pode controlar essas regras, mas isso está fora do nosso escopo aqui.) Na maioria das vezes, você encontrará exemplos de código redundante com base em inutilidade usando diretivas, mas o reconhecimento de código redundante não se limita a isso. Por exemplo, um construtor vazio e o modificador interno são destacados como redundantes na Figura 3.

Remoção de código redundante

Figura 3 - Remoção de código redundante

Se você clicar com o botão direito do mouse em algum código redundante, que é reconhecido por ter uma cor mais clara, selecione Correção Rápida, e o Visual Studio mostrará uma correção de código que removerá o código desnecessário. Adicionalmente, pode ver um submenu Opções que permite:

  • Suprimir a detecção de problemas atual.
  • Configurar a regra de análise mais detalhadamente nas preferências do Visual Studio.
  • Aplicar a correção de código para vários problemas do mesmo tipo no documento, projeto ou solução.

Da mesma forma, no exemplo anterior, você pode corrigir facilmente os modificadores internos redundantes para definições de tipo (interno é, na verdade, o modificador padrão em C#). Essa técnica se aplica a qualquer regra de análise que destaca código redundante no editor.

A navegação entre os arquivos de código e membros em um arquivo de código é extremamente comum, e ter ferramentas de navegação avançadas integradas ajuda drasticamente na produtividade. O Visual Studio para Mac fornece uma série de ferramentas robustas que facilitam a navegação entre arquivos, tipos e membros. Primeiro de tudo, você pode se mover rapidamente entre arquivos de código pressionando CTRL+Tab. Esta ação mostra um popup onde você pode ver uma lista de arquivos na sua solução. Se você pressionar CTRL+Tab novamente, a lista rola para baixo e, quando você soltar, o arquivo selecionado será aberto no editor. Em relação à navegação do código-fonte, as próximas subseções falam sobre os recursos de produtividade menos conhecidos mas incrivelmente úteis.

As ferramentas Localizar Todas as Referências e Navegar

A ferramenta Localizar Todas as Referências permite que você recupere todas as referências a um tipo ou membro na solução. Para ver essa ferramenta em ação, basta clicar com o botão direito do mouse em um tipo ou nome de membro no editor de código e, em seguida, selecionar Localizar Todas as Referências. As referências são mostradas no painel Resultados da Pesquisa, como mostrado na Figura 4.

Localização de referências de um tipo ou membro

Figura 4 - Localização de referências de um tipo ou membro

No painel de Resultados da Pesquisa, você pode ver (da esquerda para a direita) o projeto que contém a referência, o arquivo de código, incluindo a posição, o texto do código-fonte, que continha o objeto referenciado, e o caminho completo do arquivo de origem. Você pode clicar duas vezes em uma referência, o editor de código abrirá o arquivo de código apropriado e colocará o cursor na ocorrência selecionada. Observe como o código-fonte na coluna Texto tem uma colorização de sintaxe básica. A opção Localizar Todas as Referências é muito avançada, mas às vezes você pode desejar filtrar sua pesquisa com base em determinado tipo ou nas características dos membros. Para fazer isso, você pode usar a ferramenta Navegar, chamada quando clica-se com o botão direito do mouse em um tipo ou membro e, em seguida, seleciona-se Navegar. Você verá um submenu que mostra as seguintes opções de pesquisa:

Localizar Referências de Todas as Sobrecargas localiza todas as referências de um método e suas sobrecargas.

Símbolos de Base permite localizar a lista de tipos e interfaces base que o tipo no qual você chamou a ferramenta Navegar está herdando ou implementando. No caso de métodos, a ferramenta Navegar localizará a lista de métodos que o método atual está substituindo.

Símbolos Derivados permite localizar a lista de tipos que herdam do tipo no qual você chamou a ferramenta Navegar. No caso de métodos, ele localiza a lista de métodos que estão substituindo aquele no qual você chamou a ferramenta Navegar.

Métodos de Extensão localiza todos os métodos de extensão para o tipo no qual você chamou a ferramenta Navegar e que estão definidos na solução atual.

Sobrecargas de Membros é semelhante aos Métodos de Extensão, mas localiza a lista de sobrecargas de método definidas na solução atual.

Implementação de Membros, se chamada em uma classe ou interface abstrata, mostra a lista de tipos e membros que implementam esse tipo ou interface.

A ferramenta Navegar mostra os resultados da pesquisa no painel Resultados da Pesquisa exatamente como a opção Localizar Todas as Referências.

A barra de rolagem e o modo Minimapa

A barra de rolagem do editor de código exibe marcadores coloridos que representam problemas de código, como avisos e erros, pontos de interrupção, lista de afazeres e um ponto colorido na parte superior, que será vermelho se o arquivo ativo contiver erros, amarelo se contiver avisos ou verde se nenhum problema for detectado. Além disso, a barra de rolagem fornece o chamado modo Minimapa. Quando este modo está habilitado, a barra de rolagem exibe uma visualização do código-fonte para facilitar a navegação, conforme mostrado na Figura 5.

O modo Minimapa da barra de rolagem

Figura 5 - O modo Minimapa da barra de rolagem

Você habilita o modo Minimapa clicando com o botão direito do mouse na barra de rolagem e selecionando Mostrar Minimapa. Você pode clicar em uma área no mapa e o editor de código moverá o cursor para o ponto apropriado. Para desabilitar o modo Minimapa, clique com o botão direito do mouse na barra de rolagem novamente e selecione Mostrar Tarefas. O modo Minimapa é especialmente útil com arquivos grandes e o ajuda a ter uma representação visual do arquivo como um todo.

Procura de objetos em um arquivo de códigos

O Visual Studio para Mac oferece modos visuais para você procurar facilmente tipos e membros em um arquivo de código. Cada janela do editor de código mostra trilhas nas quais você pode clicar para ver uma lista dos tipos definidos no editor ativo. Quando você seleciona um tipo, uma guia adicional permite exibir a lista de seus membros. Além disso, você pode usar o painel Estrutura de Documentos para obter uma representação visual da estrutura do tipo no arquivo ativo (confira a Figura 6).

Procura de objetos em um arquivo de códigos

Figura 6 - Procura de objetos em um arquivo de código

Observe como diferentes ícones representam os diferentes tipos de membros. Você já pode conhecer o painel Estrutura de Documentos por seus recursos para mostrar a hierarquia visual da IU, mas também pode usá-lo para obter uma visão da estrutura de um tipo, o que é muito útil. Você pode simplesmente clicar duas vezes em um objeto na Estrutura de Documentos, e o editor moverá o cursor para sua definição.

Como trabalhar com trechos de código

O Visual Studio para Mac dá suporte a trechos de código do IntelliSense — modelos de bloco de código pré-escritos que podem ser personalizados para atender às suas necessidades. Se você tem experiência com o Visual Studio no Windows, já sabe o que são trechos de código. No Visual Studio para Mac, você tem duas opções para inserir um trecho de código. A primeira opção é clicar com o botão direito do mouse no editor de código e selecionar Inserir Modelo. Uma lista de trechos de código disponíveis será exibida e você deve selecionar somente o que precisar. A segunda opção é escolher um trecho de código da lista de conclusão do IntelliSense enquanto digita. A Figura 7 mostra um exemplo em que um trecho de código é destacado (você pressiona Tab duas vezes para inserir o trecho).

Adição de um trecho de código

Figura 7 - Adição de um trecho de código

Trechos de código são representados pelo ícone (…), o que os tornam imediatamente reconhecíveis. Em ambos os casos, uma dica de ferramenta descreve o objetivo do trecho do código quando você passa o mouse sobre seu nome. O Visual Studio para Mac também permite que você crie novos trechos de código personalizados e edite os existentes no IDE, sem a necessidade de ferramentas externas. Para fazer isso, selecione Preferências no menu do Visual Studio. Em seguida, na caixa de diálogo Preferências, localize e selecione o item Trechos de código, em Editor de Texto. Lá você verá uma lista de trechos de código agrupados por idioma. Se você selecionar um trecho existente, basta pressionar o botão Editar para editar o código. Se, em vez disso, você clicar em Adicionar, terá a opção de criar um novo trecho de código. Isso é feito na caixa de diálogo Novo modelo, onde você fornece um atalho de teclado, uma descrição, um tipo MIME, um grupo de idiomas e, é claro, o código-fonte. A Figura 8 mostra um exemplo.

Criação de um trecho de código personalizado

Figura 8 - Criação de um trecho de código personalizado

Observe que o símbolo $ é usado para marcar identificadores para substituição, enquanto a expressão $selected$$end$ delimita o trecho atual. Quando você marca identificadores para substituição, também pode fornecer informações adicionais sobre o próprio identificador, como seu valor padrão e uma dica de ferramenta, que descreve seu significado, nas caixas à direita da caixa de diálogo. Quando terminar, clique em OK e feche a caixa de diálogo Preferências. Nesse momento, seu novo trecho de código está na biblioteca de trechos e pronto para ser usado no editor de código por meio do IntelliSense. Vale a pena ressaltar que você pode editar os trechos existentes para atribuir um atalho de teclado, se ainda não houver nenhum disponível. Isso permite que você digite o atalho de teclado no editor de código e insira um trecho mais rapidamente. Se você for como eu e usar trechos de código com frequência, ter a opção de criá-los no IDE poupará muito tempo.

Adição de idiomas personalizados

Uma das coisas que você vai gostar no Visual Studio para Mac é a capacidade de adicionar novos idiomas que não estão incluídos na caixa, cuja gramática é baseada nos padrões TextMate e Sublime Text. Na verdade, o Visual Studio para Mac oferece suporte a ambos os padrões e permite adicionar pacotes de idioma que oferecem recursos de edição, como colorização de sintaxe, trechos de código e preenchimento automático de palavras. Por exemplo, vamos supor que você deseja adicionar suporte à sintaxe para editar arquivos Swift, que poderiam ser muito úteis em um Mac. Tanto no padrão TextMate quanto no Sublime Text, você instala um pacote de idiomas Swift e, em seguida, o exporta para o disco. Em seguida, pode importar o pacote de idiomas no Visual Studio para Mac. Para fazer isso, use o nó Pacotes de Idiomas da caixa de diálogo Preferências. Aqui você poderá clicar em Adicionar e selecionar o pacote de idiomas exportado anteriormente. Neste ponto, é possível abrir arquivos .swift (ou outros tipos de arquivo, dependendo do pacote importado) e aproveitar os recursos, como colorização de sintaxe e dobra de blocos de código.

O editor de código também permite que você insira trechos de código se o pacote de idiomas selecionado incluir algum. Obviamente, o Visual Studio para Mac não oferece suporte à compilação de arquivos de código-fonte nem à criação e publicação de aplicativos baseados em pacotes de idiomas externos. O que você pode fazer é automatizar a execução de ferramentas externas, como compiladores, com o comando Editar Ferramentas Personalizadas no menu Opções.

Depuração da produtividade com painéis e a classe de depuração

A depuração é extremamente importante, e o Visual Studio para Mac é fornecido com o tipo de ferramentas de depuração de primeira classe das quais todo desenvolvedor precisa para criar aplicativos de alta qualidade de forma produtiva. A documentação oficial (bit.ly/2xgJkx0) descreve as ferramentas mais comumente usadas, como pontos de interrupção, visualizadores de dados e controle de fluxo condicional. Vou descrever outros recursos ótimos que você pode querer conhecer, especialmente se estiver familiarizado com a depuração no Visual Studio no Windows e espera ver as mesmas ferramentas no Mac. Vamos começar com a classe System.Diagnostics.Debug, que permite que você imprima a avaliação de uma expressão para o painel Saída de Aplicativo do código C#, sem interromper a execução de um aplicativo. Vamos supor que você tem um aplicativo de console .NET Core que espera que o usuário insira o seguinte código:

string inputString = Console.ReadLine();
Debug.WriteLine($"The entered string is {inputString.Length} characters long");

O método Debug.WriteLine imprime a expressão para o painel Saída da Aplicação, conforme mostra a Figura 9, sem interromper a execução do aplicativo. Nesse caso, a expressão é uma cadeia de caracteres interpolada que contém o comprimento da cadeia inserida pelo usuário.

O resultado de uma avaliação impressa no painel Saída do Aplicativo

Figura 9 - O resultado de uma avaliação impressa no painel Saída do Aplicativo

Você não está limitado ao método WriteLine. Na verdade, pode usar todos os outros métodos com suporte, como Assert, Equals, Fail, Write, WriteIf e WriteLineIf (confira bit.ly/2ydS8jO para obter detalhes).

No Visual Studio para Mac, existem outras formas de avaliar expressões e inspecionar valores de objetos durante a depuração. Você pode usar pontos de interrupção e visualizadores de dados, mas também pode usar o painel Assistir, cujo objetivo é fornecer uma forma de monitorar visualmente variáveis, métodos e expressões. Enquanto estiver no modo de interrupção, a janela Inspeção será automaticamente habilitada e você poderá clicar dentro dela para adicionar um novo objeto ao monitor. A Figura 10 mostra um exemplo baseado no valor de uma propriedade.

Monitoramento de objetos com o painel Assistir

Figura 10 - Monitoramento de objetos com o painel Assistir

Para cada objeto que você monitorar, poderá ver seus membros e seus valores. Você também pode clicar no valor e alterá-lo para que possa ver como seu código se comporta com um valor de objeto diferente. O painel Assistir ainda fornece atalhos para visualizadores de dados, que você pode reconhecer por meio dos ícones de olho e lápis. Você também localizará outros dois painéis de depuração muito úteis: Threads e Pilha de Chamadas, ambos visíveis na Figura 11.

Monitoramento de threads e chamadas de método com os painéis Threads e Pilha de Chamadas

Figura 11 - Monitoramento de threads e chamadas de método com os painéis Threads e Pilha de Chamadas

O painel Threads mostra a lista dos threads em execução e é útil para entender as localizações de código nas quais os diversos threads dos seus aplicativos estão interrompidos. Ele mostra a ID do thread, o nome e o local do código que se refere a cada thread. Você também pode inserir um nome para os threads se ainda não existir nenhum. O painel Pilha de Chamadas mostra a hierarquia das chamadas de método, e você pode habilitá-lo para exibir também chamadas de código que não estão na solução, por exemplo, quadros de interoperabilidade. Para fazer isso, clique com o botão direito do mouse no painel e habilite a opção Mostrar Código Externo. Ao aproveitar todos eles, você tem um conjunto completo e avançado de ferramentas de depuração que, em conjunto com pontos de interrupção, o painel Locais e o visualizador de dados, dão controle total sobre suas soluções .NET Core e Xamarin.

Conclusão

O Visual Studio para Mac não apenas ajuda a criar aplicativos de plataforma cruzada para dispositivos móveis e nuvem com o Xamarin e o .NET Core no macOS, ele também oferece todas as ferramentas de produtividade de que você precisa para escrever código de alta qualidade. Isso inclui recursos de produtividade no editor de código e nas ferramentas de depuração que farão você se sentir em casa com este IDE, especialmente se tiver experiência com o Visual Studio no Windows.


Alessandro Del Sole é Microsoft MVP desde 2008. Premiado cinco vezes como MVP of the Year, é autor de muitos livros, eBooks, vídeos instrutivos e artigos sobre o desenvolvimento em .NET com o Visual Studio. Alessandro trabalha como desenvolvedor sênior de .NET com foco em desenvolvimento, treinamento e consultoria para .NET e aplicativos móveis. Recentemente, ele escreveu um livro chamado “Beginning Visual Studio for Mac” (Introdução ao Visual Studio para Mac) (bit.ly/2hsRxYx), que será lançado em breve. Você pode segui-lo no Twitter: @progalex.

Agradecemos aos seguintes especialistas técnicos da Microsoft pela revisão deste artigo: Mikayla Hutchinson


Discuta esse artigo no fórum do MSDN Magazine