Oprava chyb a vylepšení kódu

Dokončeno

Vývojáři někdy můžou psát kód, který většinou funguje, ale může se zlepšit opravou chyb, syntaxe, výkonu nebo modularity. Modely Azure OpenAI vám můžou pomoct identifikovat způsoby, jak vylepšit a poskytnout návrhy na psaní lepšího kódu.

Oprava chyb v kódu

Modely Azure OpenAI můžou pomoct opravit chyby v kódu tím, že analyzují kód a navrhují změny, které by mohly problém vyřešit. To může vývojářům pomoct rychleji a efektivněji identifikovat a vyřešit chyby.

Řekněme například, že máte následující funkci, která vám nefunguje.

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;
}

Poskytněte této funkci modelu spolu s výzvou Fix the bugs in this functiona získáte odpověď s pevným kódem a vysvětlením toho, co bylo opraveno.

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.

Zvýšení výkonu

I když vývojáři kódu můžou pracovat, může být efektivnější způsob, jak tento úkol provést. Tady je příklad funkce, která vypočítá součet prvních n kladných celých čísel, pravděpodobně neefektivní:

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;  
}  

Tato verze funguje správně, ale její časová složitost je O(n). Pokud je model poskytnutý, tady je odpověď:

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;  
}  

Tato verze stále vrací správný výsledek, ale jeho časová složitost je nyní O(1), což z něj dělá mnohem efektivnější.

Refaktoring neefektivního kódu

Lepší kód je méně náchylný k chybám a je jednodušší udržovat a modely Azure OpenAI můžou vývojářům pomoct při refaktoringu kódu.

Zvažte následující funkci.

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;
    }
}

Tento kód vypočítá celkovou cenu konkrétní položky na základě jejího názvu a množství. Kód ale není modulární a může být obtížné ho udržovat. Když model poskytnete s požadavkem na refaktoring, tady je odpověď:

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;  
}  

Společně s kódem poskytuje model vysvětlení refaktoringu.

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.