Sobes.tech
Middle

Prosedur stilində kodun qiymətləndirilməsi üçün hansı meyarlar yaxşı, hansıları pis sayılır?

sobes.tech Süni İntellekt

AI-dan cavab

Yaxshi meyarlar:

  • Oqilishi: Kodni yuqoridan pastga o'qib nima qilayotganini tushunish qanchalik oson.
  • O'zgaruvchilar va funksiyalar aniqroq: Maqsadlarini va mantiqni aks ettiradigan tavsiflovchi nomlar ishlatish.
  • Taqsimlash: Murakkab vazifalarni kichik va boshqariladigan funksiyalarga bo'lish. Har bir funksiya aniq bir vazifani bajarishi kerak.
  • Global o'zgaruvchilarning yo'qligi: Bog'liqliklar va yon ta'sirlarni kamaytirish uchun global o'zgaruvchilardan foydalanishni minimallashtirish.
  • Xatoliklarni boshqarish: Mumkin bo'lgan xatoliklar va istisnolarni aniq boshqarish.
  • Izohlar: Kod tushunarsiz bo'lsa yoki mantiqni tushuntirish uchun mavjud.
  • Uslubda izchillik: Butun loyiha bo'ylab bir xil formatlash va nomlash uslubi.
  • Kod takrorlanishini minimallashtirish: Bir xil kod bloklarini takrorlashdan saqlanish.
# Yaxshi bo'lak va aniq nomlar misoli
def calculate_average(numbers):
    """Raqamlar ro'yxatining o'rtacha qiymatini hisoblaydi."""
    if not numbers:
        return 0
    total = sum(numbers)
    return total / len(numbers)

def process_data(data):
    # Faraz qilamiz, 'data' raqamlar ro'yxatlari ro'yxati
    averages = []
    for row in data:
        avg = calculate_average(row)
        averages.append(avg)
    return averages

Yomon meyarlar:

  • Aniq emaslik: Kod murakkab mantiq, noaniq nomlar yoki tuzilma yo'qligi sababli tushunish qiyin.
  • "Spagetti kod": Ko'p o'tishlar va bog'liqliklar, bajarilish ketma-ketligini kuzatishni qiyinlashtiradi.
  • "Lazo" kodi: Uzun, monolitik funksiyalar, ular ko'plab bog'lanmagan vazifalarni bajaradi.
  • "Sehrli raqamlar" ishlatish: Kodda tushuntirilmagan raqamli konstantalar.
  • Xatoliklarni boshqarish yo'qligi: Dastur "uziladi" kutilmagan vaziyatlarda.
  • Kod takrorlanishi: Bir xil yoki juda o'xshash bloklar turli joylarda takrorlanadi.
  • Uslubda izchillik yo'qligi: Turli formatlar va nomlar, o'qishni qiyinlashtiradi.
# Yomon misol "lazo" va sehrli raqamlar bilan
def process(d):
    t = 0
    for r in d:
        s = 0
        c = 0
        for n in r:
            s += n
            c += 1
        if c > 0:
            t += s / c
    return t / len(d) if len(d) > 0 else 0

Taqqoslash:

Yaxshi mezonlar Yomon mezonlar
O'qilishi Aniq emaslik ("spagetti", "lazo")
Aniq nomlangan o'zgaruvchilar va funksiyalar Noma'lum nomlar
Taqsimlash Monolitik funksiyalar
Global o'zgaruvchilarsiz Global o'zgaruvchilardan ortiqcha foydalanish
Aniq xatoliklarni boshqarish Xatoliklarni boshqarish yo'qligi
Izohlar kerakli joylarda Izohlar yo'qligi
Uslubda izchillik Uslubda izchillik yo'qligi
Kod takrorlanishini minimallashtirish Dublikat kodlar