✦ Srednji nivo Pythona i OOP Kvalitet koda

L2 · Koncept 02 · Kvalitet koda i testiranje

Docstringovi i čist kod
Piši Python koji drugi mogu da razumeju.

Kod koji radi samo je početak. Jasna imena, funkcije sa jasnom namenom i korisna dokumentacija pomažu ljudima da ga kasnije razumeju.

Cilj učenjaKoristi jasna imena, docstringove i mala refaktorisanja da bi Python kod bio lakši za čitanje i održavanje.
01 Uči02 Radi lokalno03 Proveri razumevanje

Učenje kao gost

Učiš kao gost — sačuvaj svoj napredak!

Napravi besplatan nalog i uči uz Sloby AI mentora, proveru razumevanja i praćenje napretka.

Cela platforma je besplatna tokom 2026. Foundations ostaje zauvek besplatan.

Č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 / 100

Obe 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?

Docstringovi dokumentuju kako se kod koristi
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.

Višelinijski docstring
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 / 100

Args 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.

Komentar je nešto drugo
# 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.

Oznake tipova, docstringovi i imena rade zajedno
def izracunaj_porez(iznos: float, stopa: float) -> float:
    """Vraća iznos poreza za zadatu procentualnu stopu."""
    return iznos * stopa / 100

Oznake 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. 1. Biraj jasna imenaDaj prednost imenima ukupna_cena i izracunaj_popust umesto x i f kada duža imena otkrivaju namenu.
  2. 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. 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. 4. Pojednostavi uslove kada je mogućeKoristi neposredne i čitljive uslove, a izbegavaj duboko ugnježđivanje kada bi rani return ili jasno imenovana boolean vrednost olakšali praćenje odluke.
  5. 5. Komentariši zašto, a ne očigledno štaKoristan komentar objašnjava zašto je neka odluka važna. Naredbi broj += 1 obič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.

Sredi neurednu prodavnicu

Radi ovo u VS Code-u

Preuzmi mali funkcionalan program za prodavnicu. Unapredi imena, docstringove, oznake tipova i ponavljanje, a da ne promeniš ono što program radi.

Preuzmi početni projekat
Početni projekat neuredne prodavnice
docstrings_clean_code_prodavnica/
├── main.py
├── prodavnica.py
├── README_SR.md
└── README_EN.md

Pokreni program pre izmena, sačuvaj njegov deterministički račun, a zatim uporedi rezultat nakon svakog malog koraka refaktorisanja.

Lokalno refaktoriši projekat

  1. Otvori lokalni folder u VS Code-uOtvori preuzeti funkcionalan program u VS Code-u, najpre ga pročitaj i prepoznaj imena ili ponovljen kod koji otežavaju razumevanje.
  2. Zadrži isto ponašanjeCilj je čitljiviji kod, a ne drugačiji program. Uporedi izlaz pre i posle svakog malog unapređenja.
↳

Za sada: python main.py Pokreni ga pre i posle refaktorisanja da potvrdiš da se i dalje ponaša kako se očekuje.

Korisna navika pri refaktorisanju

  • Menjaj jednu malu ideju odjednomPreimenuj ili izdvoji jedan deo, a zatim ponovo pokreni program. Mali koraci olakšavaju da primetiš nenamernu promenu ponašanja.

Šta će ovaj kod ispisati?

Program ne poziva pozdrav(). Obrati pažnju na to šta sadrži __doc__.

def pozdrav(ime: str) -> str:
    """Returns a greeting for the given name."""
    return f"Hello, {ime}!"

print(pozdrav.__doc__)
Izaberi izlaz

Izgrađuj samopouzdanje samostalnim radom

Opiši čitljiviju verziju

Zamisli ovu funkciju koja radi, ali nije jasna. Nemoj još pisati potpunu zamenu; najpre objasni koja bi unapređenja napravio/la.

Vaš ciljPredloži bolje ime funkcije, jasnija imena parametara, koristan docstring i odgovarajuće oznake tipova za funkciju koja računa cenu sa popustom.
def f(x, y):
    return x - x * y / 100

Radi u svom lokalnom VS Code folderu

Nagoveštaji korak po korak
  • Počni tako što ćeš imenovati ono što funkcija vraća.
  • Zatim imenuj šta predstavlja svaki ulaz i koju vrstu vrednosti treba da sadrži.
  • Napiši jednu rečenicu koja objašnjava namenu funkcije pre nego što razmišljaš o implementaciji.

Pitaj Slobyja jedno vodeće pitanje o imenu ili docstringu; nemoj tražiti da ceo zadatak zameni gotovim rešenjem.

Sloby, maskota Python AI Tutora

Tvoj mentor za učenje

Prijavite se da pitate Slobyja

Napravite besplatan nalog ili se prijavite za AI smernice tokom učenja.

Prijavite se da proverite svoje razumevanje

Napravite besplatan nalog ili se prijavite da biste dobili AI povratnu informaciju i sačuvali napredak u učenju.

Python AI Tutor · Uči razumevanjem, a ne samo pokretanjem koda.