Савети за отклањање грешака у коду на примеру петљи у 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. У овом
случају прво треба проверити,
гледамо ли шта у променљивој
улази ли извршење кода у иф.
Испишимо у њему нешто у конзолу:
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);