Wenke vir die debugging van kode aan die hand van lusse in JavaScript
Nou sal ek jou leer oor die metodiek om foute in kode te soek. Stel jou voor dat jy om die een of ander misverstand nie die wenke uit die vorige les gevolg het nie en nie-werkende kode gekry het. Kom ons kyk hoe om foute te vind en dit te laat werk.
Baie beginners gebruik die verkeerde metode om te soek. Hulle neem en kyk na die kode, in die hoop dat hulle 'n fout sal raaksien. En so 'n paar uur lank. Dit werk nie so nie.
Die korrekte metodiek is om veranderlikes in die konsole uit te druk en te bepaal of dit wat daar lê, is wat nodig is, of nie. Hiermee moet jy begin van die vermeende plek van die probleem en opwaarts beweeg deur die kode. Kom ons kyk in die praktyk.
Laat ons byvoorbeeld aanneem dat jy die taak gehad het om 'n skikking met tweesyfer- getalle deur te gaan en die getalle te vind waarvan die eerste syfer een meer is as die tweede. Laat ons vir eenvoud aanneem dat die skikking getalle as strings stoor.
Laat ons aanneem jy het die probleem opgelos en die volgende kode gekry:
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); // lewer 0
Die kode lewer eger 0. In hierdie
geval moet jy eerste kyk of die uitvoering van die kode in die if-stelling
beland.
Druk iets in die konsole daarin uit:
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('!'); // druk niks uit nie
sum += elem;
}
}
console.log(sum);
Aangesien niks in die konsole verskyn het nie, beteken dit dat die uitvoering van die kode eenvoudig nie die voorwaarde binnegaan nie. Kom ons kyk met ons eie oë wat ons vergelyk:
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' en '11', '3' en '21' ...
if (elem[0] === elem[1] + 1) {
sum += elem;
}
}
console.log(sum);
As gevolg daarvan word dit dadelik sigbaar dat die tweede term 'n tweesyfergetal is. Dit is maklik om te verstaan dat dit is omdat die een as 'n string bygevoeg word. Kom ons los die probleem op:
let arr = ['21', '32', '34', '43', '45', '54', '55'];
let sum = 0;
for (let elem of arr) {
if (+elem[0] === +elem[1] + 1) { // reggestel
sum += elem;
}
}
console.log(sum); // '021324354'
Na regstelling sien ons reeds dat
daar iets in die veranderlike sum verskyn het,
alhoewel dit onkorrek is. Dit is eger duidelijk
dat dit wat ons nodig het daar lê,
maar dit het saamgevoeg as strings,
en nie as getalle nie. Kom ons los die probleem op:
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; // reggestel
}
}
console.log(sum); // alles werk
Regstel die foute wat in die volgende kode gemaak is:
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);