Corrección de errores y mejora del código

Completado

A veces, los desarrolladores pueden escribir código que, si bien funciona, puede mejorarse mediante la corrección de los errores, la sintaxis, el rendimiento o la modularidad. Los modelos de Azure OpenAI pueden ayudar a identificar formas de mejora y proporcionar sugerencias sobre cómo escribir mejor código.

Corrección de errores en el código

Los modelos de Azure OpenAI pueden ayudar a corregir errores del código mediante el análisis de este y la sugerencia de cambios que pueden corregir el problema. Esto puede ayudar a los desarrolladores a identificar y a resolver los errores de forma más rápida y eficaz.

Por ejemplo, supongamos que tiene la función siguiente que no es adecuada para su caso.

def calculate_average(numbers):  
    total = 0  
    for i in range(len(numbers)):  
        number = numbers[i]  
        total += number  
    average = total  
    rerun averave  
public double CalculateAverage(int[] numbers)
{
    int total = 0;
    for (int i = 0; i < numbers.Length; i++)
    {
        int number = numbers[i];
        total += number;
    }
    double average = (double)total;
    rerun averave;
}

Proporcione esa función al modelo, junto con el mensaje Fix the bugs in this function, y obtendrá una respuesta con el código corregido y una explicación de qué se ha corregido.

def calculate_average(numbers):  
    total = 0  
    for i in range(len(numbers)):  
        number = numbers[i]  
        total += number  
    average = total / len(numbers)  
    return average  
public double CalculateAverage(int[] numbers)
{
    int total = 0;
    for (int i = 0; i < numbers.Length; i++)
    {
        int number = numbers[i];
        total += number;
    }
    double average = (double)total / numbers.Length;
    return average;
}
There were a few issues with the original code:

1. The variable "average" was assigned the value of "total" instead of the actual average.
2. There was a typo in the last line - "rerun" should be "return".
3. The average was not actually calculated - the corrected code divides the total by the length of 
the "numbers" list to get the average.

Mejorar el rendimiento

Aunque la escritura por parte de los desarrolladores de código puede funcionar, puede haber una forma más eficaz de realizar la tarea. A continuación, se muestra un ejemplo de una función que calcula la suma de los primeros n enteros positivos, posiblemente de forma ineficaz:

def sum_of_n(n):
    result = 0
    for i in range(1, n+1):
        result += i
    return result
public int SumOfN(int n)  
{  
    int result = 0;  
    for (int i = 1; i <= n; i++)  
    {  
        result += i;  
    }  
    return result;  
}  

Esta versión funciona correctamente, pero su complejidad temporal es O(n). Cuando se proporciona al modelo, la respuesta es:

We can improve this function it by using a mathematical formula instead.

Here's the more efficient version:
def sum_of_n(n):
    return n * (n + 1) // 2
public int SumOfN(int n)  
{  
    return n * (n + 1) / 2;  
}  

Esta versión también devuelve el resultado correcto, pero su complejidad temporal es ahora O(1), lo que hace que sea mucho más eficaz.

Refactorización de código ineficiente

Un código óptimo es menos propenso a errores y es más fácil de mantener. Los modelos de Azure OpenAI pueden guiar a los desarrolladores para ayudarles a refactorizar su código.

Considere la función siguiente.

def calculateTotalPrice(item, quantity):
    if item == 'apple':
        return quantity * 0.5
    elif item == 'banana':
        return quantity * 0.75
    elif item == 'orange':
        return quantity * 0.6
    else:
        return 0
public double CalculateTotalPrice(string item, int quantity)
{
    if (item == "apple")
    {
        return quantity * 0.5;
    }
    else if (item == "banana")
    {
        return quantity * 0.75;
    }
    else if (item == "orange")
    {
        return quantity * 0.6;
    }
    else
    {
        return 0;
    }
}

Este código calcula el precio total de un artículo determinado en función de su nombre y la cantidad. Sin embargo, el código no es modular y puede ser difícil de mantener. Cuando se proporciona al modelo la solicitud para refactorizarlo, esta es la respuesta:

item_prices = {  
    'apple': 0.5,  
    'banana': 0.75,  
    'orange': 0.6  
}  

def calculate_total_price(item, quantity):  
    price = item_prices.get(item, 0)  
    return quantity * price  
static Dictionary<string, double> itemPrices = new Dictionary<string, double>()  
{  
    {"apple", 0.5},  
    {"banana", 0.75},  
    {"orange", 0.6}  
};  

static double CalculateTotalPrice(string item, int quantity)  
{  
    double price;  
    if (!itemPrices.TryGetValue(item, out price))  
    {  
        price = 0;  
    }  
    return quantity * price;  
}  

Junto con el código, el modelo proporciona una explicación de la refactorización.

In this refactored code, we've created an object called itemPrices that maps item names to their 
prices. We've also simplified the calculateTotalPrice function by using the itemPrices object to look 
up the price of the item, rather than using a series of if/else statements. This makes the code more 
modular and easier to maintain, and also reduces the risk of introducing bugs in the future.