{"meta":{"title":"Refactorisation du code avec GitHub Copilot","intro":"Exploitez l’intelligence artificielle de Copilot pour vous aider à refactoriser votre code rapidement et efficacement.","product":"GitHub Copilot","breadcrumbs":[{"href":"/fr/copilot","title":"GitHub Copilot"},{"href":"/fr/copilot/tutorials","title":"Tutoriels"},{"href":"/fr/copilot/tutorials/refactor-code","title":"Refactoriser le code"}],"documentType":"article"},"body":"# Refactorisation du code avec GitHub Copilot\n\nExploitez l’intelligence artificielle de Copilot pour vous aider à refactoriser votre code rapidement et efficacement.\n\n## Présentation\n\nLa refactorisation de code consiste à restructurer du code existant sans en modifier le comportement. Les avantages de la refactorisation incluent l’amélioration de la lisibilité du code, la réduction de sa complexité, la facilitation de sa maintenance et la possibilité d’ajouter plus facilement de nouvelles fonctionnalités.\n\nCet article vous donne des idées pour utiliser Copilot afin de refactoriser du code dans votre IDE.\n\n> \\[!NOTE] Des exemples de réponses sont inclus dans cet article. GitHub Copilot Chat peut vous fournir des réponses différentes de celles présentées ici.\n\n## Comprendre le code\n\nAvant de modifier du code existant, vous devez vous assurer de comprendre son objectif et son fonctionnement actuel. Copilot peut vous aider.\n\n1. Sélectionnez le code pertinent dans l’éditeur de votre IDE.\n2. Ouvrez la conversation inline :\n\n   * **Dans VS Code :** appuyez sur <kbd>Commande</kbd>+<kbd>i</kbd> (Mac) ou <kbd>Ctrl</kbd>+<kbd>i</kbd> (Windows/Linux).\n   * **Dans Visual Studio :** appuyez sur <kbd>Alt</kbd>+<kbd>/</kbd>.\n   * **Dans JetBrains IDEs :** appuyez sur <kbd>Ctrl</kbd>+<kbd>Maj</kbd>+<kbd>i</kbd> (Mac) ou <kbd>Ctrl</kbd>+<kbd>Maj</kbd>+<kbd>g</kbd> (Windows/Linux).\n3. Dans la zone de saisie du chat inline, tapez une barre oblique (`/`).\n4. Dans la liste déroulante, sélectionnez **/explain** et appuyez sur <kbd>Entrée</kbd>.\n5. Si l’explication fournie par Copilot dépasse quelques lignes, cliquez sur **Afficher dans le Chat** pour la lire plus facilement.\n\n## Optimisation d’un code inefficace\n\nCopilot peut vous aider à optimiser du code, par exemple, pour l’exécuter plus rapidement.\n\n### Exemple de code\n\nDans les deux sections ci-dessous, nous utiliserons l’exemple de script bash suivant pour montrer comment optimiser un code inefficace :\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### Utiliser le panneau Discussion avec Copilot\n\nCopilot peut vous dire si un code, comme l’exemple de script bash, peut être optimisé.\n\n1. Sélectionnez l'`for` loop ou l’intégralité du contenu du fichier.\n\n2. Ouvrez Discussion avec Copilot en cliquant sur l’icône de chat dans la barre d’activité ou en utilisant le raccourci clavier :\n\n   * **VS Code et 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. Dans la zone de saisie au bas du panneau de chat, tapez : `Can this script be improved?`\n\n   Copilot répond par une suggestion rendant le code plus efficace.\n\n4. Pour appliquer la modification suggérée :\n\n   * **Dans VS Code et JetBrains :** survolez la suggestion dans le panneau de chat et cliquez sur l’icône **Insérer à l'emplacement du curseur**.\n\n     ![Capture d’écran de l’icône « Insert at cursor » dans le panneau Discussion avec Copilot.](/assets/images/help/copilot/insert-at-cursor.png)\n\n   * **Dans Visual Studio :** cliquez sur **Aperçu** puis, dans la vue de comparaison, cliquez sur **Accepter**.\n\n### Utiliser le chat inline de Copilot\n\nAutre possibilité : si vous savez déjà que le code existant, comme l’exemple de script bash, est inefficace :\n\n1. Sélectionnez l'`for` loop ou l’intégralité du contenu du fichier.\n\n2. Ouvrez la conversation inline :\n\n   * **Dans VS Code :** appuyez sur <kbd>Commande</kbd>+<kbd>i</kbd> (Mac) ou <kbd>Ctrl</kbd>+<kbd>i</kbd> (Windows/Linux).\n   * **Dans Visual Studio :** appuyez sur <kbd>Alt</kbd>+<kbd>/</kbd>.\n   * **Dans JetBrains IDEs :** appuyez sur <kbd>Ctrl</kbd>+<kbd>Maj</kbd>+<kbd>i</kbd> (Mac) ou <kbd>Ctrl</kbd>+<kbd>Maj</kbd>+<kbd>g</kbd> (Windows/Linux).\n\n3. Tapez `optimize`, puis appuyez sur <kbd>Entrée</kbd>.\n\n   Copilot propose une version révisée du code. Voici un exemple :\n\n   ```bash\n   find . -type f -name \"*.txt\" -exec wc -l {} +\n   ```\n\n   Elle est plus efficace que le code original présenté plus haut dans cet article, car l’utilisation de `-exec ... +` permet à `find` de transmettre plusieurs fichiers à `wc` en une seule fois, plutôt que d’appeler `wc` une fois pour chaque fichier `*.txt` trouvé.\n\n4. Évaluez les suggestions Copilot et, si vous acceptez la modification :\n\n   * **Dans VS Code et Visual Studio :** cliquez sur **Accepter**.\n   * **Dans JetBrains** : cliquez sur l’icône Aperçu (flèches doubles), puis sur l’icône Appliquer tous les différences (crochets doubles).\n\nComme avec toutes les suggestions Copilot, vous devez toujours vérifier que le code révisé s’exécute sans erreurs et produit le résultat correct.\n\n## Nettoyage de code répété\n\nÉviter les répétitions facilite la révision et le débogage du code. Par exemple, si un même calcul est effectué à plusieurs endroits dans un fichier, vous pouvez déplacer ce calcul dans une fonction.\n\nDans l’exemple JavaScript très simple suivant, le même calcul (prix de l’article multiplié par le nombre d’articles vendus) est réalisé à deux endroits.\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\nVous pouvez demander à Copilot de déplacer ce calcul répété dans une fonction.\n\n1. Sélectionnez tout le contenu du fichier.\n\n2. Ouvrez la conversation inline :\n\n   * **Dans VS Code :** appuyez sur <kbd>Commande</kbd>+<kbd>i</kbd> (Mac) ou <kbd>Ctrl</kbd>+<kbd>i</kbd> (Windows/Linux).\n   * **Dans Visual Studio :** appuyez sur <kbd>Alt</kbd>+<kbd>/</kbd>.\n   * **Dans JetBrains IDEs :** appuyez sur <kbd>Ctrl</kbd>+<kbd>Maj</kbd>+<kbd>i</kbd> (Mac) ou <kbd>Ctrl</kbd>+<kbd>Maj</kbd>+<kbd>g</kbd> (Windows/Linux).\n\n3. Tapez : `move repeated calculations into functions` et appuyez sur <kbd>Entrée</kbd>.\n\n   Copilot propose une version révisée du code. Voici un exemple :\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. Évaluez les suggestions Copilot et, si vous acceptez la modification :\n\n   * **Dans VS Code et Visual Studio :** cliquez sur **Accepter**.\n   * **Dans JetBrains** : cliquez sur l’icône Aperçu (flèches doubles), puis sur l’icône Appliquer tous les différences (crochets doubles).\n\nComme avec toutes les suggestions Copilot, vous devez toujours vérifier que le code révisé s’exécute sans erreurs et produit le résultat correct.\n\n## Rendre le code plus concis\n\nSi un code est inutilement verbeux, il peut devenir difficile à lire et à maintenir. Copilot peut suggérer une version plus concise du code sélectionné.\n\nDans l’exemple suivant, ce code Python affiche l’aire d’un rectangle et d’un cercle, mais il pourrait être écrit de manière plus concise :\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. Sélectionnez tout le contenu du fichier.\n\n2. Ouvrez la conversation inline :\n\n   * **Dans VS Code :** appuyez sur <kbd>Commande</kbd>+<kbd>i</kbd> (Mac) ou <kbd>Ctrl</kbd>+<kbd>i</kbd> (Windows/Linux).\n   * **Dans Visual Studio :** appuyez sur <kbd>Alt</kbd>+<kbd>/</kbd>.\n   * **Dans JetBrains IDEs :** appuyez sur <kbd>Ctrl</kbd>+<kbd>Maj</kbd>+<kbd>i</kbd> (Mac) ou <kbd>Ctrl</kbd>+<kbd>Maj</kbd>+<kbd>g</kbd> (Windows/Linux).\n\n3. Tapez : `make this more concise` et appuyez sur <kbd>Entrée</kbd>.\n\n   Copilot propose une version révisée du code. Voici un exemple :\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. Évaluez les suggestions Copilot et, si vous acceptez la modification :\n\n   * **Dans VS Code et Visual Studio :** cliquez sur **Accepter**.\n   * **Dans JetBrains** : cliquez sur l’icône Aperçu (flèches doubles), puis sur l’icône Appliquer tous les différences (crochets doubles).\n\nComme avec toutes les suggestions Copilot, vous devez toujours vérifier que le code révisé s’exécute sans erreurs et produit le résultat correct.\n\n## Scinder des unités de code complexes\n\nLes méthodes ou fonctions volumineuses effectuant plusieurs opérations offrent généralement moins de possibilités de réutilisation que des fonctions plus petites, centrées sur une mission précise. Elles peuvent également être plus difficiles à comprendre et à déboguer.\n\nCopilot peut vous aider à diviser des blocs de code complexes en unités plus petites, mieux adaptées à la réutilisation.\n\nLe code Python suivant est un exemple très simple, mais illustre le principe de division d’une fonction en deux fonctions effectuant des opérations particulières.\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\nPour diviser la fonction `process_data` :\n\n1. Placez le curseur sur le nom de la fonction.\n\n2. Ouvrez la conversation inline :\n\n   * **Dans VS Code :** appuyez sur <kbd>Commande</kbd>+<kbd>i</kbd> (Mac) ou <kbd>Ctrl</kbd>+<kbd>i</kbd> (Windows/Linux).\n   * **Dans Visual Studio :** appuyez sur <kbd>Alt</kbd>+<kbd>/</kbd>.\n   * **Dans JetBrains IDEs :** appuyez sur <kbd>Ctrl</kbd>+<kbd>Maj</kbd>+<kbd>i</kbd> (Mac) ou <kbd>Ctrl</kbd>+<kbd>Maj</kbd>+<kbd>g</kbd> (Windows/Linux).\n\n3. Tapez : `split into 2 separate functions: one for cleansing data, the other for printing` et appuyez sur <kbd>Entrée</kbd>.\n\n   Copilot propose une version révisée du code. Voici un exemple :\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] La suggestion présentée ci-dessus remplace la fonction existante par trois fonctions. La troisième fonction appelle simplement les deux autres, ce qui permet de conserver la compatibilité avec le code existant appelant la fonction `process_data`.\n\n4. Évaluez les suggestions Copilot et, si vous acceptez la modification :\n\n   * **Dans VS Code et Visual Studio :** cliquez sur **Accepter**.\n   * **Dans JetBrains** : cliquez sur l’icône Aperçu (flèches doubles), puis sur l’icône Appliquer tous les différences (crochets doubles).\n\nComme avec toutes les suggestions Copilot, vous devez toujours vérifier que le code révisé s’exécute sans erreurs et produit le résultat correct.\n\n## Réécrire du code conditionnel pour une meilleure lisibilité\n\nIl existe souvent plusieurs façons d’écrire du code qui s’exécute ou non selon certaines conditions. Certaines structures conditionnelles conviennent mieux que d’autres à certains cas d’usage, et choisir une structure alternative peut parfois améliorer la lisibilité du code.\n\nCette méthode Java utilise une série d’instructions `if` et `else if` pour déterminer quelle opération effectuer :\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\nUne instruction `switch` pourrait mieux convenir pour appliquer la même logique.\n\n1. Placez le curseur dans le nom de la méthode.\n\n2. Ouvrez la conversation inline :\n\n   * **Dans VS Code :** appuyez sur <kbd>Commande</kbd>+<kbd>i</kbd> (Mac) ou <kbd>Ctrl</kbd>+<kbd>i</kbd> (Windows/Linux).\n   * **Dans Visual Studio :** appuyez sur <kbd>Alt</kbd>+<kbd>/</kbd>.\n   * **Dans JetBrains IDEs :** appuyez sur <kbd>Ctrl</kbd>+<kbd>Maj</kbd>+<kbd>i</kbd> (Mac) ou <kbd>Ctrl</kbd>+<kbd>Maj</kbd>+<kbd>g</kbd> (Windows/Linux).\n\n3. Entrez : `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   Cela montre comment un seul prompt peut demander à Copilot d’effectuer plusieurs modifications.\n\n4. Appuyez sur <kbd>Entrée</kbd>.\n\n   Copilot propose une version révisée du code. Voici un exemple :\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. Évaluez les suggestions Copilot et, si vous acceptez la modification :\n\n   * **Dans VS Code et Visual Studio :** cliquez sur **Accepter**.\n   * **Dans JetBrains** : cliquez sur l’icône Aperçu (flèches doubles), puis sur l’icône Appliquer tous les différences (crochets doubles).\n\nComme avec toutes les suggestions Copilot, vous devez toujours vérifier que le code révisé s’exécute sans erreurs et produit le résultat correct.\n\n## Reformater du code selon une structure différente\n\nSupposons que vous ayez cette fonction en 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\nSi vos normes de codage exigent l’utilisation de la notation en flèche pour les fonctions, ainsi que des noms de paramètres descriptifs, vous pouvez utiliser Copilot pour vous aider à effectuer ces modifications.\n\n1. Placez le curseur sur le nom de la fonction.\n2. Ouvrez la conversation inline :\n\n   * **Dans VS Code :** appuyez sur <kbd>Commande</kbd>+<kbd>i</kbd> (Mac) ou <kbd>Ctrl</kbd>+<kbd>i</kbd> (Windows/Linux).\n   * **Dans Visual Studio :** appuyez sur <kbd>Alt</kbd>+<kbd>/</kbd>.\n   * **Dans JetBrains IDEs :** appuyez sur <kbd>Ctrl</kbd>+<kbd>Maj</kbd>+<kbd>i</kbd> (Mac) ou <kbd>Ctrl</kbd>+<kbd>Maj</kbd>+<kbd>g</kbd> (Windows/Linux).\n3. Tapez : `use arrow notation and better parameter names` et appuyez sur <kbd>Entrée</kbd>.\n\n   Copilot propose une version révisée du code. Voici un exemple :\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## Amélioration du nom d’un symbole\n\n> \\[!NOTE]\n>\n> * VS Code et Visual Studio uniquement.\n> * La prise en charge de cette fonctionnalité dépend de l’extension de langage installée dans votre IDE pour le langage utilisé. Toutes les extensions de langage ne prennent pas en charge cette fonctionnalité.\n\nDes noms bien choisis peuvent rendre le code plus facile à maintenir. Copilot dans VS Code et Visual Studio peut suggérer d’autres noms pour des symboles tels que des variables ou des fonctions.\n\n1. Placez le curseur dans le nom du symbole.\n\n2. Appuyez sur <kbd>F2</kbd>.\n\n3. ```\n          **Visual Studio uniquement :** appuyez sur <kbd>Ctrl</kbd>+<kbd>Espace</kbd>.\n   ```\n\n   Copilot propose des noms alternatifs.\n\n   ![Capture d’écran d’une liste déroulante dans VS Code proposant des alternatives pour un nom de symbole.](/assets/images/help/copilot/rename-symbol.png)\n\n4. Dans la liste déroulante, sélectionnez l’un des noms proposés.\n\n   Le nom est modifié tout au long du projet."}