Савети за отклањање грешака у коду на примеру петљи у JavaScript-у

Сада ћу вас научити методи тражења грешака у коду. Замислимо да сте из неког разлога нисте следили савете из претходне лекције и добили код који не ради. Хајде да погледамо како да пронађете грешке и приморате га да ради.

Многи почетници користе погрешну методу претраге. Они узму и гледају у код, у нади да ће приметити грешку. И то пар сати. То не функционише на тај начин.

Правилна метода је испис променљивих у конзолу и утврђивање, да ли се тамо налази оно што треба, или не. При томе треба почети од претпостављеног места проблема и кретати се навише по коду. Погледајмо у пракси.

Нека за пример пред вама стоји задатак да се пређе преко низа са двоцифреним бројевима и пронађу бројеви, код којих је прва цифра за један већа од друге. Нека за једноставност у низу буду сачувани бројеви у виду стрингова.

Нека сте решили задатак и добили следећи код:

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

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

Пошто се ништа није појавило у конзоли, то значи да извршење кода једноставно не улази у услов. Погледајмо својим очима, шта поредимо:

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

Као резултат одмах постаје видљиво, да је други сабирак двоцифрен. Лако се схвата да је то због тога, што се једанца додаје као стринг. Исправимо проблем:

javascriptlet 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 нешто има, иако и некорректно. Види се, међутим, да се тамо налази оно што нам треба, али се сложило у виду стрингова, а не бројева. Исправимо проблем:

javascriptlet 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); // све ради
Задание 1

Исправите грешке, учињене у следећем коду:

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