A függvény jól szervezett, újrahasznosítható kódból álló blokk, amely valamilyen művelet végrehajtására szolgál. A JavaScriptben többféleképpen is definiálhatsz függvényeket. Most a függvénydeklarációkat és a függvénykifejezéseket nézzük meg. Az olyan további lehetőségekkel, mint a nyílfüggvények, más fogalmaknál foglalkozunk majd.
A JavaScriptben a függvények szabványos definiálási módja a függvénydeklaráció, amelyet függvénydefiníciónak vagy függvényutasításnak is neveznek.
A function kulcsszóból, a függvény nevéből, valamint a kerek zárójelben (()) szereplő, vesszővel elválasztott paraméterlistából áll.
Ezt követi a kapcsos zárójelbe ({}) foglalt függvénytörzs (az utasítások gyűjteménye, amely meghatározza, mit tesz a függvény).
function someName(param1, param2, param3) {
// ...
}
A JavaScriptben egy függvényt úgy hívunk meg, hogy leírjuk a függvény nevét, majd zárójelben megadjuk az argumentumokat.
someName(arg1, arg2, arg3);
Amikor a függvénytörzsön belül paraméterekkel dolgozol, figyelj a lehetséges mellékhatásokra.
A JavaScriptben alapértelmezés szerint a függvénydeklarációban megadott összes paraméter elhagyható.
Ha kevesebb argumentumot adsz meg, mint amennyi paraméter van, a hiányzó argumentumok értéke undefined lesz a függvényen belül; erről lásd a Null és undefined című részt.
Sok esetben érdemes a undefined helyett egy megfelelőbb alapértelmezett értéket adni.
Ezt úgy teheted meg, hogy közvetlenül a függvénydefinícióban adsz meg alapértelmezett paramétereket.
function someName(param1 = defaultValue1, param2 = defaultValue2) {
// ...
}
return utasításA return utasítás befejezi a függvény végrehajtását, és megadja a függvény hívójának visszaadandó értéket. Egy függvényben több return utasítás is lehet.
function checkNumber(num) {
if (num === 0) {
return 'You passed 0, please provide another number.';
}
return 'Thanks for passing such a nice number.';
}
A függvény visszatérési értékét eltárolhatod egy változóban.
function sum(x, y) {
return x + y;
}
const total = sum(5, 10);
// => 15
Ha egy függvény nem ad vissza értéket, vagy nincs benne return utasítás, az eredménye undefined lesz.
A JavaScriptben nincsenek implicit return utasítások.
function nakedReturn(a) {
a * 2;
return;
}
nakedReturn(1);
// => undefined
function noReturn(a) {
a * 2;
}
noReturn(1);
// => undefined
A JavaScriptben pontosan egy értéket adhatsz vissza. Ha több információt szeretnél átadni, először egyetlen egységbe kell foglalnod, általában egy objektumba vagy egy tömbbe.
function divide(a, b) {
return {
quotient: Math.floor(a / b),
remainder: a % b,
};
}
A függvénydeklaráció önálló utasítás. Néha azonban hasznos, ha egy függvényt egy másik kifejezés részeként definiálsz, például egy értékadásban, függvényparaméterként (callback) vagy egy objektum értékeként. Erre a függvénykifejezés szolgál. A szintaxisa ugyanaz, mint a függvénydeklarációé, csak a függvénynév elhagyható, így névtelen függvényt hozhatsz létre.
const someFunction = function (param) {
// ...
};
someOtherFunction(function (param) {
// ...
});
const obj = {
someFunction: function (param) {
// ...
},
};
Ebben a feladatban még egy kis kódot írunk, ami a kedvenc szakácskönyvedből származó remek lasagnéd elkészítéséhez és megsütéséhez kapcsolódik.
Öt részfeladat vár rád. Az első magával a sütéssel kapcsolatos, a másik négy a tökéletes előkészítésről szól.
Amikor lasagne van a sütőben, szeretnéd tudni, hogy kiveheted-e már vagy sem. Hogy a lasagne ne égjen meg a sütőben, általában beállítasz egy időzítőt. Néha viszont megfeledkezel róla.
Írj egy cookingStatus függvényt, amely paraméterként fogadja az időzítőn maradt időt percekben.
A függvénynek három lehetséges eredménye lehet.
0-t mutat, az eredmény a 'Lasagna is done.' legyen.'Not done, please wait.' legyen.'You forgot to set the timer.' legyen.Az időzítő soha nem mutat 0-nál kisebb értéket.
cookingStatus(12);
// => 'Not done, please wait.'
cookingStatus();
// => 'You forgot to set the timer.'
A következő lasagnéhez, amit elkészítesz, szeretnél elég időt fenntartani, hogy aztán élvezhesd a sütést. Már megtervezted, milyen rétegekből áll majd a lasagne. Most ez alapján szeretnéd megbecsülni, mennyi ideig tart az előkészítés.
Készíts egy preparationTime függvényt, amely paraméterként fogadja a rétegek tömbjét és a rétegenkénti átlagos előkészítési időt percekben.
A függvény adja vissza a teljes előkészítési idő becslését a rétegek száma alapján.
Ha a függvényt az átlagos előkészítési idő megadása nélkül hívod meg, akkor 2 percet kell feltételezni helyette.
const layers = ['sauce', 'noodles', 'sauce', 'meat', 'mozzarella', 'noodles'];
preparationTime(layers, 3);
// => 18
preparationTime(layers);
// => 12
Az idő fenntartása mellett szeretnél elegendő szószt és tésztát is biztosítani ahhoz, hogy megsüsd álmaid lasagnéjét. A lasagne minden tésztarétegéhez 50 gramm tésztára lesz szükséged. Minden szószréteghez 0,2 liter szószra lesz szükséged.
Definiáld a quantities függvényt, amely paraméterként egy rétegekből álló tömböt vesz át.
A függvény ezután meghatározza, mennyi tészta és szósz kell az étel elkészítéséhez.
Az eredményt egy objektumként kell visszaadni, amelynek kulcsai noodles és sauce.
quantities(['sauce', 'noodles', 'sauce', 'meat', 'mozzarella', 'noodles']);
// => { noodles: 100, sauce: 0.4 }
Nemrég meglátogattál egy barátodat, és lasagnét ettél nála. Fantasztikus volt, és volt benne valami különleges. A barátod elküldte az összetevők listáját, és elárulta, hogy a lista utolsó eleme az a „titkos összetevő", amitől az étel olyan különleges lett. Most te is szeretnéd hozzáadni ezt a titkos összetevőt a saját receptedhez.
Írj egy addSecretIngredient függvényt, amely paraméterként két, összetevőket tartalmazó tömböt fogad.
Az első paraméter a barátod által küldött lista, a második pedig a saját recepted összetevőlistája.
A függvény fűzze hozzá a barátod listájának utolsó elemét a te listád végéhez.
A receptedet képviselő tömböt közvetlenül kell módosítani, és a függvény ne adjon vissza semmit.
Az első argumentumot viszont nem szabad módosítani.
const friendsList = ['noodles', 'sauce', 'mozzarella', 'kampot pepper'];
const myList = ['noodles', 'meat', 'sauce', 'mozzarella'];
addSecretIngredient(friendsList, myList);
// => undefined
console.log(myList);
// => ['noodles', 'meat', 'sauce', 'mozzarella', 'kampot pepper']
A szakácskönyvedben szereplő mennyiségek csak két adag lasagnéhez elegendőek. Mivel legközelebb több emberre szeretnél főzni, szeretnéd kiszámolni a különböző adagszámokhoz szükséges mennyiségeket.
Készíts egy scaleRecipe függvényt, amely két paramétert vesz át.
A függvény adjon vissza egy receptobjektumot a kívánt adagszámhoz szükséges mennyiségekkel. Az eredeti receptet viszont meg szeretnéd őrizni. Ez azt jelenti, hogy ebben a részfeladatban a recept argumentumot nem szabad módosítani.
const recipe = {
noodles: 200,
sauce: 0.5,
mozzarella: 1,
meat: 100,
};
scaleRecipe(recipe, 4);
// =>
// {
// noodles: 400,
// sauce: 1,
// mozzarella: 2,
// meat: 200,
// };
console.log(recipe);
// =>
// {
// noodles: 200,
// sauce: 0.5,
// mozzarella: 1,
// meat: 100,
// };
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) JavaScript nyelvet 37 fogalom159 feladat segítségével, valódi emberi mentorálással, mindez ingyen.