Ծածկագրի վրիպազերծման խորհուրդներ՝ օգտագործելով 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: Այս
դեպքում առաջին հերթին պետք է ստուգել,
արդյոք կատարման հոսքը մտնում է պայմանի
մարմին: Արտածենք դրանում ինչ-որ բան կոնսոլում.
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);