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.