Naprawianie usterek i ulepszanie kodu

Ukończone

Deweloperzy czasami mogą pisać kod, który działa głównie, ale można go ulepszyć, naprawiając błędy, składnię, wydajność lub modułowość. Modele usługi Azure OpenAI mogą pomóc w identyfikowaniu sposobów ulepszania i udostępniania sugestii dotyczących pisania lepszego kodu.

Naprawianie usterek w kodzie

Modele usługi Azure OpenAI mogą pomóc w usuwaniu usterek w kodzie, analizując kod i sugerując zmiany, które mogą potencjalnie rozwiązać problem. Może to pomóc deweloperom w szybszym i bardziej wydajnym identyfikowaniu i usuwaniu usterek.

Załóżmy na przykład, że masz następującą funkcję, która nie działa dla Ciebie.

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

Podaj tę funkcję w modelu wraz z monitem Fix the bugs in this functioni otrzymasz odpowiedź ze stałym kodem i wyjaśnieniem tego, co zostało naprawione.

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.

Poprawa wydajności

Podczas gdy deweloperzy kodu mogą pisać, może istnieć bardziej wydajny sposób wykonania zadania. Oto przykład funkcji, która oblicza sumę pierwszych n dodatnich liczb całkowitych, prawdopodobnie nieefektywnie:

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

Ta wersja działa poprawnie, ale jej złożoność czasowa to O(n). Po podaniu do modelu oto odpowiedź:

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

Ta wersja nadal zwraca prawidłowy wynik, ale jego złożoność czasu jest teraz O(1), co sprawia, że znacznie bardziej wydajne.

Refaktoryzacja nieefektywnego kodu

Lepszy kod jest mniej podatny na błędy i jest łatwiejszy do utrzymania, a modele usługi Azure OpenAI mogą pomóc deweloperom w sposobie refaktoryzacji kodu.

Rozważmy następującą funkcję.

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

Ten kod oblicza łączną cenę określonego elementu na podstawie jego nazwy i ilości. Jednak kod nie jest modułowy i może być trudny do utrzymania. Po przekazaniu do modelu żądania refaktoryzacji oto odpowiedź:

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

Wraz z kodem model zawiera wyjaśnienie refaktoryzacji.

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.