JavaScript-те циклдар мысалында кодты жөндеу бойынша кеңестер
Қазір мен сізге кодтағы қателерді іздеу әдістемесін үйретемін. Сіз бір түсінбеушіліктен алдыңғы сабақтағы кеңестерге бағынбаған және жұмыс істемейтін код алдыңыз деп елестетіп көріңіз. Оның қателерін тауып, жұмыс істеуін қалай қамтамасыз етуге болатынын қарастырайық.
Көптежен жаңадан бастаушылар іздеудің дұрыс емес әдістемесін қолданады. Олар кодқа қарап, қатені байқайды деп үміттенеді. Және бірнеше сағат бойы. Бұл жұмыс істемейді.
Дұрыс әдістема - бұл айнымалыларды консольге шығару және онда қажет нәрсенің бар-жоғын анықтау. Сонымен бірге мәселенің болжамды орнынан бастап, код бойымен жоғары қарай жүру керек. Тәжірибеде қарастырайық.
Мысал ретінде сізге екі таңбалы сандар массивін қайталап, бірінші цифры екіншісінен бірге үлкен сандарды табу тапсырмасы берілген делік. Қарапайымдылық үшін массивте сандар жол түрінде сақталады деп алайық.
Сіз мәселені шешіп, келесі кодты алдыңыз делік:
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 шығарады
Алайда, код 0 шығарады. Бұл
жағдайда алдымен тексеру керек,
айнымалыда не бар екенін қарап,
код орындалуы if-ке түсе ме.
Онда бірнәрсені консольге шығарайық:
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('!'); // ештеңе шығармайды
sum += elem;
}
}
console.log(sum);
Консольде ештеңе пайда болмағандықтан, бұл код орындалуы шартқа жетпейтінін білдіреді. Өз көзімізбен салыстыратын нәрсемізге қарайық:
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' және '11', '3' және '21' ...
if (elem[0] === elem[1] + 1) {
sum += elem;
}
}
console.log(sum);
Нәтижесінде бірден екінші қосылғыштың екі таңбалы екені көрінеді. Бұл бірліктің жол ретінде қосылуынан болғанын түсіну оңай. Мәселені түзейік:
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); // '021324354'
Түзетуден кейін біз sum айнымалысында
бірнәрсе пайда болғанын көреміз,
дегенмен дұрыс емес. Алайда, онда бізге қажет нәрсе бар,
бірақ ол сандар түрінде емес,
жолдар түрінде қосылғаны байқалады. Мәселені түзейік:
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); // бәрі жұмыс істейді
Келесі кодта жіберілген қателерді түзеңіз:
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);