Aliohjelma
Aliohjelma (kutsutaan eri yhteyksissä myös termeillä proseduuri, funktio, metodi tai rutiini) on ohjelmoinnissa itsenäinen ohjelman osa, joka suorittaa tietyn toiminnon ja jota voidaan kutsua eri puolilta pääohjelmaa tai muista aliohjelmista. Aliohjelman suorituksen jälkeen ohjelman suoritus jatkuu kutsuvassa ohjelmassa aliohjelmakutsua seuraavasta lauseesta.
Proseduraalisessa ohjelmointikielessä aliohjelmia kutsutaan "funktioiksi" tai "proseduureiksi". Olio-ohjelmoinnissa olion funktioita nimitetään "jäsenfunktioiksi" tai "metodeiksi".
Ohjelmoinnissa esiintyy usein tilanne, että samanlaista toimintoa tarvitaan ohjelman useassa eri kohdassa. Kirjoittamalla toiminto aliohjelmaksi voidaan se suorittaa useasta eri kohdasta. Näin säästetään työtä. Jos sama toiminto kirjoitettaisiin ohjelmaan yhä uudelleen, ohjelmakoodi pitenisi ja tulisi epäselväksi ja virheiden mahdollisuus kasvaisi. Mahdolliset korjaukset ohjelmakoodiin pitäisi tehdä useaan paikkaan. Aliohjelmat myös lisäävät ohjelman modulaarisuutta, koska ne mahdollistavat ohjelmakoodin jakamisen pienempiin itsenäisiin osiin ja parantavat siten ohjelmiston luettavuutta, testattavuutta ja ylläpidettävyyttä.
Aliohjelmaa voidaan "kutsua" useassa kohdassa ohjelmaa. Aliohjelman määrittelyn yhteydessä esitellään joukko aliohjelman "parametreja" tai "argumentteja". Aliohjelmalla voi olla parametrien lisäksi "paikallisia muuttujia", jotka näkyvät ja ovat käytettävissä vain aliohjelman alueella (). Aliohjelman parametrit voivat olla muuttujia tai viittauksia muuttujiin.
Aliohjelman kutsuun on eräissä suorittimissa tuki käskytasolla: konekielinen käsky tallentaa senhetkisen ohjelmalaskurin arvon pinoon ja hyppää toiseen kohtaan ohjelmaa. Kun aliohjelma päättyy, paluuosoite haetaan pinon päältä. Kaikki kielet eivät tue pinoa: FORTRAN 77 ei tukenut pinoa vaan funktioilla oli oma muistialueensa argumenteille ja datalle.
Tilaa jonne osoite tallennetaan kutsutaan aliohjelman aktivaatiotietueeksi. Siihen tallennetaan lisäksi aliohjelman käyttämät paikalliset muuttujat. Jos aliohjelma kutsuu itseään useaan kertaan, eli toimii rekursiivisesti, aktivaatiotietueita on useampi pinon päällä.
Esimerkki aliohjelmasta, joka saa parametriksi numeroarvon ("int" eli "integer") nimeltä "ika" ja joka palauttaa boolean-arvon ("true/false") sen mukaan, onko "ika" alle 18 vai ei.
Tämän jälkeen aliohjelmaa voitaisiin kutsua esimerkiksi seuraavasti:
Olio-ohjelmoinnissa eräissä kieli aliohjelman ("metodin") eteen kirjoitetaan halutun olion nimi seuraavasti:
Eräät ohjelmointikielet kuten C-kieli erottavat "määrittelyn" () ja "toteutuksen" (). Määrittely kertoo miten funktiota kutsutaan ilman tarvetta tietää toteutusta toisessa osassa ohjelmaa.
Yleinen tapa palauttaa aliohjelmasta tietoa on sen paluuarvon avulla. Esimerkiksi aliohjelma voi palauttaa "int" -tyyppisen kokonaisluvun ja sen arvona luvun "42" seuraavasti:
Eräissä kielissä voidaan antaa oletusarvot argumenteille, jolloin kutsuessa ei välttämättä tarvitse antaa arvoa jokaiselle argumentille.
Esimerkki, joka antaa kahden muuttujan tulon:
Parametreja voidaan välittää kielestä riippuen kolmella tavalla aliohjelmalle:
Osoittimen ja referenssin tapauksessa aliohjelma voi palauttaa tietoa annettuihin muuttujiin tai olioihin. Esimerkiksi funktio, joka laskee kaksi arvoa yhteen, palauttaa summan sekä merkitsee muuttujan todeksi mikäli jompikumpi parametri ylittää maksimin.
C-kieli ja sen johdannaiset tukevat muuttuvaa määrää parametreja "ellipsis" (codice_1) määrittelyllä. Tällöin aliohjelmassa itsessään on oltava tuki muuttujaluettelon käsittelyyn. Tyypillinen tapaus on codice_2 -funktio, jonka määrittely on muotoa:
Käyttö:
Eräät ohjelmointikielet tukevat "ylikuormittamista" (vaihtoehtoisia kutsutapoja ja toteutuksia) sekä "ylikirjoittamista" (ks. virtuaalimetodi).
Ylikuormittamisessa samalle aliohjelmalle voi olla rinnakkaisia toteutuksia eri tietotyypeillä kuten neliöjuuren laskentaan: