Funktiot 2/4
Arvo- ja muuttujaparametrit
Funktio voi muuttaa ns. muuttujaparametrin arvoa muttei arvoparametrin arvoa
Esimerkki 1: Arvoparametrin arvo ei muutu funktion suorittamisen seurauksena:
Alkeistyyppiset muuttujat ovat ns. arvoparametreja. Siis
- int - kokonaislukutyyppi
- float - liukulukutyyppi
- str - merkkijonotyyppi
Funktio voi kuitenkin palauttaa arvon, vaikkei itse arvoparametrin arvo muuttuisikaan.
Arvo palautetaan 'return' -lauseella.
Esimerkki 2: Funktio palauttaa arvon return -lauseella:
Tehtävä 1a: Laadi esimerkin 2 kaltainen funktio nimeltään 'luvun_kuutio', joka palauttaa luvun kuution (eli kolmannen potenssin arvon) ja sijoittaa sen muuttujaan luku samalla tavoin kuin esimerkissä 2.
Tehtävä 1b: Jalosta edellistä koodia siten, että ohjelma kysyy käyttäjältä luvun, jonka kuutio lasketaan ja tulostetaan näyttöön.
Esimerkki 3: Muuttujaparametrin arvo muuttuu funktion suorittamisen seurauksena:
Tehtävä 2a: Laadi funktio nimeltään 'tulosta_lista', joka tulostaa listan alkiot kunkin omalle rivilleen. Laadi myös koodi jossa tulostetaan esimerkiksi listan 'luvut = [7,12,33,89] sisältö 'tulosta_lista' -funktion avulla.
Tehtävä 2b: Laadi funktio nimeltään 'vahenna_yhdella', jossa käydään lista läpi ja jokaisen listan alkion arvoa vähennetään yhdellä. Saat olettaa, että listan sisältö on tyypiltään sellainen, että vähennys on mahdollista tehdä. Laadi myös koodi, jossa tulostetaan aluksi listan sisältö, sitten vähennetään alkioita yhdellä ja lopuksi tulostetaan uudelleen listan sisältö.
Tehtävä 2c: Laadi funktio nimeltään 'laske_summa' joka palauttaa listan alkioiden summan. Laadi myös koodi, jossa ensin tulostetaan listan sisältö näkyviin ja sitten tulostetaan listan alkioiden summa.
Globaali muuttuja
Tarkastele huolellisesti seuraava tapaus ja vertaa sitä esimerkkiin 1.Esimerkki 4: Funktio muuttaa globaalin muuttujan arvoa:
Huomaa erot esimerkkiin 1 verrattuna:
- funktion kutsussa ei välitetä parametrina luku-nimistä muuttujaa
- funktion sisällä kerrotaan, että käytetään ns. globaalia muuttujaa nimeltään luku
Globaalien muuttujien käyttöä kannattaa välttää, koska ohjelman laajetessa olisi suuri riski muuttaa globaalin muuttujan arvoa jossain kohdassa ohjelmistoa siten, että joudutaan ristiriitaan toisessa kohtaa ohjelmistoa.
Sen sijaan muuttujat kannattaa yleensä välittää funktiolle parametrina esimerkin 1 tapaan!
Joskus globaalilla muuttujalla saadaan lisäarvoa kuten seuraavassa esimerkissä.
Esimerkki 5: Globaali muuttuja nimeltään laskuri pitämään lukua erilaisten laskujen suorittamisesta:
- - - - - - - - - - - - - - - - - - - - - - - -
Tehtävä 3a: Laadi oma nelilaskin. Se tarkoittaa yhteen-, vähennys-, kerto- ja jakolaskua. Laskin kysyy käyttäjältä luvun, laskutoimituksen ja toisen luvun. Toisen luvun antamisen jälkeen laskin tulostaa arvon ja ohjelman suoritus loppuu.
Tehtävä 3b: Muuta laskinta siten, että käyttäjä voi antaa erilaisia laskutoimituksia peräkkäin ja kun hän lopulta painaa yhtä suuri kuin -merkkiä, lasku lasketaan loppuun ja ohjelman suoritus päättyy. Saat olettaa, että käyttäjä antaa vain lukuja ja lopuksi yhtä suuri kuin merkin.
Tehtävä 3c: Täydennä laskinta siten, että ohjelma ei kaadu, mikäli käyttäjä antaa jonkin muun kuin luvun. Jos käyttäjä yrittää antaa jonkin muun syötteen, ohjelma vain ilmoittaa, ettei syöte kelpaa ja pyytää käyttäjältä uutta, kelpaavaa syötettä.