Ohjelman jako funktioihin ja pääohjelma

Tähän asti esitetyt esimerkkiohjelmat ovat olleet korkeintaan muutaman rivin mittaisia. Käytännön elämässä tarvitaan kuitenkin usein ohjelmia, jotka sisältävät satoja, tuhansia ja jopa kymmeniä tuhansia rivejä. Jos tällöin koko pitkä ohjelma koostuisi vain yhdestä osasta, joka sisältäisi suoritettavat ohjelmarivit peräkkäin, olisi ohjelman rakenteen ja toiminnan hahmottaminen hyvin vaikeaa. Ohjelman rakennetta selkiytetään sillä, että ohjelma jaetaan funktioihin. Yhteen funktioon kirjoitetaan muutamasta rivistä muutamaan kymmeneen riviin ohjelmakoodia, joka tyypillisesti suorittaa jonkin tehtävän. Funktiolle annetaan sen tarkoitusta kuvaava nimi. Kun ohjelmassa sitten halutaan suorittaa tähän funktioon kuuluvat käskyt, kirjoitetaan ohjelmaan rivi, joka kutsuu tätä funktiota eli pyytää suorittamaan tämän funktion.

Sen lisäksi, että ohjelman jakaminen funktioihin selkeyttää ohjelmaa, niin se myös säästää työtä. Jos samanlainen ohjelman osa pitää suorittaa monta kertaa, riittää kirjoittaa tähän osaan kuuluvat käskyt yhden kerran yhdeksi funktioksi. Tämän jälkeen riittää kirjoittaa yksi käsky, funktion kutsu, aina kun kyseinen osa halutaan suorittaa.

Kierroksella 4 kerrotaan tarkemmin, miten funktioita määritellään ja mitä kaikkea muuta asiaan liittyy. Tässä vaiheessa opetellaan kuitenkin yhden erityisen funktion, pääohjelman kirjoittaminen ja kutsuminen.

Tyypillisesti Python-ohjelmassa on yksi erityisasemassa oleva funktio, jota kutsutaan pääohjelmaksi. Tämän funktion nimeksi annetaan yleensä main ja se on se osa ohjelmasta, josta ohjelman suoritus aloitetaan. Kun ohjelma käynnistetään, suoritetaan pääohjelmassa olevia käskyjä järjestyksessä, kunnes jokin pääohjelmassa oleva käsky (esimerkiksi toisen funktion kutsu) aiheuttaa sen, että siirrytään ohjelmassa johonkin muualle. Pääohjelman määrittelyssä kerrotaan, mitä käskyjä pääohjelmassa on. Määrittely aloitetaan rivillä

def main():

Sana def kertoo, että ollaan määrittelemässä funktiota, main on määriteltävän funktion nimi ja itse määrittely tulee kaksoispisteen jälkeen. Nimen jälkeen olevat sulut liittyvät siihen, että määriteltäville funktioille on mahdollista määritellä myös parametreja, joista kerrotaan tarkemmin kierroksella 4.

Tämän rivin jälkeen tulevat varsinaiset pääohjelmaan kuuluvat käskyt. Jokainen pääohjelmaan kuuluva rivi on sisennetty. Sisennysten avulla osoitetaan, mitkä rivit kuuluvat pääohjelman määrittelyyn. Ensimmäinen näiden rivien jälkeen tuleva sisentämätön rivi ei enää kuulu pääohjelmaan. Esimerkiksi jos aikaisemmin esitetty fahrenheit-celsius-muunnoksen tekevä ohjelma kirjoitetaan pääohjelmaksi, näyttää se seuraavalta:

def main():
    rivi = input("Anna lampotila fahrenheit-asteina: ")
    fahrenheit = float(rivi)
    celsius = (fahrenheit - 32) * 5.0 / 9.0
    print(fahrenheit, "F on", celsius, "C")

Pelkkä pääohjelman määrittely ei saa kuitenkaan ohjelmaa vielä tekemään mitään. Ohjelmassa pitää myös kutsua pääohjelmaa eli kirjoittaa käsky, joka saa aikaiseksi sen, että suoritetaan main-niminen funktio (pääohjelma). Tämä käsky on yksinkertaisesti seuraava:

main()

eli kutsuttavan funktion nimi ja sen perässä sulut. Pääohjelman kutsu voidaan kirjoittaa ohjelmatiedostossa pääohjelman määrittelyn jälkeen. Kutsua sisältävää riviä ei ole enää sisennetty, koska pääohjelman kutsu ei kuulu pääohjelman määrittelyyn.

Kokonaisuudessaan siis esimerkkiohjelman sisältävään tiedostoon kirjoitetaan seuraavat rivit:

def main():
    rivi = input("Anna lampotila fahrenheit-asteina: ")
    fahrenheit = float(rivi)
    celsius = (fahrenheit - 32) * 5.0 / 9.0
    print(fahrenheit, "F on", celsius, "C")

main()