Files
2025-08-29 01:31:41 +00:00

10 KiB
Raw Permalink Blame History

JavaScriptin perusteet: Metodit ja funktiot

JavaScript Basics - Functions

Sketchnote: Tomomi Imura

Ennakkokysely

Ennakkokysely

Kun ajattelemme koodin kirjoittamista, haluamme aina varmistaa, ettÀ koodi on luettavaa. Vaikka tÀmÀ kuulostaa vastoin intuitiota, koodia luetaan paljon useammin kuin sitÀ kirjoitetaan. Yksi keskeinen työkalu kehittÀjÀn työkalupakissa yllÀpidettÀvÀn koodin varmistamiseksi on funktio.

Metodit ja funktiot

đŸŽ„ Klikkaa yllĂ€ olevaa kuvaa nĂ€hdĂ€ksesi videon metodeista ja funktioista.

Voit kÀydÀ tÀmÀn oppitunnin lÀpi Microsoft Learnissa!

Funktiot

Funktio on pohjimmiltaan koodilohko, jonka voimme suorittaa tarpeen mukaan. TĂ€mĂ€ on tĂ€ydellinen ratkaisu tilanteisiin, joissa meidĂ€n tĂ€ytyy suorittaa sama tehtĂ€vĂ€ useita kertoja; sen sijaan, ettĂ€ kopioisimme logiikan useisiin paikkoihin (mikĂ€ tekisi pĂ€ivityksistĂ€ hankalia), voimme keskittÀÀ sen yhteen paikkaan ja kutsua sitĂ€ aina tarvittaessa – voit jopa kutsua funktioita toisista funktioista!

YhtÀ tÀrkeÀÀ on antaa funktiolle nimi. Vaikka tÀmÀ saattaa tuntua vÀhÀpÀtöiseltÀ, nimi toimii nopeana tapana dokumentoida koodin osa. Voit ajatella sitÀ kuin painikkeen etikettinÀ. Jos painikkeessa lukee "Peruuta ajastin", tiedÀn sen pysÀyttÀvÀn kellon.

Funktion luominen ja kutsuminen

Funktion syntaksi nÀyttÀÀ tÀltÀ:

function nameOfFunction() { // function definition
 // function definition/body
}

Jos haluaisin luoda funktion, joka nÀyttÀÀ tervehdyksen, se voisi nÀyttÀÀ tÀltÀ:

function displayGreeting() {
  console.log('Hello, world!');
}

Aina kun haluamme kutsua (tai suorittaa) funktiomme, kÀytÀmme funktion nimeÀ ja sen perÀssÀ (). On hyvÀ huomata, ettÀ funktiomme voidaan mÀÀritellÀ ennen tai jÀlkeen sen kutsumisen; JavaScript-kÀÀntÀjÀ löytÀÀ sen puolestasi.

// calling our function
displayGreeting();

NOTE: On olemassa erityinen funktiotyyppi, jota kutsutaan metodiksi, ja olet jo kÀyttÀnyt niitÀ! Itse asiassa nÀimme tÀmÀn esimerkissÀmme, kun kÀytimme console.log:ia. Se, mikÀ erottaa metodin funktiosta, on se, ettÀ metodi on liitetty objektiin (esimerkissÀmme console), kun taas funktio on irrallinen. Monet kehittÀjÀt kÀyttÀvÀt nÀitÀ termejÀ kuitenkin keskenÀÀn.

Funktion parhaat kÀytÀnnöt

Kun luot funktioita, pidÀ mielessÀsi muutama hyvÀ kÀytÀntö:

  • KĂ€ytĂ€ aina kuvailevia nimiĂ€, jotta tiedĂ€t, mitĂ€ funktio tekee
  • KĂ€ytĂ€ camelCase-muotoilua yhdistÀÀksesi sanoja
  • PidĂ€ funktiot keskittyneinĂ€ yhteen tiettyyn tehtĂ€vÀÀn

Tiedon vÀlittÀminen funktiolle

Jotta funktio olisi monikÀyttöisempi, haluat usein vÀlittÀÀ sille tietoa. Jos tarkastelemme yllÀ olevaa displayGreeting-esimerkkiÀ, se nÀyttÀÀ aina Hello, world!. Ei kovin hyödyllinen funktio. Jos haluamme tehdÀ siitÀ hieman joustavamman, kuten antaa jonkun mÀÀrittÀÀ tervehdyksen kohteen nimen, voimme lisÀtÀ parametrin. Parametri (jota kutsutaan joskus myös argumentiksi) on lisÀtieto, joka lÀhetetÀÀn funktiolle.

