Ohjelmointikurssi ei toimi kunnolla selaimessasi.
Ohjelmointikurssi ei valitettavasti toimi Internet Explorer -selailemella. Suosittelemme että teet kurssia joko uusimmalla Chromella tai uusimalla Firefoxilla.

Funktiot

Aiemmin tällä kurssilla koodi suoritettiin heti, kun suoritus osui koodin kohdalle. Haluamme kuitenkin usein siirtää koodin suoritusta tulevaisuuteen johonkin tiettyyn tapahtumaan. Tätä varten on olemassa funktiot. Funktioilla määritellään ohjelmakoodia, joka suoritetaan myöhemmin.

Funktio määritellään kirjoittamalla function funktionNimi() { koodi }. Funktion määritellyssä aaltosulkujen välissä on koodi, joka tallennetaan odottamaan funktion kutsumista. Voimme esimerkiksi määritellä funktion, joka tulostaa tervehdyksen.

function tervehdi() {
  console.log("Terve!")
}

Funktion kutsuminen

Kun haluamme suorittaa jonkin funktion sisällä määriteltyä koodia, joudumme kutsumaan funktiota. Meidän onneksemme funktiot vastaavat omaan nimeensä, jos käytämme tiettyä kutsutapaa. Funktion kutsu onnistuu kirjoittamalla kutsuttavan funktion nimi, jonka perään laitetaan sulut (). Funktion kutsu onnistuu siis tyyliin: kutsuttavanFunktionNimi().

Funktion nimi katsomalla funktion määritelmää. Nimi on function-sanan jälkeinen sana. Esimerkiksi voimme kutsua tervehdys-funktiota kirjoittamalla tervehdi(), koska saimme funktion nimen selville funktion määritelmästä: function tervehdi(). Funktion kutsuminen suorittaa sen sisällä määritellyn koodin. Esimerkiksi alla oleva koodi tulostaisi "Terve!".

tervehdi()
Tehtävä:
Funktion kutsuminen
Alla on määritelty funktio. Kutsu sitä.
Tehtävä:
Useamman funktion kutsuminen
Alla on määritelty kaksi funktiota. Kutsu niitä.

Funktion kutsuminen monesti

Funktiolla voi näppärästi vähentää ylimääräistä kirjoittamista. Jokaista määritettyä funktiota voidaan kutsua niin monta kertaa kuin haluamme. Jos esimerkikis kutsimme tervehdi-funktiota kaksi kertaa, tulostuu "Terve!" myös kahdesti.

Tehtävä:
Kutsutaan monesti
Kokeillaan kutsua funktiota monta kertaa. Alla olevassa tehtävässä on määritetty ja kutsuttu funktiota kerran. Muuta ohjelmaa siten, että funktiota kutsutaan viisi kertaa.

Funktion määrittäminen

Uusi funktio määritellään sanan function avulla. Määrittämisen syntaksi menee alla olevalla tavalla.

function funktionNimi() {
  console.log("Tämä on funkition sisältö.")
}

Funktion sisällä voidaan tehdä kaikkea mitä olemme tehnneet aikaisemmin tällä kurssilla. Luomaan muuttujia, tulostamaan ja niin edelleen. Harjoitellaan seuraavaksi funktioiden luomista.

Tehtävä:
1
Tehtäväpohjassa on määritetty funktio nimeltä vaaraNimi. Kokeile ajaa koodi. Saamasi virhe johtuu siitä, että funktion määritelmässä nimi on väärin ja alempana oleva kutsu onnistu. Muuta funktion nimeksi oikeaNimi.
Tehtävä:
Tulosta funktion sisällä
Tehtäväpohjassa on määritetty funktio tulostaJotakinHauskaa. Sen sisällä ei ole vielä yhtään koodia. Tulosta jotakin funktion sisällä.
Tehtävä:
Koko funktion määrittäminen
Määritä funktio nimi, joka tulostaa nimesi.

Muuttujien käyttäminen funktion ulkopuolelta

Funktiossa pystytään käyttämään funktion ulkopuolisia muuttujia, jotka ovat luotu ennen muuttujan määritelmää. Esimerkiksi alla oleva funktio toimisi hyvin.

var viesti = "Hei"
function tulostaViesti() {
  console.log(viesti)
}

Muuttuja kannattaa luoda ennen funktiota, jos halutaan esimerkiksi muistaa jotakin funktioden kutsujen välillä. Esimerkiksi alla oleva funktio tulostaa kuinka monta kertaa sitä on kutsuttu.

var kertaa = 0
function tulostaViesti() {
  kertaa = kertaa + 1
  console.log("Minua on kutsuttu " + kertaa + " kertaa!")
}

