Råd til fejlfinding af kode med eksempler på loops i JavaScript
Nu vil jeg lære dig metoden til at finde fejl i kode. Lad os forestille os, at du af en eller anden misforståelse ikke fulgte rådene fra den forrige lektion og endte med kode, der ikke virker. Lad os se på, hvordan man finder fejlene og får den til at fungere.
Mange begyndere bruger en forkert metode til at finde fejl. De tager og kigger på koden, i håb om at de vil opdage fejlen. Og det gør de i et par timer. Det virker ikke på den måde.
Den korrekte metode er at udskrive variable i konsollen og afgøre, om det der står, er det, der skal være der, eller ej. I dette tilfælde skal man starte fra det antagede sted for problemet og bevæge sig opad i koden. Lad os se på det i praksis.
Lad os som eksempel antage, at du stod over for opgaven med at gennemgå et array med tocifrede tal og finde de tal, hvor det første ciffer er én større end det andet. Lad os for enkelheds skyld antage, at arrayet indeholder tal i form af strenge.
Lad os antage, at du løste opgaven og fik følgende kode:
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); // giver 0
Koden giver dog 0. I dette
tilfælde er det første skridt at kontrollere,
om vi ser, at variablen
kommer ind i if-betingelsen.
Lad os udskrive noget i konsollen derinde:
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('!'); // udskriver intet
sum += elem;
}
}
console.log(sum);
Da der ikke dukkede noget op i konsollen, betyder det, at kodeudførelsen simpelthen ikke kommer ind i betingelsen. Lad os se med vores egne øjne, hvad det er, vi sammenligner:
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' og '11', '3' og '21' ...
if (elem[0] === elem[1] + 1) {
sum += elem;
}
}
console.log(sum);
Som et resultat bliver det straks synligt, at det andet led er tocifret. Det er let at forstå, at det skyldes, at tallet én bliver tilføjet som en streng. Lad os rette problemet:
let arr = ['21', '32', '34', '43', '45', '54', '55'];
let sum = 0;
for (let elem of arr) {
if (+elem[0] === +elem[1] + 1) { // retter
sum += elem;
}
}
console.log(sum); // '021324354'
Efter retningen kan vi allerede se, at
der er dukket noget op i variablen sum,
selvom det er ukorrekt. Det kan dog ses,
at det, der ligger der, er det, vi har brug for,
men det er blevet lagt sammen som strenge,
i stedet for tal. Lad os rette problemet:
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; // retter
}
}
console.log(sum); // alt virker
Ret fejlene, der er begået i følgende kode:
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);