Čist kod jasno prenosi svoju namenu.
Program može dati tačan rezultat, a ipak biti težak za razumevanje. Čist kod daje prednost razumljivim imenima, doslednosti i jednostavnoj strukturi, umesto nepromenljivoj listi apsolutnih pravila.
def f(x, y):
return x - x * y / 100
def cena_sa_popustom(cena: float, popust: float) -> float:
return cena - cena * popust / 100Obe funkcije koriste isti algoritam. Drugo ime nam govori šta rezultat znači, a parametri i oznake tipova pokazuju koje vrednosti tu pripadaju.
Čitljiv kod ne znači da svaka linija mora biti duža. Njegov cilj je da sledeći čitalac uz manje nagađanja razume važnu ideju.
Praktično pitanje: Da li bi drug ili drugarica iz razreda sutra mogao/la da razume ovu funkciju a da te najpre ne pita šta znači svako kratko ime?
def cena_sa_popustom(cena: float, popust: float) -> float:
"""Izračunava cenu nakon procentualnog popusta."""
return cena - cena * popust / 100
print(cena_sa_popustom.__doc__)
help(cena_sa_popustom)Docstring je string literal na početku tela funkcije, klase ili modula. Objašnjava namenu i način korišćenja. Python ga čuva u __doc__, a help() može da ga prikaže.
def cena_sa_popustom(cena: float, popust: float) -> float:
"""Izračunava cenu nakon popusta.
Args:
cena: Početna cena proizvoda.
popust: Procenat popusta.
Returns:
Cena nakon primenjenog popusta.
"""
return cena - cena * popust / 100Args i Returns su česti naslovi u dokumentaciji, a ne posebne Python ključne reči. Jednolinijski docstring je često dovoljan za malu i jasnu funkciju; dodaj više detalja kada to čitaocu pomaže da kod koristi ispravno.
# The supplier price changes every Monday.
cena = ucitaj_cenu()
def prikazi_cenu(iznos: float) -> None:
"""Prints a formatted product price."""
print(f"{iznos:.2f} RSD")Komentar koristi da objasniš razlog ili važnu odluku u izvornom kodu. Docstring koristi za dokumentovanje funkcije, klase ili modula. Komentar ne treba samo da ponavlja očiglednu Python naredbu.
def izracunaj_porez(iznos: float, stopa: float) -> float:
"""Vraća iznos poreza za zadatu procentualnu stopu."""
return iznos * stopa / 100Oznake tipova opisuju vrednosti koje funkcija očekuje i vraća. Docstring objašnjava šta funkcija radi i kako se koristi. Jasna imena prenose nameru direktno kroz kod.
Pet praktičnih navika za čitljiv kod
- 1. Biraj jasna imenaDaj prednost imenima
ukupna_cenaiizracunaj_popustumestoxifkada duža imena otkrivaju namenu. - 2. Daj svakoj funkciji jednu razumljivu odgovornostAko jedna funkcija čita ulaz, računa ukupan iznos, ispisuje izveštaj i čuva fajl, razmisli o razdvajanju tih poslova u male imenovane funkcije.
- 3. Izbegavaj nepotrebno ponavljanjeKada se isti proračun pojavljuje na više mesta, mala pomoćna funkcija može tom proračunu dati jedno ime i jedno mesto za izmenu.
- 4. Pojednostavi uslove kada je mogućeKoristi neposredne i čitljive uslove, a izbegavaj duboko ugnježđivanje kada bi rani
returnili jasno imenovana boolean vrednost olakšali praćenje odluke. - 5. Komentariši zašto, a ne očigledno štaKoristan komentar objašnjava zašto je neka odluka važna. Naredbi
broj += 1obično ne treba komentar koji samo kaže da dodaje jedan.
Refaktoriši bez menjanja onoga što kod obećava
- Refaktorisanje nije nova funkcionalnostRefaktorisanje unapređuje unutrašnju strukturu koda, dok namerno čuva njegovo vidljivo ponašanje i očekivane rezultate.
- Proveri ponašanje nakon izmenePokreni iste primere pre i posle refaktorisanja. Kasnije lekcije pokazaće kako testovi mogu ovu proveru učiniti pouzdanijom.
