⊗jsPmLpDbg 167 of 505 menu

Saveti za debagovanje koda na primeru petlji u JavaScript-u

Sada ću vas naučiti metodologiji pronalaženja grešaka u kodu. Zamislimo da iz nekog nesporazuma niste pratili savete iz prethodne lekcije i dobili ste kod koji ne radi. Hajde da pogledamo kako da pronađemo greške i nateramo ga da radi.

Mnogi početnici koriste pogrešnu metodologiju pretraživanja. Uzmu i gledaju u kod, u nadi da će primetiti grešku. I tako par sati. Tako to ne funkcioniše.

Ispravna metodologija je ispisivanje promenljivih u konzolu i određivanje da li se tamo nalazi ono što treba, ili ne. Pritom treba početi od pretpostavljenog mesta problema i kretati se nagore po kodu. Hajde da pogledamo u praksi.

Neka za primer pred vama stoji zadatak da se pređe kroz niz dvocifrenih brojeva i nađu brojevi kod kojih je prva cifra za jedan veća od druge. Neka zbog jednostavnosti u nizu budu sačuvani brojevi u obliku stringova.

Neka ste rešili zadatak i dobili sledeći kod:

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); // daje 0

Kod, međutim, daje 0. U ovom slučaju, prvo što treba uraditi je proveriti, da li izvršenje koda ulazi u if. Ispisaćemo nešto u konzoli unutar njega:

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('!'); // ne ispisuje ništa sum += elem; } } console.log(sum);

Pošto se ništa nije pojavilo u konzoli, to znači da se izvršenje koda jednostavno ne uvlači u uslov. Pogledaćemo svojim očima šta to upoređujemo:

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

Kao rezultat, odmah postaje vidljivo da je drugi sabirak dvocifren. Lako je shvatiti da je to zbog toga što se jedinica dodaje kao string. Ispravićemo problem:

let arr = ['21', '32', '34', '43', '45', '54', '55']; let sum = 0; for (let elem of arr) { if (+elem[0] === +elem[1] + 1) { // ispravljamo sum += elem; } } console.log(sum); // '021324354'

Nakon ispravke već vidimo da se u promenljivoj sum nešto pojavilo, mada nekorektno. Vidi se, međutim, da se tamo nalazi ono što nam treba, ali je sabrano u obliku stringova, a ne brojeva. Ispravićemo problem:

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; // ispravljamo } } console.log(sum); // sve radi

Ispravite greške učinjene u sledećem kodu:

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);
Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij