{"meta":{"title":"Refactorización de código con GitHub Copilot","intro":"Saque provecho de la inteligencia artificial de Copilot para ayudarle a refactorizar el código de forma rápida y eficaz.","product":"GitHub Copilot","breadcrumbs":[{"href":"/es/copilot","title":"GitHub Copilot"},{"href":"/es/copilot/tutorials","title":"Tutoriales"},{"href":"/es/copilot/tutorials/refactor-code","title":"Refactorizar código"}],"documentType":"article"},"body":"# Refactorización de código con GitHub Copilot\n\nSaque provecho de la inteligencia artificial de Copilot para ayudarle a refactorizar el código de forma rápida y eficaz.\n\n## Presentación\n\nLa refactorización de código es el proceso de reestructuración del código existente sin cambiar su comportamiento. Las ventajas de la refactorización incluyen mejorar la legibilidad del código, reducir la complejidad, facilitar el mantenimiento del código y permitir que se agreguen más fácilmente nuevas características.\n\nEn este artículo se proporcionan algunas ideas para usar Copilot a fin de refactorizar el código en el IDE.\n\n> \\[!NOTE] En este artículo se incluyen respuestas de ejemplo. Copilot Chat de GitHub puede proporcionar respuestas diferentes de las que se muestran aquí.\n\n## Descripción del código\n\nAntes de modificar el código existente, debe asegurarse de comprender su propósito y de cómo funciona actualmente. Copilot puede ayudarle con esto.\n\n1. Seleccione el código pertinente en el editor del IDE.\n2. Abra el chat insertado:\n\n   * **En VS Code:** presione <kbd>Comando</kbd>+<kbd>i</kbd> (Mac) o <kbd>Ctrl</kbd>+<kbd>i</kbd> (Windows o Linux).\n   * **En Visual Studio:** presione <kbd>Alt</kbd>+<kbd>/</kbd>.\n   * **En los IDE de JetBrains:** presione <kbd>Control</kbd>+<kbd>Mayús</kbd>+<kbd>i</kbd> (Mac) o <kbd>Ctrl</kbd>+<kbd>Mayús</kbd>+<kbd>g</kbd> (Windows o Linux).\n3. En el cuadro de entrada del chat insertado, escriba una barra diagonal (`/`).\n4. En la lista desplegable, seleccione **/explain** y pulse <kbd>Entrar</kbd>.\n5. Si la explicación que Copilot devuelve es más de unas pocas líneas, haga clic en **Ver en chat** para permitirle leer la explicación más fácilmente.\n\n## Optimización del código ineficaz\n\nCopilot puede ayudarle a optimizar el código; por ejemplo, para que el código se ejecute más rápidamente.\n\n### Ejemplo de código\n\nEn las dos secciones siguientes, usaremos el siguiente script de Bash de ejemplo para demostrar cómo optimizar el código ineficaz:\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### Uso del panel de Chat de Copiloto\n\nCopilot puede indicarle si el código, como el script de Bash de ejemplo, se puede optimizar.\n\n1. Seleccione el `for` loop o todo el contenido del archivo.\n\n2. Abra Chat de Copiloto haciendo clic en el icono de chat de la barra de actividad o mediante la función rápida de teclado:\n\n   * **VS Code y Visual Studio:**<kbd>Control</kbd>+<kbd>Comando</kbd>+<kbd>i</kbd> (Mac) / <kbd>Ctrl</kbd>+<kbd>Mayús</kbd>+<kbd>i</kbd> (Windows o Linux)\n   * **JetBrains:**<kbd>Control</kbd>+<kbd>Mayús</kbd>+<kbd>c</kbd>\n\n3. En el cuadro de entrada de la parte inferior del panel de chat, escriba: `Can this script be improved?`\n\n   Copilot responde con una sugerencia que hará que el código sea más eficaz.\n\n4. Para aplicar el cambio sugerido:\n\n   * **En VS Code y JetBrains:** mueva el puntero sobre la sugerencia en el panel de chat y haga clic en el icono **Insertar en cursor**.\n\n     ![Captura de pantalla del icono \"Insertar en cursor\" del panel de Chat de Copiloto.](/assets/images/help/copilot/insert-at-cursor.png)\n\n   * **En Visual Studio:** haga clic en **Vista previa** y, en la vista de comparación, haga clic en **Aceptar**.\n\n### Uso del chat insertado de Copilot\n\nComo alternativa, si ya sabe que el código existente, como el script de Bash de ejemplo, es ineficaz:\n\n1. Seleccione el `for` loop o todo el contenido del archivo.\n\n2. Abra el chat insertado:\n\n   * **En VS Code:** presione <kbd>Comando</kbd>+<kbd>i</kbd> (Mac) o <kbd>Ctrl</kbd>+<kbd>i</kbd> (Windows o Linux).\n   * **En Visual Studio:** presione <kbd>Alt</kbd>+<kbd>/</kbd>.\n   * **En los IDE de JetBrains:** presione <kbd>Control</kbd>+<kbd>Mayús</kbd>+<kbd>i</kbd> (Mac) o <kbd>Ctrl</kbd>+<kbd>Mayús</kbd>+<kbd>g</kbd> (Windows o Linux).\n\n3. Escriba `optimize` y presione <kbd>Entrar</kbd>.\n\n   Copilot sugiere código revisado. Por ejemplo:\n\n   ```bash\n   find . -type f -name \"*.txt\" -exec wc -l {} +\n   ```\n\n   Esto es más eficaz que el código original, que se ha mostrado anteriormente en este artículo, porque el uso de `-exec ... +` permite a `find` pasar varios archivos a la vez a `wc` en lugar de llamar a `wc` una vez para cada archivo `*.txt` que se encuentra.\n\n4. Evalúe las sugerencias de Copiloty, si está de acuerdo con el cambio:\n\n   * **En VS Code y Visual Studio:** haga clic en **Aceptar**.\n   * **En JetBrains**: haga clic en el icono Vista previa (flechas dobles) y, a continuación, haga clic en el icono Aplicar todas las diferencias (corchetes angulares dobles).\n\nAl igual que con todas las sugerencias de Copilot, siempre debe comprobar que el código revisado se ejecute sin errores y genere el resultado correcto.\n\n## Limpieza del código repetido\n\nEvitar la repetición hará que el código sea más fácil de revisar y depurar. Por ejemplo, si el mismo cálculo se realiza más de una vez en distintos lugares de un archivo, podría trasladar el cálculo a una función.\n\nEn el siguiente ejemplo muy sencillo de JavaScript, el mismo cálculo (precio de artículo multiplicado por el número de artículos vendidos) se realiza en dos lugares.\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\nPuede pedir a Copilot que mueva el cálculo repetido a una función.\n\n1. Seleccione todo el contenido del archivo.\n\n2. Abra el chat insertado:\n\n   * **En VS Code:** presione <kbd>Comando</kbd>+<kbd>i</kbd> (Mac) o <kbd>Ctrl</kbd>+<kbd>i</kbd> (Windows o Linux).\n   * **En Visual Studio:** presione <kbd>Alt</kbd>+<kbd>/</kbd>.\n   * **En los IDE de JetBrains:** presione <kbd>Control</kbd>+<kbd>Mayús</kbd>+<kbd>i</kbd> (Mac) o <kbd>Ctrl</kbd>+<kbd>Mayús</kbd>+<kbd>g</kbd> (Windows o Linux).\n\n3. Escriba: `move repeated calculations into functions` y pulse <kbd>Entrar</kbd>.\n\n   Copilot sugiere código revisado. Por ejemplo:\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. Evalúe las sugerencias de Copiloty, si está de acuerdo con el cambio:\n\n   * **En VS Code y Visual Studio:** haga clic en **Aceptar**.\n   * **En JetBrains**: haga clic en el icono Vista previa (flechas dobles) y, a continuación, haga clic en el icono Aplicar todas las diferencias (corchetes angulares dobles).\n\nAl igual que con todas las sugerencias de Copilot, siempre debe comprobar que el código revisado se ejecute sin errores y genere el resultado correcto.\n\n## Hacer que el código sea más conciso\n\nSi el código es innecesariamente detallado, puede ser difícil de leer y mantener. Copilot puede sugerir una versión más concisa del código seleccionado.\n\nEn el ejemplo siguiente, este código de Python genera el área de un rectángulo y un círculo, pero podría escribirse de forma más 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. Seleccione todo el contenido del archivo.\n\n2. Abra el chat insertado:\n\n   * **En VS Code:** presione <kbd>Comando</kbd>+<kbd>i</kbd> (Mac) o <kbd>Ctrl</kbd>+<kbd>i</kbd> (Windows o Linux).\n   * **En Visual Studio:** presione <kbd>Alt</kbd>+<kbd>/</kbd>.\n   * **En los IDE de JetBrains:** presione <kbd>Control</kbd>+<kbd>Mayús</kbd>+<kbd>i</kbd> (Mac) o <kbd>Ctrl</kbd>+<kbd>Mayús</kbd>+<kbd>g</kbd> (Windows o Linux).\n\n3. Escriba: `make this more concise` y pulse <kbd>Entrar</kbd>.\n\n   Copilot sugiere código revisado. Por ejemplo:\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. Evalúe las sugerencias de Copiloty, si está de acuerdo con el cambio:\n\n   * **En VS Code y Visual Studio:** haga clic en **Aceptar**.\n   * **En JetBrains**: haga clic en el icono Vista previa (flechas dobles) y, a continuación, haga clic en el icono Aplicar todas las diferencias (corchetes angulares dobles).\n\nAl igual que con todas las sugerencias de Copilot, siempre debe comprobar que el código revisado se ejecute sin errores y genere el resultado correcto.\n\n## División de unidades complejas de código\n\nEs probable que los métodos o funciones grandes que realizan varias operaciones ofrezcan menos oportunidades de reutilización que las funciones más pequeñas y sencillas que se centran en realizar una operación determinada. También pueden ser más difíciles de entender y depurar.\n\nCopilot puede ayudarle a dividir bloques complejos de código en unidades más pequeñas que sean más adecuadas para su reutilización.\n\nEl siguiente código de Python es un ejemplo muy sencillo, pero muestra el principio de dividir una sola función en dos funciones que realizan operaciones concretas.\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 la función `process_data`:\n\n1. Coloque el cursor en el nombre de la función.\n\n2. Abra el chat insertado:\n\n   * **En VS Code:** presione <kbd>Comando</kbd>+<kbd>i</kbd> (Mac) o <kbd>Ctrl</kbd>+<kbd>i</kbd> (Windows o Linux).\n   * **En Visual Studio:** presione <kbd>Alt</kbd>+<kbd>/</kbd>.\n   * **En los IDE de JetBrains:** presione <kbd>Control</kbd>+<kbd>Mayús</kbd>+<kbd>i</kbd> (Mac) o <kbd>Ctrl</kbd>+<kbd>Mayús</kbd>+<kbd>g</kbd> (Windows o Linux).\n\n3. Escriba: `split into 2 separate functions: one for cleansing data, the other for printing` y pulse <kbd>Entrar</kbd>.\n\n   Copilot sugiere código revisado. Por ejemplo:\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 sugerencia de ejemplo mostrada anteriormente reemplaza la función existente por tres funciones. La tercera función simplemente llama a las otras dos funciones y permite el código existente que llama a la función `process_data`.\n\n4. Evalúe las sugerencias de Copiloty, si está de acuerdo con el cambio:\n\n   * **En VS Code y Visual Studio:** haga clic en **Aceptar**.\n   * **En JetBrains**: haga clic en el icono Vista previa (flechas dobles) y, a continuación, haga clic en el icono Aplicar todas las diferencias (corchetes angulares dobles).\n\nAl igual que con todas las sugerencias de Copilot, siempre debe comprobar que el código revisado se ejecute sin errores y genere el resultado correcto.\n\n## Reescritura de código condicional para mejorar la legibilidad\n\nA menudo hay varias maneras de escribir código que sí, o no, se ejecuta en función de varias condiciones. Algunas estructuras condicionales son más adecuadas que otras para casos de uso concretos y elegir una estructura condicional alternativa a veces puede facilitar la lectura del código.\n\nEste método de Java usa una serie de instrucciones `if` y `else if` para determinar qué operación se va a realizar:\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\nUna instrucción `switch` podría ser una mejor manera de aplicar la misma lógica.\n\n1. Coloque el cursor en el nombre del método.\n\n2. Abra el chat insertado:\n\n   * **En VS Code:** presione <kbd>Comando</kbd>+<kbd>i</kbd> (Mac) o <kbd>Ctrl</kbd>+<kbd>i</kbd> (Windows o Linux).\n   * **En Visual Studio:** presione <kbd>Alt</kbd>+<kbd>/</kbd>.\n   * **En los IDE de JetBrains:** presione <kbd>Control</kbd>+<kbd>Mayús</kbd>+<kbd>i</kbd> (Mac) o <kbd>Ctrl</kbd>+<kbd>Mayús</kbd>+<kbd>g</kbd> (Windows o Linux).\n\n3. Escriba: `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   Esto muestra cómo puede usar una sola solicitud para pedir a Copilot que realice varios cambios.\n\n4. Presione <kbd>Entrar</kbd>.\n\n   Copilot sugiere código revisado. Por ejemplo:\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. Evalúe las sugerencias de Copiloty, si está de acuerdo con el cambio:\n\n   * **En VS Code y Visual Studio:** haga clic en **Aceptar**.\n   * **En JetBrains**: haga clic en el icono Vista previa (flechas dobles) y, a continuación, haga clic en el icono Aplicar todas las diferencias (corchetes angulares dobles).\n\nAl igual que con todas las sugerencias de Copilot, siempre debe comprobar que el código revisado se ejecute sin errores y genere el resultado correcto.\n\n## Reformatear el código para usar una estructura diferente\n\nSupongamos que tiene esta función 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 los estándares de codificación requieren que use la notación de flecha para las funciones y los nombres descriptivos de los parámetros, puede usar Copilot para que le ayude a realizar estos cambios.\n\n1. Coloque el cursor en el nombre de la función.\n2. Abra el chat insertado:\n\n   * **En VS Code:** presione <kbd>Comando</kbd>+<kbd>i</kbd> (Mac) o <kbd>Ctrl</kbd>+<kbd>i</kbd> (Windows o Linux).\n   * **En Visual Studio:** presione <kbd>Alt</kbd>+<kbd>/</kbd>.\n   * **En los IDE de JetBrains:** presione <kbd>Control</kbd>+<kbd>Mayús</kbd>+<kbd>i</kbd> (Mac) o <kbd>Ctrl</kbd>+<kbd>Mayús</kbd>+<kbd>g</kbd> (Windows o Linux).\n3. Escriba: `use arrow notation and better parameter names` y pulse <kbd>Entrar</kbd>.\n\n   Copilot sugiere código revisado. Por ejemplo:\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## Mejora del nombre de un símbolo\n\n> \\[!NOTE]\n>\n> * Solo VS Code y Visual Studio.\n> * La compatibilidad con esta característica depende de tener instalada la extensión de lenguaje adecuada en el IDE para el lenguaje que usa. No todas las extensiones de lenguaje admiten esta característica.\n\nLos nombres bien elegidos pueden ayudar a facilitar el mantenimiento del código. Copilot en VS Code y Visual Studio pueden sugerir nombres alternativos para símbolos como variables o funciones.\n\n1. Coloque el cursor en el nombre del símbolo.\n\n2. Presione <kbd>F2</kbd>.\n\n3. ```\n          **Solo Visual Studio:** pulse <kbd>Ctrl</kbd>+<kbd>Espacio</kbd>.\n   ```\n\n   Copilot sugiere nombres alternativos.\n\n   ![Captura de pantalla de una lista desplegable en VS Code que proporciona alternativas para un nombre de símbolo.](/assets/images/help/copilot/rename-symbol.png)\n\n4. En la lista desplegable, seleccione uno de los nombres sugeridos.\n\n   El nombre se cambia en todo el proyecto."}