JavaScript-də kod dövrlərinin debug edilmesi üsulları
İndi sizə kodda səhvlərin axtarılması metodikasını öyrədəcəm. Təsəvvür edin ki, siz nədənsə əvvəlki dərsdəki məsləhətlərə əməl etməmisiniz və işləməyən kod almısınız. Gəlin səhvləri necə tapmağı və onu işlək vəziyyətə gətirməyi görək.
Bir çox yeni başlayanlar səhv axtarış metodikasından istifadə edir. Onlar götürüb koda baxırlar, səhvi görəcəkləri ümidi ilə. Və beləcə bir neçə saat. Bu, işləmir.
Düzgün metodika dəyişənləri konsola çıxarmaq və orada lazımi olanın olub-olmadığını müəyyən etməkdir. Bu zaman problemin təxmini yerindən başlamaq və koda yuxarıya doğru hərəkət etmək lazımdır. Gəlin praktikada baxaq.
Nümunə üçün fərz edək ki, qarşınızda iki rəqəmli ədədlərdən ibarət massivi gəzmək və birinci rəqəmi ikincidən bir vahid böyük olan ədədləri tapmaq vəzifəsi dururdu. Sadəlik üçün fərz edək ki, massivdə ədədlər sətir şəklində saxlanılır.
Tutaq ki, siz problemi həll etmisiniz və aşağıdakı kodu almısınız:
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 verir
Lakin kod 0 verir. Bu halda ilk növbədə yoxlamaq lazımdır ki,
kodun icrası if şərtinə daxil olurmu? Gəlin onun içinə konsola nəsə çap edək:
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('!'); // heç nə çap etmir
sum += elem;
}
}
console.log(sum);
Konsolda heç nə peyda olmadığı üçün bu o deməkdir ki, kodun icrası şərtə sadəcə daxil olmur. Gəlin öz gözlərimizlə nəyi müqayisə etdiyimizə baxaq:
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' və '11', '3' və '21' ...
if (elem[0] === elem[1] + 1) {
sum += elem;
}
}
console.log(sum);
Nəticədə dərhal görünür ki, ikinci toplanan iki rəqəmlidir. Asanlıqla başa düşmək olar ki, bu, vahidin sətir kimi əlavə olunması səbəbindəndir. Problemi düzəldək:
let arr = ['21', '32', '34', '43', '45', '54', '55'];
let sum = 0;
for (let elem of arr) {
if (+elem[0] === +elem[1] + 1) { // düzəldirik
sum += elem;
}
}
console.log(sum); // '021324354'
Düzəlişdən sonra artıq görürük ki, sum dəyişənində nəsə peyda olub,
baxmayaraq ki, düzgün deyil. Lakin görünür ki, orada bizə lazım olan var,
amma o ədəd kimi deyil, sətir kimi toplanıb. Problemi düzəldək:
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; // düzəldirik
}
}
console.log(sum); // hər şey işləyir
Aşağıdakı kodda edilmiş səhvləri düzəldin:
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);