Совети за дебагирање на код со примери на циклуси во JavaScript
Сега ќе ве научам на методија за пребарување грешки во кодот. Да замислиме дека поради некоја недоразбирање не ги следевте советите од претходната лекција и добивте код што не работи. Ајде да погледнеме како да ги пронајдеме грешките и да го натераме да работи.
Многу почетници користат погрешна методија за пребарување. Тие земаат и гледаат во кодот, во надеж дека ќе забележат грешка. И тоа неколку часа. Ова не функционира така.
Правилната методија е печатење на променливите во конзолата и одредување, дали таму лежи она што е потребно, или не. При тоа, треба да се започне од претпоставеното место на проблемот и да се движи нагоре по кодот. Ајде да погледнеме во пракса.
Да речеме за пример дека пред вас стоела задача да се итерира низ низа со двоцифрени броеви и да се најдат броевите кај кои првата цифра е за еден поголема од втората. Да речеме за едноставност дека во низата се чуваат броевите во форма на стрингови.
Да речеме дека ја решивте задачата и добивте следниов код:
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
Сепак, кодот дава 0. Во овој
случај, прво треба да се провери,
гледаме што е во променливата
дали извршувањето на кодот влегува во if.
Ајде да испечатиме нешто во конзолата во него:
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('!'); // не испечатува ништо
sum += elem;
}
}
console.log(sum);
Бидејќи ништо не се појави во конзолата, тоа значи дека извршувањето на кодот едноставно не влегува во условот. Ајде да ги погледнеме со свои очи, што споредуваме:
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' и '11', '3' и '21' ...
if (elem[0] === elem[1] + 1) {
sum += elem;
}
}
console.log(sum);
Како резултат, веднаш станува видливо дека вториот член е двоцифрен. Лесно е да се сфати дека тоа е поради тоа што единицата се додава како стринг. Да ја поправиме грешката:
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); // '021324354'
По поправката веќе гледаме дека
во променливата sum нешто се појави,
иако не е коректно. Сепак, се гледа
дека таму лежи она што ни е потребно,
но се собрало во форма на стрингови,
а не броеви. Да ја поправиме грешката:
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); // сè работи
Поправете ги грешките направени во следниов код:
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);