Kurzusok
/
JavaScript
JavaScript
/
Feladatok
/
Szerencseszámok
Szerencseszámok

Szerencseszámok

Tanulófeladat

Bevezetés

A JavaScriptben az értékek különböző típusúak lehetnek. Egy változó típusát explicit típuskonverzióval lehet megváltoztatni. Ezen kívül a JavaScript automatikus típuskonverziót (implicit típuskonverziót) is végez, amikor a kontextus megkívánja.

Típuskonverzió

A JavaScriptben, sok más nyelvvel ellentétben, nincs olyan szerkezet, amellyel egy értéket egy (másik) típusba lehetne átalakítani, helyette viszont néhány beépített segédeszköz használható. A legfontosabbak: a Boolean, a Number és a String függvényként használható ahhoz, hogy egy értéket a megfelelő típussá alakíts.

Átalakítás Boolean értékké (truthy/falsy értékek)

A Boolean(value) segítségével bármilyen értéket logikai értékké alakíthatsz. Van egy rögzített értékhalmaz, az úgynevezett falsy értékek, amelyek false-ra konvertálódnak. A legfontosabbak: a false, a 0, az üres string, a null, az undefined és a NaN falsy.

Minden más értékre a Boolean true-t ad vissza. Ezeket az értékeket truthy-nak nevezzük.

Boolean(-1);
// => true

Boolean(0);
// => false

Boolean(' ');
// => true

Boolean('');
// => false

Figyeld meg, hogy a leírt szabályok miatt a '0', a 'false', a [] és a {} truthy érték a JavaScriptben.

Átalakítás számmá

A Number(value) segítségével egy értéket számmá alakíthatsz. A string elején és végén álló szóközök figyelmen kívül maradnak, az üres string pedig 0-vá konvertálódik. Ha nem primitív értéket vagy olyan stringet próbálsz átalakítani, amely nem számot reprezentál, az eredmény NaN (Not-A-Number).

Number('  -12.34  ');
// => -12.34

Number('1,2');
// => NaN

Number('');
// => 0

Number({ num: 123 });
// => NaN

Átalakítás stringgé

A String(value) segítségével egy értéket stringgé alakíthatsz. Primitív értékek esetén pont azt kapod, amire számítasz.

String(12.34);
// => '12.34'

String(false);
// => 'false'

String(null);
// => 'null'

String(undefined);
// => 'undefined'

Tömbök esetén a String függvény minden elemre alkalmazza a stringkonverziót, majd az eredményeket vesszővel fűzi össze. A join metódust magad is alkalmazhatod, például hogy testre szabd az elválasztót. Figyeld meg, hogy ezekben az esetekben a null és az undefined üres stringgé konvertálódik.

String([42, null, true, 'abc']);
// => '42,,true,abc'

Objektumok esetén a String alapértelmezés szerint egy semmitmondó szöveget ad vissza.

String({ key: 'value' });
// => '[object Object]'

Automatikus típuskonverzió

Bizonyos kontextusokban a JavaScript automatikusan átalakít egy értéket egy másik adattípusra, mielőtt kiértékelne egy utasítást. Ezt az implicit átalakítást automatikus típuskonverziónak nevezzük.

Boolean-kontextus

Amikor egy nem logikai értéket logikai kontextusban használunk, a JavaScript ugyanazokat a szabályokat alkalmazza, mint a Boolean függvény, hogy implicit módon átalakítsa az értéket.

Logikai értékké alakítás gyakran történik a következő esetekben:

  • egy elágazás feltétele
  • a ternáris operátor ? első operandusa
  • a logikai NOT operátor ! operandusa
  • a logikai AND && és OR || operátorok operandusai (a kifejezés eredménye az egyik operandus, nem feltétlenül logikai érték)
const num = 0;
if (num) {
  // this block is NOT executed because 0 is falsy
}

String-kontextus

Ha az összeadás + operátort primitív értékekre használjuk, és az egyik operandus string, akkor a másik is stringgé konvertálódik. A konverzió logikája ugyanaz, mint a String függvény használatakor. Ezután a két string összefűződik.

let name;
'hello ' + name;
// => 'hello undefined'

Numerikus kontextus