Jos tätä funktiota kutsutaan kolme kertaa, tulostukseksi tulee:

Minua on kutsuttu 1 kertaa!
Minua on kutsuttu 2 kertaa!
Minua on kutsuttu 3 kertaa!
Tehtävä:
Muuttuja funktion ulkopuolella
Tehtäväpojassa olevassa funktiossa tulostetaan funktion sisällä oleva muuttuja. Muuta tulostuskomento tulostamaan funktion ulkopuolella määritetty muuttuja.
Tehtävä:
Luo muuttuja funktion ulkopuolelle
Tehtävässä oleva funktio yrittää käyttää muuttujaa x. Muuttujan arvo pitäisi säilyä kutsujen välillä. Määritä siis muuttuja ennen funktiota ja aseta sen arvoksi 100.

Funktioiden argumentit

Funktiolle voidaan antaa kutsuttaessa argumenttejä. Argumentit kirjoitetaan kutsuessa sulkujen sisään. Olemme itseasiassa käyttäneet argumenttejä monesti, aina kun tulostamme jotakin. Esimerkiksi tulostuksessa: console.log("terve") merkkijono "terve" onkin tulostuskomennolle annettu argumentti.

Jotta funktiossa voidaan käyttä argumenttejä, funktion määrittelyssä täytyy sanoa mitä argumenttejä funktio käyttää. Tämä onnistuu kirjoitamalla argumentin nimen funktion määritelmään sulkujen väliin -- vähäsen samaan tapaan kuin funkition kutsumisessa.

function tulostaArgumentti(argumentti) {
  console.log(argumentti)
}
tulostaArgumentti("Hello")
Tehtävä:
Argumentin käyttäminen
Tehtävässä on määritetty funktio, joka saa argumentin. Tulosta argumentti.
Tehtävä:
Väärän niminen argumentti
Tehtäväpohjan funktiossa argumentti on väärän niminen. Korjaa virhe.
Tehtävä:
Uusi argumentti
Lisää tehtäväpohjan funktiolle argumentti ja tulosta se.
Tehtävä:
Argumentilla kutsuminen
Tehtäväpohjassa kutsutaan funktiota kaannaLause mielenkiintoisella lauseella. Muuta kutsuun annettua argumenttia siten, että funktio tulostaa: Kukkakaalin hinta on nousussa.
Tehtävä:
Muuttuja argumenttina
Tehtäväpohjassa on muuttuja, anna se funktiolle argumenttina.

Funktio voi ottaa vastaan useita argumenttejä. Useamman argumentin voi määrittää listamalla kaikkien muuttujien nimet pilkuilla erotettuina. Alla oleva esimerkki tulostaisi: Terve, Essi Esimerkki.

function tervehdi(etunimi, sukunimi) {
  console.log("Terve, " + etunumi + " " + sukunimi)
}
tervehdi("Essi", "Esimerkki")

Funktion paluuarvo

Usein funktiot tekevät jonkinlasta työtä ja tällä työllä on yleensä myös tulos. Olisi näppärää, jos pystyisimme antamaan tämän tuloksen takaisin alkuperäiselle koodille.

Esimerkiksi alla meillä on koodi, joka nostaa lukua yhdellä. Valitettavasti funktio vain tulostaa laskunsa tuloksen. Emme voi käyttää tulosta esimerkiksi uudelleen kutsuttavassa koodissa.

function kasvata(luku) {
  console.log(luku + 1)
}
kasvata(1)

Funktiosta voidaan palauttaa asiota kutsuvan koodin käyttöön return-sanalla. Esimerkiksi sanomalla return 1, funktio palauttaa luvun 1 alkuperäisen koodin käyttöön. Alla on edellinen luvun kasvattava funktio uudelleenkirjoitettu return-sanaa käyttäen.

function kasvata(luku) {
  return luku + 1;
}
var paaluuarvo = kasvata(1)
console.log("Paluuarvo oli: " + paluuarvo)
Tehtävä:
Funktion paluuarvo
Tehtäväpohjassa on määritetty funktio, joka ottaa vastaan luvun ja palauttaa kyseisen luvun neliön. Kutsu funktiota jollakin numerolla ja talleta sen paluuarvo muuttujaan paluuarvo.
Tehtävä:
Palauta luku
Tehtäväpohjassa on funktio, joka saa argumenttina luvun. Palauta luku sellaisenaan.
Tehtävä:
Kolmas potenssi
Tehtäväpohjassa on funktio, joka saa argumenttina luvun. Palauta luvun kolmas potenssi.
Valmis?
Jatka seuraavaksi
piirtämiseen.