Middle
Որոնք են պրոցեդուրական ոճով կոդի գնահատման չափանիշները և որոնք լավ են, իսկ որոնք վատ?
sobes.tech AI
Պատասխան AI-ից
Լավ չափանիշներ՝
- Կարդալություն: Ինչքան հեշտ է հասկանալ, թե ինչ է անում կոդը՝ կարդալով վերևից ներքև:
- Փոփոխականների և ֆունկցիաների բացատրական անուններ: Օգտագործել նկարագրական անուններ, որոնք արտացոլում են դրանց նպատակն ու տրամաբանությունը:
- Դեկոմպոզիցիա: Կոմպլեքս առաջադրանքները բաժանել փոքր, կառավարելի ֆունկցիաների: Յուրաքանչյուր ֆունկցիա պետք է կատարի կոնկրետ առաջադրանք:
- Հ globals փոփոխականների բացակայություն: Մինիմիզացնել globals օգտագործումը՝ կախվածությունները և կողմնակի ազդեցությունները նվազեցնելու համար:
- Սխալների մշակում: Բացահայտ և հստակ սխալների և բացառությունների մշակումը:
- Մեկնաբանություններ: Ներառված այնտեղ, որտեղ կոդը անհասկանալի է կամ տրամաբանության բացատրության համար:
- Ստիլիստիկ համաչափություն: Միացյալ ձևաչափ և անվանումների ոճ ամբողջ նախագծում:
- Կոդի կրկնօրինակի նվազեցում: Միայն կրկնվող կամ շատ նման բլոկների խուսափում:
# Լավ օրինակ՝ դեկոմպոզիցիա և բացատրական անուններ
def calculate_average(numbers):
"""Հաշվարկում է թվերի ցանկի միջին արժեքը։"""
if not numbers:
return 0
total = sum(numbers)
return total / len(numbers)
def process_data(data):
# Կարծում ենք, որ 'data'՝ ցանկ է թվերի ցանկերի
averages = []
for row in data:
avg = calculate_average(row)
averages.append(avg)
return averages
Ձախող չափանիշներ՝
- Անորոշություն: Կոդը դժվար է հասկանալ՝ շփոթեցնող տրամաբանության, ոչ արդյունավետ անունների կամ կառուցվածքի բացակայության պատճառով:
- "Շպագետտի"-կոդ: Շատ անցումներ և կախվածություններ, որոնք դժվարացնում են կատարման հաջորդականության հետևելը:
- "Լիզ"-կոդ: Երկար, մոնոլիտ ֆունկցիաներ, որոնք կատարում են մի քանի անշրջանցելի առաջադրանք:
- Մոգական թվեր օգտագործում: Անբացատրելի թվային կոնստանտներ կոդում:
- Սխալների բացակայություն: Ծրագիրը "կորցնում" է անսպասելի իրավիճակներում:
- Կոդի կրկնօրինակում: Նույն կամ շատ նման բլոկներ կրկնվում են տարբեր վայրերում:
- Ոճի անհամապատասխանություն: Տարբեր ձևաչափում և անվանումներում, որոնք դժվարացնում են ընթերցումը:
# Բարեկամական օրինակ՝ "լիզ"-ի և մոգական թվերի
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
Համեմատություն՝
| Լավ | Բարդ |
|---|---|
| Կարդալություն | Անորոշություն ("շպագետտի", "լիզ") |
| Բացատրական անուններ | Անբացատրելի անուններ |
| Դեկոմպոզիցիա | Մոնոլիտիկ ֆունկցիաներ |
| Գլոբալ փոփոխականների բացակայություն | Ավելորդ օգտագործում globals-ի |
| Հստակ սխալների մշակում | Անհասկանալի սխալների մշակում |
| Մեկնաբանություններ՝ անհրաժեշտ տեղում | Չունենալ մեկնաբանություններ |
| Ստիլիստիկ համաչափություն | Անհամապատասխան ոճ |
| Կոդի կրկնօրինակի նվազեցում | Կրկնվող կոդ |