Middle
Kokie yra procedūrinio stiliaus kodo vertinimo kriterijai, kurie gali būti geri, o kurie blogi?
sobes.tech AI
Atsakymas iš AI
Geri kriterijai:
- Skaitomumas: Kiek lengva suprasti, ką kodas daro, jį skaitant iš viršaus į apačią.
- Aiškūs kintamųjų ir funkcijų pavadinimai: Naudoti aprašomuosius pavadinimus, kurie atspindi jų paskirtį ir logiką.
- Dekompresija: Sudėtingų užduočių suskaidymas į mažesnes, valdomas funkcijas. Kiekviena funkcija turėtų atlikti vieną konkretų uždavinį.
- Vietinių kintamųjų nebuvimas: Minimalus globalių kintamųjų naudojimas, siekiant sumažinti priklausomybes ir šalutinius efektus.
- Klaidų tvarkymas: Aiškus ir tikslus galimų klaidų ir išimčių tvarkymas.
- Komentarai: Ten, kur kodas neaiškus arba logikos paaiškinimui.
- Stiliaus nuoseklumas: Vienodas formatavimo ir pavadinimo stilius visame projekte.
- Kodo dubliavimosi mažinimas: Vengti tų pačių ar labai panašių blokų kartojimo.
# Geras pavyzdys – dekompozicija ir aiškūs pavadinimai
def calculate_average(numbers):
"""Apskaičiuoja skaičių sąrašo vidurkį."""
if not numbers:
return 0
total = sum(numbers)
return total / len(numbers)
def process_data(data):
# Tarkime, kad 'data' yra sąrašas sąrašų su skaičiais
averages = []
for row in data:
avg = calculate_average(row)
averages.append(avg)
return averages
Blogi kriterijai:
- Neaiškumas: Kodas sunkiai suprantamas dėl painios logikos, neefektyvių pavadinimų ar struktūros trūkumo.
- "Spagetti" kodas: Daug perėjimų ir priklausomybių, kurios apsunkina vykdymo seką stebėti.
- "Lazdynas"-kodas: Ilgos, monolitinės funkcijos, kurios atlieka daug nesusijusių užduočių.
- Naudojant "maginius skaičius": Nepaaiškintos skaitinės konstantos kode.
- Klaidų tvarkymo trūkumas: Programa "krenta" netikėtose situacijose.
- Kodo dubliavimas: Tie patys arba labai panašūs blokai kartojasi skirtingose vietose.
- Stiliaus neatitikimas: Skirtingas formatavimas ir pavadinimai, kurie apsunkina skaitymą.
# Blogas pavyzdys – "lazdynas" ir magiški skaičiai
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
Palyginimas:
| Gerai | Blogai |
|---|---|
| Skaitomumas | Neaiškumas ("spagetti", "lazdynas") |
| Aiškūs pavadinimai | Neaiškūs pavadinimai |
| Dekompozicija | Monolitinės funkcijos |
| Glaudus globalių kintamųjų naudojimas | Per didelis globalių kintamųjų naudojimas |
| Aiškus klaidų tvarkymas | Trūksta klaidų tvarkymo |
| Komentarai reikalingose vietose | Komentarų nėra |
| Nuoseklumas stiliaus | Nenuoseklus stilius |
| Kodo dubliavimosi mažinimas | Kodo dubliavimasis |