Sfaturi pentru depanarea codului folosind exemple cu bucle în JavaScript
Acum vă voi învăța o metodă de a găsi erori în cod. Să presupunem că, din cine știe ce motiv, nu ați urmat sfaturile din lecția anterioară și ați obținut un cod care nu funcționează. Să vedem cum să găsiți erorile și să-l faceți să funcționeze.
Mulți începători folosesc o metodă incorectă de căutare. Ei iau și se uită la cod, în speranța că vor observa eroarea. Și așa câteva ore. Așa nu funcționează.
Metoda corectă este afișarea variabilelor în consolă și verificarea dacă conțin ce trebuie sau nu. În acest caz, trebuie să începeți de la locul presupus al problemei și să vă deplasați în sus în cod. Să vedem în practică.
Să presupunem, de exemplu, că aveați sarcina de a parcurge un array cu numere din două cifre și de a găsi numerele la care prima cifră este cu unu mai mare decât a doua. Să presupunem, pentru simplitate, că în array sunt stocate numere sub formă de șiruri de caractere.
Să presupunem că ați rezolvat problema și ați obținut următorul cod:
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); // afișează 0
Codul, totuși, afișează 0. În acest
caz, primul lucru de făcut este să verificați
dacă execuția codului intră în if.
Să afișăm ceva în consolă acolo:
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('!'); // nu afișează nimic
sum += elem;
}
}
console.log(sum);
Deoarece în consolă nu apare nimic, asta înseamnă că execuția codului pur și simplu nu intră în condiție. Să vedem cu proprii noștri ochi, ce anume comparăm:
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' și '11', '3' și '21' ...
if (elem[0] === elem[1] + 1) {
sum += elem;
}
}
console.log(sum);
În rezultat, devine imediat vizibil că al doilea termen are două cifre. Este ușor de înțeles că asta se întâmplă pentru că unitatea se adună ca șir de caractere. Să corectăm problema:
let arr = ['21', '32', '34', '43', '45', '54', '55'];
let sum = 0;
for (let elem of arr) {
if (+elem[0] === +elem[1] + 1) { // corectăm
sum += elem;
}
}
console.log(sum); // '021324354'
După corectare, vedem deja că
în variabila sum a apărut ceva,
deși incorect. Se vede, totuși,
că acolo se află ceea ce ne trebuie,
dar s-a adunat sub formă de șiruri,
nu de numere. Să corectăm problema:
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; // corectăm
}
}
console.log(sum); // totul funcționează
Corectați erorile făcute în următorul cod:
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);