JavaScript Döngüleri Örneğinde Kod Hata Ayıklama İpuçları
Şimdi size kodda hata arama metodolojisini öğreteceğim. Bir yanlış anlama sonucu önceki dersteki tavsiyelere uymadığınızı ve çalışmayan bir kodla karşılaştığınızı varsayalım. Hataları nasıl bulacağımızı ve onu çalıştıracağımızı görelim.
Birçok yeni başlayan yanlış arama metodolojisi kullanır. Koda bakarlar ve hatayı fark edeceklerini umarlar. Ve bu birkaç saat böyle devam eder. Bu şekilde olmaz.
Doğru metodoloji, değişkenleri konsola yazdırmak ve orada ihtiyaç duyulan şeyin olup olmadığını belirlemektir. Bu durumda, sorunun olduğu tahmin edilen yerden başlamalı ve kodda yukarı doğru ilerlemelisiniz. Pratikte görelim.
Örnek olarak, önünüzde iki basamaklı sayılardan oluşan bir diziyi dolaşmak ve ilk rakamı ikincisinden bir fazla olan sayıları bulma görevi olduğunu varsayalım. Basitlik için, dizide sayılar string olarak saklansın.
Görevi çözdüğünüzü ve aşağıdaki kodu elde ettiğinizi varsayalım:
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 veriyor
Ancak kod 0 veriyor. Bu
durumda ilk olarak, kodun if'in içine
girip girmediğini kontrol etmek gerekir.
İçine konsola bir şeyler yazdıralım:
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('!'); // hiçbir şey yazdırmıyor
sum += elem;
}
}
console.log(sum);
Konsolda hiçbir şey görünmediğine göre, bu, kodun koşulun içine hiç girmediği anlamına gelir. Kendi gözlerimizle neyi karşılaştırdığımıza bakalı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' ve '11', '3' ve '21' ...
if (elem[0] === elem[1] + 1) {
sum += elem;
}
}
console.log(sum);
Sonuç olarak, ikinci terimin iki basamaklı olduğu hemen görünür olur. Bunun, birin bir string olarak eklendiği için olduğunu anlamak kolaydır. Sorunu düzeltelim:
let arr = ['21', '32', '34', '43', '45', '54', '55'];
let sum = 0;
for (let elem of arr) {
if (+elem[0] === +elem[1] + 1) { // düzeltiyoruz
sum += elem;
}
}
console.log(sum); // '021324354'
Düzeltmeden sonra, sum değişkeninde
artık bir şeyler olduğunu görüyoruz,
her ne kadar hatalı olsa da. Ancak,
orada ihtiyacımız olan şeyin olduğu,
ancak sayılar yerine stringler olarak
toplandığı görülüyor. Sorunu düzeltelim:
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üzeltiyoruz
}
}
console.log(sum); // her şey çalışıyor
Aşağıdaki kodda yapılan hataları düzeltin:
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);