Parametrit luetellaan mÀÀrittelyosassa sulkujen sisÀllÀ ja erotetaan pilkulla, kuten tÀssÀ:

function name(param, param2, param3) {

}

Voimme pÀivittÀÀ displayGreeting-funktion hyvÀksymÀÀn nimen ja nÀyttÀmÀÀn sen.

function displayGreeting(name) {
  const message = `Hello, ${name}!`;
  console.log(message);
}

Kun haluamme kutsua funktiomme ja vÀlittÀÀ sille parametrin, mÀÀritÀmme sen sulkujen sisÀllÀ.

displayGreeting('Christopher');
// displays "Hello, Christopher!" when run

Oletusarvot

Voimme tehdĂ€ funktiostamme vielĂ€ joustavamman lisÀÀmĂ€llĂ€ enemmĂ€n parametreja. Mutta entĂ€ jos emme halua vaatia kaikkien arvojen mÀÀrittĂ€mistĂ€? Pysyen tervehdyksen esimerkissĂ€, voisimme jĂ€ttÀÀ nimen pakolliseksi (meidĂ€n tĂ€ytyy tietÀÀ, ketĂ€ tervehdimme), mutta haluamme sallia tervehdyksen mukauttamisen haluttaessa. Jos joku ei halua mukauttaa sitĂ€, tarjoamme oletusarvon. Oletusarvon mÀÀrittĂ€miseksi parametrille asetamme sen samalla tavalla kuin muuttujalle – parameterName = 'defaultValue'. TĂ€ssĂ€ on tĂ€ydellinen esimerkki:

function displayGreeting(name, salutation='Hello') {
  console.log(`${salutation}, ${name}`);
}

Kun kutsumme funktiota, voimme pÀÀttÀÀ, haluammeko mÀÀrittÀÀ arvon salutation-parametrille.

displayGreeting('Christopher');
// displays "Hello, Christopher"

displayGreeting('Christopher', 'Hi');
// displays "Hi, Christopher"

Paluuarvot

TÀhÀn asti rakentamamme funktio tulostaa aina konsoliin. Joskus tÀmÀ voi olla juuri sitÀ, mitÀ haluamme, erityisesti kun luomme funktioita, jotka kutsuvat muita palveluita. Mutta entÀ jos haluan luoda apufunktion suorittamaan laskutoimituksen ja palauttamaan arvon, jotta voin kÀyttÀÀ sitÀ muualla?

TÀmÀ onnistuu kÀyttÀmÀllÀ paluuarvoa. Paluuarvo palautetaan funktiosta ja voidaan tallentaa muuttujaan samalla tavalla kuin voisimme tallentaa esimerkiksi merkkijonon tai numeron.

Jos funktio palauttaa jotain, kÀytetÀÀn avainsanaa return. return-avainsana odottaa arvoa tai viittausta siihen, mitÀ palautetaan, kuten tÀssÀ:

return myVariable;

Voisimme luoda funktion, joka luo tervehdyksen ja palauttaa arvon kutsujalle.

function createGreetingMessage(name) {
  const message = `Hello, ${name}`;
  return message;
}

Kun kutsumme tÀtÀ funktiota, tallennamme arvon muuttujaan. TÀmÀ on hyvin samanlaista kuin jos mÀÀrittÀisimme muuttujan staattiselle arvolle (kuten const name = 'Christopher').

const greetingMessage = createGreetingMessage('Christopher');

Funktiot funktioiden parametreina

Kun etenet ohjelmointitaidoissasi, törmÀÀt funktioihin, jotka hyvÀksyvÀt funktioita parametreina. TÀmÀ kÀtevÀ temppu on yleinen, kun emme tiedÀ, milloin jokin tapahtuu tai valmistuu, mutta tiedÀmme, ettÀ meidÀn tÀytyy suorittaa jokin toiminto vastauksena.

Esimerkiksi setTimeout aloittaa ajastimen ja suorittaa koodin, kun se pÀÀttyy. MeidÀn tÀytyy kertoa sille, mitÀ koodia haluamme suorittaa. Kuulostaa tÀydelliseltÀ tehtÀvÀltÀ funktiolle!

