Funktsioonid
Õpieesmärgid
Selle peatüki lõpuks peaks õppija:
- mõistma, miks funktsioone kasutatakse
- oskama kirjutada funktsiooni deklaratsiooni ja noolfunktsiooni
- oskama kasutada parameetreid ja argumente
- mõistma
returnvõtmesõna rolli - oskama eristada väärtuse tagastamist ja konsooli väljastamist
- mõistma funktsiooni skoobi põhimõtet
Miks funktsioone vaja on?
Funktsioon on korduvkasutatav koodiplokk. Kui programmis on tegevus, mida on vaja teha mitu korda, tasub see panna funktsiooni sisse.
Näiteks veebipoes võib olla vaja arvutada soodushinda mitmes kohas: toote kaardil, ostukorvis ja tellimuse kinnituses. Kui arvutus on funktsioonis, ei pea sama loogikat igale poole kopeerima.
function calculateDiscountPrice(price, discountPercent) {
return price - price * (discountPercent / 100);
}
const finalPrice = calculateDiscountPrice(100, 20);
console.log(finalPrice); // 80Funktsiooni deklaratsioon
Funktsiooni saab luua function märksõnaga.
function greetUser(name) {
return `Tere, ${name}!`;
}
console.log(greetUser("Mari")); // "Tere, Mari!"Funktsiooni nimi peaks kirjeldama tegevust. Hea nimi algab tihti tegusõnaga: calculateTotal, validateEmail, getAverageGrade.
Parameetrid ja argumendid
Parameeter on funktsiooni sisendis olev nimi. Argument on tegelik väärtus, mis funktsiooni kutsumisel kaasa antakse.
function addNumbers(a, b) {
return a + b;
}
addNumbers(2, 3);Siin on a ja b parameetrid. Väärtused 2 ja 3 on argumendid.
return
return tagastab funktsioonist väärtuse. Tagastatud väärtust saab salvestada muutujasse või kasutada teises arvutuses.
function isPositiveGrade(grade) {
return grade >= 3;
}
const result = isPositiveGrade(4);
console.log(result); // trueOluline erinevus:
function showGrade(grade) {
console.log(grade);
}
function getGrade(grade) {
return grade;
}console.log() ainult näitab väärtust konsoolis. return annab väärtuse funktsioonist välja.
Noolfunktsioon
Noolfunktsioon on lühem viis funktsiooni kirjutamiseks.
const multiply = (a, b) => {
return a * b;
};
console.log(multiply(4, 5)); // 20Kui funktsioon koosneb ainult ühest avaldisest, saab return kirjutada lühemalt:
const multiply = (a, b) => a * b;Alguses on täiesti sobiv kasutada pikemat kuju, sest see on lihtsamalt loetav.
Funktsiooni skoop
Funktsiooni sees loodud muutuja on nähtav ainult selle funktsiooni sees.
function calculateTotal(price, quantity) {
const total = price * quantity;
return total;
}
console.log(calculateTotal(10, 3)); // 30
// console.log(total); // viga: total on nähtav ainult funktsiooni seesSee aitab vältida olukorda, kus üks programmi osa muudab kogemata teise osa muutujaid.
Päris näide: vormi kontrollimine
function isValidUserName(userName) {
return userName.trim().length >= 2;
}
console.log(isValidUserName("Mari")); // true
console.log(isValidUserName("")); // false
console.log(isValidUserName(" A ")); // falseSellist funktsiooni saaks hiljem kasutada veebivormis enne andmete saatmist.
Levinud vead
Funktsioon arvutab väärtuse, aga ei tagasta seda:
function calculateTotal(price, quantity) {
const total = price * quantity;
}
const result = calculateTotal(10, 2);
console.log(result); // undefinedÕige variant:
function calculateTotal(price, quantity) {
return price * quantity;
}Teine levinud viga on liiga palju vastutust ühes funktsioonis. Hea funktsioon teeb ühe selge asja.
Harjutused
- Kirjuta funktsioon
greetUser, mis võtab nime ja tagastab tervituse. - Kirjuta funktsioon
calculateCartTotal, mis võtab hinna ja koguse ning tagastab kogusumma. - Kirjuta funktsioon
isAdult, mis kontrollib, kas vanus on vähemalt 18. - Kirjuta funktsioon
getAverageGrade, mis arvutab hinnete massiivi keskmise. - Selgita oma sõnadega, mis vahe on
console.log()jareturnkasutamisel.