{"meta":{"title":"Refatorando código com GitHub Copilot","intro":"Use a inteligência artificial do Copilot para ajudar a refatorar seu código de forma rápida e eficaz.","product":"GitHub Copilot","breadcrumbs":[{"href":"/pt/enterprise-cloud@latest/copilot","title":"GitHub Copilot"},{"href":"/pt/enterprise-cloud@latest/copilot/tutorials","title":"Tutoriais"},{"href":"/pt/enterprise-cloud@latest/copilot/tutorials/refactor-code","title":"Refatorar código"}],"documentType":"article"},"body":"# Refatorando código com GitHub Copilot\n\nUse a inteligência artificial do Copilot para ajudar a refatorar seu código de forma rápida e eficaz.\n\n## Introdução\n\nA refatoração de código é o processo de reestruturar código existente sem alterar seu comportamento. Os benefícios da refatoração incluem melhorar a legibilidade do código, reduzir a complexidade, tornar o código mais fácil de manter e permitir que novos recursos sejam adicionados com mais facilidade.\n\nEste artigo fornece algumas ideias para usar o Copilot para refatorar o código em seu IDE.\n\n> \\[!NOTE] Exemplos de respostas estão incluídos nesse artigo. O GitHub Copilot Chat pode fornecer respostas diferentes das mostradas aqui.\n\n## Compreender o código\n\nAntes de modificar o código existente, certifique-se de entender sua finalidade e como ele funciona no momento. O Copilot pode ajudar você com isso.\n\n1. Selecione o código relevante no editor do IDE.\n2. Abra o chat embutido:\n\n   * **No VS Code:** Pressione <kbd>Command<kbd></kbd>+i</kbd> (Mac) ou <kbd>Ctrl+</kbd><kbd>i</kbd> (Windows/Linux).\n   * **No Visual Studio:** Pressione <kbd>Alt</kbd>+<kbd>/</kbd>.\n   * **Em IDEs JetBrains:** Pressione <kbd>Control</kbd>+<kbd>Shift</kbd>+<kbd>i</kbd> (Mac) ou <kbd>Ctrl<kbd></kbd>+Shift+</kbd><kbd>g</kbd> (Windows/Linux).\n3. No campo de entrada do chat embutido, digite uma barra (`/`).\n4. Na lista suspensa, selecione **/explain** e pressione <kbd>Enter</kbd>.\n5. Se a explicação retornada por Copilot for maior do que algumas linhas, clique em **Exibir no chat** para permitir que você leia a explicação com mais facilidade.\n\n## Otimizando código ineficiente\n\nO Copilot pode ajudar você a otimizar código, por exemplo, para fazer com que o código seja executado mais rapidamente.\n\n### Código de exemplo\n\nNas duas seções abaixo, usaremos o seguinte script bash de exemplo para demonstrar como otimizar código ineficiente:\n\n```bash\n#!/bin/bash\n\n# Find all .txt files and count lines in each\nfor file in $(find . -type f -name \"*.txt\"); do\n    wc -l \"$file\"\ndone\n```\n\n### Usar o painel do Copilot Chat\n\nO Copilot pode dizer se o código, como o script bash do exemplo, pode ser otimizado.\n\n1. Selecione o `for` loop ou todo o conteúdo do arquivo.\n\n2. Abra Copilot Chat clicando no ícone de chat na barra de atividades ou usando o atalho de teclado:\n\n   * **VS Code e Visual Studio:**<kbd>Control</kbd>+<kbd>Command</kbd>+<kbd>i</kbd> (Mac) / <kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>i</kbd> (Windows/Linux)\n   * **JetBrains**: <kbd>Control</kbd>+<kbd>Shift</kbd>+<kbd>c</kbd>\n\n3. Na caixa de entrada na parte inferior do painel de chat, digite: `Can this script be improved?`\n\n   O Copilot responde com uma sugestão que tornará o código mais eficiente.\n\n4. Para aplicar a alteração sugerida:\n\n   * **No VS Code e JetBrains:** mova o ponteiro do mouse sobre a sugestão no painel de chat e clique no ícone **Inserir no cursor**.\n\n     ![Captura de tela do ícone \"Inserir no cursor\" no painel Copilot Chat.](/assets/images/help/copilot/insert-at-cursor.png)\n\n   * **No Visual Studio:** clique em **Visualizar** e, na exibição de comparação, clique em **Aceitar**.\n\n### Usar o chat em linha do Copilot\n\nComo alternativa, se você já sabe que o código existente, como o script bash de exemplo, é ineficiente:\n\n1. Selecione o `for` loop ou todo o conteúdo do arquivo.\n\n2. Abra o chat embutido:\n\n   * **No VS Code:** Pressione <kbd>Command<kbd></kbd>+i</kbd> (Mac) ou <kbd>Ctrl+</kbd><kbd>i</kbd> (Windows/Linux).\n   * **No Visual Studio:** Pressione <kbd>Alt</kbd>+<kbd>/</kbd>.\n   * **Em IDEs JetBrains:** Pressione <kbd>Control</kbd>+<kbd>Shift</kbd>+<kbd>i</kbd> (Mac) ou <kbd>Ctrl<kbd></kbd>+Shift+</kbd><kbd>g</kbd> (Windows/Linux).\n\n3. Digite `optimize` e pressione <kbd>Enter</kbd>.\n\n   O Copilot sugere o código revisado. Por exemplo:\n\n   ```bash\n   find . -type f -name \"*.txt\" -exec wc -l {} +\n   ```\n\n   Isso é mais eficiente do que o código original mostrado anteriormente neste artigo porque o uso de `-exec ... +` permite que `find` passe vários arquivos para `wc` ao mesmo tempo, em vez de chamar `wc` uma vez para cada arquivo `*.txt` encontrado.\n\n4. Avalie a sugestão do Copilot e, se concordar com a alteração:\n\n   * **No VS Code e no Visual Studio:** Clique em **Aceitar**.\n   * **No JetBrains**: Clique no ícone Visualizar (setas duplas) e, em seguida, clique no ícone Aplicar todas as comparações (colchetes angulares duplos).\n\nComo acontece com todas as sugestões do Copilot, você deve sempre verificar se o código revisado é executado sem erros e produz o resultado correto.\n\n## Limpando código repetido\n\nEvitar a repetição tornará seu código mais fácil de revisar e depurar. Por exemplo, se o mesmo cálculo for executado mais de uma vez em locais diferentes em um arquivo, você poderá mover o cálculo para uma função.\n\nNo exemplo JavaScript muito simples a seguir, o mesmo cálculo (preço do item multiplicado pelo número de itens vendidos) é executado em dois locais.\n\n```javascript\nlet totalSales = 0;\n\nlet applePrice = 3;\nlet applesSold = 100;\ntotalSales += applePrice * applesSold;\n\nlet orangePrice = 5;\nlet orangesSold = 50;\ntotalSales += orangePrice * orangesSold;\n\nconsole.log(`Total: ${totalSales}`);\n```\n\nVocê pode solicitar ao Copilot que mova o cálculo repetido para uma função.\n\n1. Selecione todo o conteúdo do arquivo.\n\n2. Abra o chat embutido:\n\n   * **No VS Code:** Pressione <kbd>Command<kbd></kbd>+i</kbd> (Mac) ou <kbd>Ctrl+</kbd><kbd>i</kbd> (Windows/Linux).\n   * **No Visual Studio:** Pressione <kbd>Alt</kbd>+<kbd>/</kbd>.\n   * **Em IDEs JetBrains:** Pressione <kbd>Control</kbd>+<kbd>Shift</kbd>+<kbd>i</kbd> (Mac) ou <kbd>Ctrl<kbd></kbd>+Shift+</kbd><kbd>g</kbd> (Windows/Linux).\n\n3. Digite: `move repeated calculations into functions` e pressione <kbd>Enter</kbd>.\n\n   O Copilot sugere o código revisado. Por exemplo:\n\n   ```javascript\n   function calculateSales(price, quantity) {\n     return price * quantity;\n   }\n\n   let totalSales = 0;\n\n   let applePrice = 3;\n   let applesSold = 100;\n   totalSales += calculateSales(applePrice, applesSold);\n\n   let orangePrice = 5;\n   let orangesSold = 50;\n   totalSales += calculateSales(orangePrice, orangesSold);\n\n   console.log(`Total: ${totalSales}`);\n   ```\n\n4. Avalie a sugestão do Copilot e, se concordar com a alteração:\n\n   * **No VS Code e no Visual Studio:** Clique em **Aceitar**.\n   * **No JetBrains**: Clique no ícone Visualizar (setas duplas) e, em seguida, clique no ícone Aplicar todas as comparações (colchetes angulares duplos).\n\nComo acontece com todas as sugestões do Copilot, você deve sempre verificar se o código revisado é executado sem erros e produz o resultado correto.\n\n## Tornando o código mais conciso\n\nSe o código for desnecessariamente detalhado, pode ser difícil de ler e manter. O Copilot pode sugerir uma versão mais concisa do código selecionado.\n\nNo exemplo a seguir, esse código Python gera a área de um retângulo e um círculo, mas pode ser escrito de forma mais concisa:\n\n```python\ndef calculate_area_of_rectangle(length, width):\n    area = length * width\n    return area\n\ndef calculate_area_of_circle(radius):\n    import math\n    area = math.pi * (radius ** 2)\n    return area\n\nlength_of_rectangle = 10\nwidth_of_rectangle = 5\narea_of_rectangle = calculate_area_of_rectangle(length_of_rectangle, width_of_rectangle)\nprint(f\"Area of rectangle: {area_of_rectangle}\")\n\nradius_of_circle = 7\narea_of_circle = calculate_area_of_circle(radius_of_circle)\nprint(f\"Area of circle: {area_of_circle}\")\n```\n\n1. Selecione todo o conteúdo do arquivo.\n\n2. Abra o chat embutido:\n\n   * **No VS Code:** Pressione <kbd>Command<kbd></kbd>+i</kbd> (Mac) ou <kbd>Ctrl+</kbd><kbd>i</kbd> (Windows/Linux).\n   * **No Visual Studio:** Pressione <kbd>Alt</kbd>+<kbd>/</kbd>.\n   * **Em IDEs JetBrains:** Pressione <kbd>Control</kbd>+<kbd>Shift</kbd>+<kbd>i</kbd> (Mac) ou <kbd>Ctrl<kbd></kbd>+Shift+</kbd><kbd>g</kbd> (Windows/Linux).\n\n3. Digite: `make this more concise` e pressione <kbd>Enter</kbd>.\n\n   O Copilot sugere o código revisado. Por exemplo:\n\n   ```python\n   import math\n\n   def calculate_area_of_rectangle(length, width):\n     return length * width\n\n   def calculate_area_of_circle(radius):\n     return math.pi * (radius ** 2)\n\n   print(f\"Area of rectangle: {calculate_area_of_rectangle(10, 5)}\")\n   print(f\"Area of circle: {calculate_area_of_circle(7)}\")\n   ```\n\n4. Avalie a sugestão do Copilot e, se concordar com a alteração:\n\n   * **No VS Code e no Visual Studio:** Clique em **Aceitar**.\n   * **No JetBrains**: Clique no ícone Visualizar (setas duplas) e, em seguida, clique no ícone Aplicar todas as comparações (colchetes angulares duplos).\n\nComo acontece com todas as sugestões do Copilot, você deve sempre verificar se o código revisado é executado sem erros e produz o resultado correto.\n\n## Dividindo unidades complexas de código\n\nMétodos ou funções grandes que executam várias operações provavelmente oferecerão menos oportunidades de reutilização do que funções menores e mais simples que se concentram na execução de uma operação específica. Eles também podem ser mais difíceis de entender e depurar.\n\nO Copilot pode ajudar você a dividir blocos complexos de código em unidades menores que são mais adequadas para reutilização.\n\nO código Python a seguir é um exemplo muito simples, mas mostra o princípio de dividir uma única função em duas funções que executam operações específicas.\n\n```python\nimport pandas as pd\nfrom pandas.io.formats.style import Styler\n\ndef process_data(item, price):\n    # Cleanse data\n    item = item.strip()  # Strip whitespace from item\n    price = price.strip()  # Strip whitespace from price\n    price = float(price) # Convert price to a float\n    # More cleansing operations here\n\n    # Create and print a DataFrame\n    data = {'Item': [item], 'Price': [price]}\n    df = pd.DataFrame(data)\n    print(df.to_string(index=False))\n\n# Example usage\nitem = \"   Apple \"\nprice = \" 1.25\"\nprocess_data(item, price)\n```\n\nPara dividir a função `process_data`:\n\n1. Coloque o cursor no nome da função.\n\n2. Abra o chat embutido:\n\n   * **No VS Code:** Pressione <kbd>Command<kbd></kbd>+i</kbd> (Mac) ou <kbd>Ctrl+</kbd><kbd>i</kbd> (Windows/Linux).\n   * **No Visual Studio:** Pressione <kbd>Alt</kbd>+<kbd>/</kbd>.\n   * **Em IDEs JetBrains:** Pressione <kbd>Control</kbd>+<kbd>Shift</kbd>+<kbd>i</kbd> (Mac) ou <kbd>Ctrl<kbd></kbd>+Shift+</kbd><kbd>g</kbd> (Windows/Linux).\n\n3. Digite: `split into 2 separate functions: one for cleansing data, the other for printing` e pressione <kbd>Enter</kbd>.\n\n   O Copilot sugere o código revisado. Por exemplo:\n\n   ```python\n   def cleanse_data(item, price):\n     # Cleanse data\n     item = item.strip()  # Strip whitespace from item\n     price = price.strip()  # Strip whitespace from price\n     price = float(price)  # Convert price to a float\n     return item, price\n\n   def print_data(item, price):\n     # Create and print a DataFrame\n     data = {'Item': [item], 'Price': [price]}\n     df = pd.DataFrame(data)\n     print(df.to_string(index=False))\n\n   def process_data(item, price):\n     item, price = cleanse_data(item, price)\n     print_data(item, price)\n   ```\n\n   > \\[!NOTE] A sugestão de exemplo mostrada acima substitui a função existente por três funções. A terceira função simplesmente chama as outras duas funções e permite que o código existente chame a função `process_data`.\n\n4. Avalie a sugestão do Copilot e, se concordar com a alteração:\n\n   * **No VS Code e no Visual Studio:** Clique em **Aceitar**.\n   * **No JetBrains**: Clique no ícone Visualizar (setas duplas) e, em seguida, clique no ícone Aplicar todas as comparações (colchetes angulares duplos).\n\nComo acontece com todas as sugestões do Copilot, você deve sempre verificar se o código revisado é executado sem erros e produz o resultado correto.\n\n## Reescreva o código condicional para melhor legibilidade\n\nGeralmente, há várias maneiras de escrever código que é ou não executado dependendo de várias condições. Algumas estruturas condicionais são mais adequadas do que outras para casos de uso específicos, e escolher uma estrutura condicional alternativa às vezes pode facilitar a leitura do código.\n\nEste método Java usa uma série de instruções `if` e `else if` para determinar qual operação executar:\n\n```java\npublic String getSound(String animal) {\n  if (animal == null) {\n      System.out.println(\"Oops! A null animal?\");\n  } else if (animal.equalsIgnoreCase(\"Dog\")) {\n      return \"Bark\";\n  } else if ( animal.equalsIgnoreCase(\"Cat\")) {\n      return \"Meow\";\n  } else if ( animal.equalsIgnoreCase(\"Bird\")) {\n      return \"Tweet\";\n  }\n  return \"Unknown\";\n}\n```\n\nUma instrução `switch` pode ser uma maneira melhor de aplicar a mesma lógica.\n\n1. Coloque o cursor no nome do método.\n\n2. Abra o chat embutido:\n\n   * **No VS Code:** Pressione <kbd>Command<kbd></kbd>+i</kbd> (Mac) ou <kbd>Ctrl+</kbd><kbd>i</kbd> (Windows/Linux).\n   * **No Visual Studio:** Pressione <kbd>Alt</kbd>+<kbd>/</kbd>.\n   * **Em IDEs JetBrains:** Pressione <kbd>Control</kbd>+<kbd>Shift</kbd>+<kbd>i</kbd> (Mac) ou <kbd>Ctrl<kbd></kbd>+Shift+</kbd><kbd>g</kbd> (Windows/Linux).\n\n3. Digite: `rewrite the condition to use a switch and use Java 21 syntax with null case, but also add documentation and provide a better function name`.\n\n   Isso demonstra como você pode usar um único prompt para solicitar que o Copilot faça várias alterações.\n\n4. Pressione <kbd>Enter</kbd>.\n\n   O Copilot sugere o código revisado. Por exemplo:\n\n   ```java\n   /**\n    * Retrieves the sound made by a given animal.\n    * * @param animal The name of the animal.\n    * @return The sound made by the animal, or \"Unknown\" if the animal is not recognized.\n    */\n   public String getAnimalSound(String animal) {\n       return switch (animal) {\n           case null -> {\n               System.out.println(\"Oops! A null animal?\");\n               yield \"Unknown\";\n           }\n           case String a when a.equalsIgnoreCase(\"Dog\") -> \"Bark\";\n           case String a when a.equalsIgnoreCase(\"Cat\") -> \"Meow\";\n           case String a when a.equalsIgnoreCase(\"Bird\") -> \"Tweet\";\n           default -> \"Unknown\";\n       };\n   }\n   ```\n\n5. Avalie a sugestão do Copilot e, se concordar com a alteração:\n\n   * **No VS Code e no Visual Studio:** Clique em **Aceitar**.\n   * **No JetBrains**: Clique no ícone Visualizar (setas duplas) e, em seguida, clique no ícone Aplicar todas as comparações (colchetes angulares duplos).\n\nComo acontece com todas as sugestões do Copilot, você deve sempre verificar se o código revisado é executado sem erros e produz o resultado correto.\n\n## Reformatar o código para usar uma estrutura diferente\n\nSuponha que você tenha esta função em JavaScript:\n\n```javascript\nfunction listRepos(o, p) {\n return fetch(`https://api.github.com/orgs/${o}/repos?per_page=${parseInt(p)}`)\n   .then((response) => response.json())\n   .then( (data) => data);\n}\n```\n\nSe seus padrões de codificação exigirem que você use a notação de seta para funções e nomes descritivos para parâmetros, você poderá usar o Copilot para ajudá-lo a fazer essas alterações.\n\n1. Coloque o cursor no nome da função.\n2. Abra o chat embutido:\n\n   * **No VS Code:** Pressione <kbd>Command<kbd></kbd>+i</kbd> (Mac) ou <kbd>Ctrl+</kbd><kbd>i</kbd> (Windows/Linux).\n   * **No Visual Studio:** Pressione <kbd>Alt</kbd>+<kbd>/</kbd>.\n   * **Em IDEs JetBrains:** Pressione <kbd>Control</kbd>+<kbd>Shift</kbd>+<kbd>i</kbd> (Mac) ou <kbd>Ctrl<kbd></kbd>+Shift+</kbd><kbd>g</kbd> (Windows/Linux).\n3. Digite: `use arrow notation and better parameter names` e pressione <kbd>Enter</kbd>.\n\n   O Copilot sugere o código revisado. Por exemplo:\n\n   ```javascript\n   const listRepos = (org, perPage) => {\n     return fetch(`https://api.github.com/orgs/${org}/repos?per_page=${parseInt(perPage)}`)\n       .then(response => response.json())\n       .then(data => data);\n   };\n   ```\n\n## Melhorando o nome de um símbolo\n\n> \\[!NOTE]\n>\n> * Somente VS Code e Visual Studio.\n> * O suporte para esse recurso depende de ter a extensão de linguagem apropriada instalada em seu IDE para a linguagem que você está usando. Nem todas as extensões de linguagem oferecem suporte a esse recurso.\n\nNomes bem escolhidos podem ajudar a tornar a linguagem mais fácil de manter. O Copilot no VS Code e o Visual Studio podem sugerir nomes alternativos para símbolos como variáveis ou funções.\n\n1. Coloque o cursor no nome do símbolo.\n\n2. Pressione <kbd>F2</kbd>.\n\n3. **Somente Visual Studio:** Pressione <kbd>Ctrl</kbd>+<kbd>Espaço</kbd>.\n\n   O Copilot sugere nomes alternativos.\n\n   ![Captura de tela de uma lista suspensa no VS Code fornecendo alternativas para um nome de símbolo.](/assets/images/help/copilot/rename-symbol.png)\n\n4. Na lista suspensa, selecione um dos nomes sugeridos.\n\n   O nome é alterado ao longo do projeto."}