Jos suoritat alla olevan koodin, 3 sekunnin kuluttua nÀet viestin 3 sekuntia kulunut.

function displayDone() {
  console.log('3 seconds has elapsed');
}
// timer value is in milliseconds
setTimeout(displayDone, 3000);

NimettömÀt funktiot

Katsotaanpa uudelleen, mitÀ olemme rakentaneet. Luomme funktion, jolla on nimi, mutta jota kÀytetÀÀn vain kerran. Kun sovelluksemme monimutkaistuu, voimme huomata luovamme paljon funktioita, joita kutsutaan vain kerran. TÀmÀ ei ole ihanteellista. Kuten kÀy ilmi, meidÀn ei aina tarvitse antaa funktiolle nimeÀ!

Kun vÀlitÀmme funktion parametrina, voimme ohittaa sen etukÀteen luomisen ja sen sijaan rakentaa sen osana parametria. KÀytÀmme samaa function-avainsanaa, mutta rakennamme sen parametrina.

Kirjoitetaan yllÀ oleva koodi uudelleen kÀyttÀmÀllÀ nimetöntÀ funktiota:

setTimeout(function() {
  console.log('3 seconds has elapsed');
}, 3000);

Jos suoritat uuden koodimme, huomaat saavasi samat tulokset. Olemme luoneet funktion, mutta emme joutuneet antamaan sille nimeÀ!

Fat arrow -funktiot

Yksi yleinen oikotie monissa ohjelmointikielissĂ€ (mukaan lukien JavaScript) on mahdollisuus kĂ€yttÀÀ niin sanottua arrow- tai fat arrow -funktiota. Se kĂ€yttÀÀ erityistĂ€ merkintÀÀ =>, joka nĂ€yttÀÀ nuolelta – tĂ€stĂ€ nimi! KĂ€yttĂ€mĂ€llĂ€ => voimme ohittaa function-avainsanan.

Kirjoitetaan koodi vielÀ kerran uudelleen kÀyttÀmÀllÀ fat arrow -funktiota:

setTimeout(() => {
  console.log('3 seconds has elapsed');
}, 3000);

Milloin kÀyttÀÀ mitÀkin strategiaa

Olet nyt nÀhnyt kolme tapaa vÀlittÀÀ funktio parametrina ja saatat miettiÀ, milloin kÀyttÀÀ mitÀkin. Jos tiedÀt, ettÀ kÀytÀt funktiota useammin kuin kerran, luo se normaalisti. Jos kÀytÀt sitÀ vain yhdessÀ paikassa, on yleensÀ parasta kÀyttÀÀ nimetöntÀ funktiota. Se, kÀytÀtkö fat arrow -funktiota vai perinteisempÀÀ function-syntaksia, on makuasia, mutta huomaat, ettÀ useimmat modernit kehittÀjÀt suosivat =>.


🚀 Haaste

Osaatko selittÀÀ yhdessÀ lauseessa, mikÀ ero on funktioiden ja metodien vÀlillÀ? Kokeile!

JĂ€lkikysely

JĂ€lkikysely

Kertaus ja itseopiskelu

Kannattaa lukea lisÀÀ arrow-funktioista, sillÀ niitÀ kÀytetÀÀn yhÀ enemmÀn koodipohjissa. Harjoittele funktion kirjoittamista ja kirjoita se sitten uudelleen kÀyttÀen tÀtÀ syntaksia.

TehtÀvÀ

Hauskaa funktioiden parissa


Vastuuvapauslauseke:
TÀmÀ asiakirja on kÀÀnnetty kÀyttÀmÀllÀ tekoÀlypohjaista kÀÀnnöspalvelua Co-op Translator. Vaikka pyrimme tarkkuuteen, huomioithan, ettÀ automaattiset kÀÀnnökset voivat sisÀltÀÀ virheitÀ tai epÀtarkkuuksia. AlkuperÀistÀ asiakirjaa sen alkuperÀisellÀ kielellÀ tulee pitÀÀ ensisijaisena lÀhteenÀ. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskÀÀntÀmistÀ. Emme ole vastuussa tÀmÀn kÀÀnnöksen kÀytöstÀ aiheutuvista vÀÀrinkÀsityksistÀ tai virhetulkinnoista.