Sok operátor a fentebb bemutatott Number függvény logikája szerint számmá konvertálja az operandusokat (ha szükséges).

  • Aritmetikai operátorok: + (ha nincs benne string), -, *, /, %, **
  • Az egyoperandusú plusz és negáció operátorok: +, -
  • Relációs operátorok (nem string operandusok esetén): >, >=, <, <=
  • Bitenkénti operátorok: |, &, ^, ~

Ha bármelyik operátorról többet szeretnél megtudni, nézd meg az MDN operátorlistáját.

A hibák elkerülése érdekében jó gyakorlat, ha ezen operátorok alkalmazása előtt mindig explicit módon meghívod a Number függvényt.

Utasítások

A barátod, Kojo nagy számrajongó. Van egy kis weboldala, a „fun-with-numbers”. Kojo nem túl jó programozásban, ezért segítséget kért tőled.

Két segédfüggvényt fogsz építeni Kojo weboldalának új számjátékaihoz, és egy harmadikat, amely ellenőrzi a felhasználó által megadható bemenetet.

1. Számítsd ki a nyerőgépen lévő számok összegét

Kojo weboldalának egyik játéka úgy néz ki, mint egy nyerőgép, amely két számkerekes csoportot mutat. Minden számjegycsoport egy-egy számot jelöl. A játék mechanikájához Kojónak tudnia kell ennek a két számnak az összegét.

Írj egy twoSum függvényt, amely két tömböt fogad paraméterként. Mindegyik tömb egy vagy több 0 és 9 közötti számból áll. A függvény mindegyik tömböt számként értelmezze, és adja vissza a két szám összegét.

twoSum([1, 2, 3], [0, 7]);
//=> 130

// [1, 2, 3] represents 123 and [0, 7] represents 7.
// 123 + 7 = 130

2. Állapítsd meg, hogy egy szám palindrom-e

A weboldal egy másik játéka egy kis kvíz, amelynek a neve „Lucky Numbers”. A felhasználó beírhat egy számot, és utána meglátja, hogy a szám egy titkos sorozathoz vagy mintázathoz tartozik-e. A „szerencseszámok” sorozata vagy mintázata minden hónapban változik, és minden felhasználónak csak korlátozott számú próbálkozása van, hogy kitalálja.

Az e havi szerencseszámok palindrom számok legyenek. A palindrom számok értéke nem változik, ha a számjegyeiket megfordítjuk.

Valósítsd meg az új luckyNumber függvényt, amely paraméterként egy számot fogad. A függvény true értéket adjon vissza, ha a szám palindrom, egyébként pedig false értéket. A bemeneti szám mindig pozitív egész szám lesz.

luckyNumber(1441);
//=>  true

luckyNumber(123);
//=> false

3. Készíts hibaüzenetet érvénytelen felhasználói bemenethez

A weboldal különböző pontjain vannak beviteli mezők, ahová a felhasználók számokat írhatnak be, majd egy gombra kattintva elindíthatnak valamilyen műveletet. Kojo szeretné javítani az oldala felhasználói élményét. Hibaüzenetet szeretne megjeleníteni arra az esetre, ha a felhasználó rákattint a gombra, de a mező érvénytelen bemeneti értéket tartalmaz.

Íme néhány további információ arról, hogyan adódik egy beviteli mező értéke.

  • Ha a felhasználó beír valamit egy mezőbe, a hozzá tartozó érték mindig string, még akkor is, ha csak számokat gépelt be.
  • Ha a felhasználó beír valamit, de aztán újra törli, a változó egy üres string lesz.
  • Mielőtt a felhasználó egyáltalán elkezdett volna gépelni, a változó lehet undefined vagy null.

Írj egy errorMessage függvényt, amely paraméterként fogadja a felhasználói bemenetet. Ha a felhasználó nem adott meg semmilyen bemenetet, az errorMessage a 'Required field' értéket adja vissza. Ha a bemenet nem reprezentál egy nem nulla számot (a JavaScript konverziós szabályai szerint), a 'Must be a number besides 0' értéket kell visszaadnia. Minden más esetben feltételezheted, hogy a bemenet érvényes, a visszatérési érték egy üres string legyen.

errorMessage('123');
// => ''

errorMessage('');
// => 'Required field'

errorMessage('abc');
// => 'Must be a number besides 0'
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
JavaScript Exercism

Készen állsz elkezdeni a(z) Szerencseszámok 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.