View Single Post
Staro 27.02.2015., 12:28   #39
KhongLo
Registered User
Moj komp
 
KhongLo's Avatar
 
Datum registracije: Jan 2015
Lokacija: Zagreb
Postovi: 695
Kad sam se već dotaknuo lakšeg modificiranja programa i debugginga dat ću još jedan primjer zašto treba koristiti funkcije. Kad sam se prvi put u susreo s programiranjem, korištenje funkcija (i klasa) mi se činilo sasvim bezveze i razmišljao sam u stilu: Ma to je za pi***, ja cijeli kod napišem u komadu i ako je krajnji rezultat točan, onda sam miran, no vrlo brzo sam shvatio da je taj način razmišljanja kriv.

Primjer:
Web shop koji prodaje računalne komponente daje 10% popusta za gotovinsko plaćanje. Kod koji određuje cijenu koju će kupac platiti izgleda ovako:

Code:
def konacna_cijena(cijena_komponente, nacin_placanja):
    # 10% = 0.1
    popust = 0.1

    if nacin_placanja is 'gotovina':
        return cijena_komponente - popust*cijena_komponente
    else:
        return cijena_komponente

# Kupac nazove i pita za cijenu AMD FX 8320 procesora, a trgovac mu odgovara:
cijena_procesora = 1200
cijena_gotovina = konacna_cijena(cijena_procesora, 'gotovina')
print('Za placanje gotovinom to ce vas kostati', cijena_gotovina, 'kn,')
cijena_rate = konacna_cijena(cijena_procesora, 'rate')
print('a ako placate na rate, onda je cijena', cijena_rate, 'kn.')
Ako iz bilo kojeg razloga vlasnik web shopa odluči da je bolje da popust za gotovinsko placanja bude 9%, jedina stvar koju će trebati promijeniti jest umjesto popust = 0.1 napisati popust = 0.09.

Kada bi kod bio napisan tako da se za svaku komponentu konačna cijena računa zasebno kao što je to dano u primjeru ispod, tada bi promjena iz 10 u 9% zahtijevala malo više vremena, a mogućnost da se nešto propusti promijeniti ili napravi krivo je daleko veća.

Code:
def cijena_procesora(cijena_cpu, nacin_placanja):
    popust = 0.1

    if nacin_placanja is 'gotovina':
        return cijena_cpu - popust*cijena_cpu
    else:
        return cijena_cpu

def cijena_grafe(cijena_gpu, nacin_placanja):
    popust = 0.1

    if nacin_placanja is 'gotovina':
        return cijena_gpu - popust*cijena_gpu
    else:
        return cijena_gpu

def cijena_memorije(cijena_ram, nacin_placanja):
    popust = 0.1

    if nacin_placanja is 'gotovina':
        return cijena_ram - popust*cijena_ram
    else:
        return cijena_ram
Dakle, ovako se ne pisu programi!

Doduše, programe koji imaju veze s poslovanjem trgovine bilo bi bolje pisati objektno orijentirano, ali sada smo na funkcijama, pa sam onda korištenje klasa izostavio.
KhongLo je offline   Reply With Quote