• בלוג
  • איך לקרוא Code Review של Chat GPT

איך לקרוא Code Review של Chat GPT

11/09/2024

הבעיה עם Chat GPT ו Code Reviews היא שאין ל GPT עדיין מספיק קונטקסט בשביל להבין למה בניתי דברים כמו שבניתי ולכן הוא ימליץ על Best Practices כלליים, גם כשזה לא הכרחי, וגם יכול לטעות ולחשוב שלא השתמשתי ב Best Practice מסוים אפילו שכן. הנה שתי דוגמאות קטנות שעזרו לי לראות מה GPT רואה ומה הוא מפספס.

1. שיפור קוד רובי

שלחתי לו לבדיקה את הפונקציה הבאה ברובי:

require 'set'

def count_valid_requests(uniqueCodes, requests)
    uniqueCodesSet = Set.new(uniqueCodes)
    return requests.count { |r| uniqueCodesSet.include?(r) }
end

הקוד עובד ולא כתוב רע אבל אפילו בשתי שורות של קוד יש פה כמה דברים שמתכנתי רובי לא אוהבים לראות - הסטנדרט לגבי שמות המשתנים ברובי הוא להשתמש בקו תחתי להפרדה בין המילים ולא להשתמש ב return בצורה מפורשת. ChatGPT שם לב לשתי הבעיות ויצר גירסה מתוקנת של הפונקציה בלי בעיה:

require 'set'

def count_valid_requests(unique_codes, requests)
  unique_codes_set = Set.new(unique_codes)
  requests.count { |request| unique_codes_set.include?(request) }
end

ככל שהקוד מסתבך הטיפים של ChatGPT עדיין בעלי ערך אבל דורשים יותר מאמץ בקריאה. הנה פונקציה נוספת ששלחתי לו, הפעם מפרויקט ריילס:

def cancel
    wi = WorkshopInstance.find(params[:id])
    authorize! :attend, wi
    wi.users.delete(current_user)

    render json: {
             attending: attending
           }
  end

כאן הפלט כבר היה הרבה יותר ארוך - ה GPT שם לב שאין לי קוד טיפול בשגיאות, ש find עלולה לזרוק שגיאה והמליץ להחליף אותה ב find_by ואחריה קוד לבדיקה שגיאה. אני לא אוהב את ההמלצה הזאת כי אם find כבר ממילא זורק שגיאה אז לא ברור למה להחליף אותו בפונקציה שלא זורקת שגיאה ואז להוסיף בדיקה ולזרוק את השגיאה בצורה יזומה.

הוא כן שם לב שהשתמשתי במשתנה attending שלא מוגדר בפונקציה, והמליץ להחליף את delete ב delete_by שבפועל קוראת ל delete_all המהירה בהרבה - שני טיפים שכדאי ליישם.

2. קוד JavaScript

אחרי זה נתתי לו לקרוא את הקוד הבא ב JavaScript:

const evtSource = new EventSource("/count");
const ti = document.querySelector('input');

evtSource.onmessage = (event) => {
  ti.value = event.data;
};

document.querySelector('button').addEventListener('click', async () => {
  await fetch('/count', {
    method: "POST",
    body: JSON.stringify({ value: ti.value }),
    contentType: 'application/json',
  });
});

ושוב הוא התלונן קודם כל על זה שאין קוד טיפול בשגיאות (במקרה הזה הוא לא נחוץ), וטען (לדעתי לא בצדק) שאפשר לשפר ביצועים אם עושים את ה querySelector במרוכז ושומרים את התוצאות במשתנים. הוא גם חשב שצריך להפעיל parseInt על value ולבדוק שהתקבל מספר, למרות שאין לזה זכר בקוד שהדבקתי.

מצד שני הוא מצד יפה את הטעות שלי בהגדרת הכותרת contentType, שצריכה להיות Content-Type.

סך הכל אחוז ה False Positives הוא עדיין גבוה. באופן כללי כשיש זמן אני חושב שרצוי להדביק חלקים מהקוד שלנו ל Chat GPT כדי לקבל טיפים מועילים וללמוד יותר על הקוד, אבל לקחת בחשבון שתצטרכו להשקיע זמן לפענח את התשובה שלו ולהפריד עיקר מטפל.