Kurzusok
/
JavaScript
JavaScript
/
Feladatok
/
Lasagne-mester
Lasagne-mester

Lasagne-mester

Tanulófeladat

Bevezetés

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.

Függvénydeklaráció

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);

Paraméterek

Amikor a függvénytörzsön belül paraméterekkel dolgozol, figyelj a lehetséges mellékhatásokra.

  • A primitív adattípusok értékei megváltoztathatatlanok. Az eredeti értéket soha nem befolyásolja, hogy mi történik az argumentummal a függvénytörzsben.
  • Minden más érték (objektumok, tömbök, függvények) esetében az újraértékadás nem érinti az eredeti értéket. Ha azonban módosítasz egy ilyen argumentumot (például hozzáadsz egy kulcsot egy objektumhoz), az az átadott eredeti értéket is módosítja.

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) {
  // ...
}

A return utasítás

A 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,
  };
}

Függvénykifejezés

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) {
    // ...
  },
};

Utasítások

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.

1. Állapítsd meg, hogy elkészült-e a lasagne

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.

  • Ha az időzítő 0-t mutat, az eredmény a 'Lasagna is done.' legyen.
  • Ha az időzítő bármilyen más számot mutat, az eredmény a 'Not done, please wait.' legyen.
  • Ha a függvényt időzítőérték nélkül hívod meg, az eredmény a '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.'

2. Becsüld meg az előkészítési időt

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

3. Számítsd ki a szükséges tészta és szósz mennyiségét

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 }

4. Add hozzá a titkos összetevőt

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']

5. Méretezd át a receptet

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.

  • Egy receptobjektum, amely a 2 adaghoz szükséges mennyiségeket tartalmazza. Az objektum formátumát az alábbi példában láthatod.
  • Az elkészíteni kívánt adagok száma.

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,
// };
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
JavaScript Exercism

Készen állsz elkezdeni a(z) Lasagne-mester feladatot?

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.