Kód hibakeresési tippek JavaScript ciklusok példáján
Most megtanítom Önnek a hibák keresésének módszerét a kódban. Képzeljük el, hogy valamilyen félreértés miatt nem követte az előző lecke tanácsait, és nem működő kódot kapott. Nézzük meg, hogyan találhatunk hibákat és tehetjük működővé.
Sok kezdő helytelen keresési módszert alkalmaz. Fogják és nézik a kódot, abban a reményben, hogy észreveszik a hibát. És így pár órát. Így nem működik.
A helyes módszer a változók kiírása a konzolra, és annak meghatározása, hogy azokban az van-e, aminek lennie kell, vagy sem. Ebben az esetben a feltételezett probléma helyéről kell indulni, és felfelé kell haladni a kódban. Nézzük meg a gyakorlatban.
Legyen például az Ön feladata egy kétjegyű számokat tartalmazó tömb bejárása és azon számok megtalálása, ahol az első számjegy eggyel nagyobb, mint a második. Legyen az egyszerűség kedvéért a tömb elemei számok string formátumban.
Tegyük fel, hogy megoldotta a feladatot, és a következő kódot kapta:
let arr = ['21', '32', '34', '43', '45', '54', '55'];
let sum = 0;
for (let elem of arr) {
if (elem[0] === elem[1] + 1) {
sum += elem;
}
}
console.log(sum); // 0-t ad ki
A kód azonban 0-t ad ki. Ebben
az esetben először azt kell ellenőrizni,
hogy a kód végrehajtása belép-e az if-be.
Írjunk ki benne valamit a konzolra:
let arr = ['21', '32', '34', '43', '45', '54', '55'];
let sum = 0;
for (let elem of arr) {
if (elem[0] === elem[1] + 1) {
console.log('!'); // nem ír ki semmit
sum += elem;
}
}
console.log(sum);
Mivel a konzolban nem jelenik meg semmi, ez azt jelenti, hogy a kód végrehajtása egyszerűen nem lép be a feltételbe. Nézzük meg saját szemünkkel, mit is hasonlítunk össze:
let arr = ['21', '32', '34', '43', '45', '54', '55'];
let sum = 0;
for (let elem of arr) {
console.log(elem[0], elem[1] + 1); // '2' és '11', '3' és '21' ...
if (elem[0] === elem[1] + 1) {
sum += elem;
}
}
console.log(sum);
Ennek eredményeként azonnal láthatóvá válik, hogy a második tag kétjegyű. Könnyen megérthető, hogy ez azért van, mert az egyes stringként adódik hozzá. Javítsuk a problémát:
let arr = ['21', '32', '34', '43', '45', '54', '55'];
let sum = 0;
for (let elem of arr) {
if (+elem[0] === +elem[1] + 1) { // kijavítjuk
sum += elem;
}
}
console.log(sum); // '021324354'
A javítás után már látjuk, hogy
a sum változóban megjelent valami,
bár helytelen. Látható azonban,
hogy az benne van, amire szükségünk van,
de az stringként adódott össze,
nem számként. Javítsuk a problémát:
let arr = ['21', '32', '34', '43', '45', '54', '55'];
let sum = 0;
for (let elem of arr) {
if (+elem[0] === +elem[1] + 1) {
sum += +elem; // kijavítjuk
}
}
console.log(sum); // minden működik
Javítsa ki a következő kódban elkövetett hibákat:
let obj = {a: 10, b: 20, c: 30, d: 40, e: 50};
let sum = 0;
for (let elem in obj) {
if (elem[0] === '1' && elem[0] === '2') {
sum += +elem;
}
}
console.log(sum);