Koda atkļūdošanas padomi, izmantojot ciklu piemērus JavaScript
Tagad es iemācīšu jums kļūdu meklēšanas metodiku kodā. Iedomāsimies, ka jūs kāda pārpratuma dēļ neesat ievērojuši padomus no iepriekšējās nodarbības un esat ieguvuši nedarbu kodu. Paskatīsimies, kā atrast kļūdas un likt tam darboties.
Daudzi iesācēji izmanto nepareizu meklēšanas metodiku. Viņi paņem un skatās uz kodu, cerot, ka pamanīs kļūdu. Un tā dažas stundas. Tā tas nestrādā.
Pareizā metodika ir mainīgo izvadīšana konsolei un noteikšana, vai tajā atrodas tas, kas vajadzīgs, vai nē. Turklāt jāsāk no paredzamās problēmas vietas un jāvirzās augšup pa kodu. Paskatīsimies praktiski.
Piemēram, iedomājieties, ka jums priekšā stāvēja uzdevums izskatīt masīvu ar divciparu skaitļiem un atrast skaitļus, kuriem pirmais cipars ir par vienu lielāks par otro. Vienkāršības labad pieņemsim, ka masīvā tiek glabāti skaitļi virknes formā.
Pieņemsim, ka jūs atrisinājāt uzdevumu un ieguvāt šādu kodu:
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); // izvada 0
Tomēr kods izvada 0. Šajā
gadījumā vispirms ir jāpārbauda,
mēs redzam, ka mainīgajā
iekļūst vai koda izpilde if vidū.
Izvadīsim tajā kaut ko konsolē:
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('!'); // neko neizvada
sum += elem;
}
}
console.log(sum);
Tā kā konsolē neparādījās nekas, tas nozīmē, ka koda izpilde vienkārši neiekļūst nosacījumā. Paskatīsimies ar savām acīm, ko mēs salīdzinām:
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' un '11', '3' un '21' ...
if (elem[0] === elem[1] + 1) {
sum += elem;
}
}
console.log(sum);
Rezultātā uzreiz kļūst redzams, ka otrais saskaitāmais ir divciparu. Viegli saprast, ka tas ir tāpēc, ka vienība tiek pievienota kā virkne. Izlabosim problēmu:
let arr = ['21', '32', '34', '43', '45', '54', '55'];
let sum = 0;
for (let elem of arr) {
if (+elem[0] === +elem[1] + 1) { // labojam
sum += elem;
}
}
console.log(sum); // '021324354'
Pēc labojuma mēs jau redzam, ka
mainīgajā sum kaut kas parādījās,
lai gan nekorekti. Tomēr redzams,
ka tajā atrodas tas, kas mums vajadzīgs,
bet tas saskaitījās virkņu veidā,
nevis skaitļu. Izlabosim problēmu:
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; // labojam
}
}
console.log(sum); // viss strādā
Izlabojiet kļūdas, kas pieļautas šajā kodā:
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);