JavaScriptда флаглар билан ишлаш
Ҳозир биз флаглар билан ишлашни ўрганамиз.
Флаг - бу фақат икки қийматни қабул қиладиган
махсус ўзгарувчи: true
ва false. Флаглар ёрдамида бирор нарсанинг
йўқлигини текширадиган масалаларни ечиш мумкин:
масалан, массивда аник қийматли элемент
йўқлигини текшириш мумкин. Келгила, бошлаймиз.
Келгила, куйидаги масалани ечайлик: сонлар массиви
берилган, унинг ичида 3 қийматили элемент
бор-йўқлигини текшириш керак. Агар бор бўлса -
'+++' чиқаринг, агар йўқ бўлса -
'---' чиқаринг.
Бошлаш учун келгила, '+++' чиқариб кўрайлик.
Бунинг учун биз массивимизнинг барча элементларини
айланиб чиқамиз ва иф билан сўраймиз - айнан
элемент 3 қийматига тенгми? Агар тенг бўлса - '+++'
чиқарамиз:
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
}
}
Лекин бизнинг ечимимиз жуда яхши эмас: чунки агар
массивда битта 3 қиймати эмас,
бир нечта бўлса, '+++' бир нечта марта
чиқади. Келгила, массивимизни ўзгартирамиз (иккита
3 қийматили элемент қиламиз) ва буни ишонч билан кўрамиз:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // бир нечта марта чиқади
}
}
Муаммони тузатамиз: агар элемент топилган бўлса,
break ёрдамида циклни тугатамиз:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
break; // циклни тугатамиз
}
}
Келгила, энди шуни қилайликки, агар массивда умуман 3 қийматили элемент
бўлмаса, '---' чиқарилсин. Тарқалган нотўғри
фикр - бизнинг ифимизга else қўшиш -
бу ҳолда '---'
3 бўлмаган барча элементларга чиқади:
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // 3 элементида чиқади
} else {
console.log('---'); // 1, 2, 4, 5 элементларида чиқади
}
}
Демак, else қўшиш идеяси - ёмон
идея, ишламайди. Шундай типдаги масалаларни ечиш учун
(бундай масалалар жуда тез-тез учрайди) флаглар деб аталувчилардан фойдаланилади.
Юқорида айтиб ўтилганидек, флаг - бу шундай
ўзгарувчики, икки қийматни қабул қилади:
true ёки false.
Демак, келгила flag ўзгарувчисини
қилайлик: агар у true га тенг бўлса,
массивда 3 элементи бор, агар
false бўлса, бундай элемент йўқ.
Дastлаб flag ўзгарувчисини
false қийматига қўямиз - яъни 3 элементи массивда йўқ деб ҳисоблаймиз:
let arr = [1, 2, 3, 4, 5];
let flag = false; // массивада 3 элемenti йўқ деб ҳисоблаймиз
Сўнгра биз аввал қилганимиз каби иф билан циклни ишга тушамиз. Агар цикл массивда
3 элементи борлигини аникласа - flag ўзгарувчисини
true қийматига қўямиз ва циклдан
break ёрдамида чиқамиз:
let arr = [1, 2, 3, 4, 5];
let flag = false; // массивада 3 элементи йўқ деб ҳисоблаймиз
for (let elem of arr) {
if (elem == 3) {
flag = true; // элемент бор - flag ўзгарувчисини қайта таниклаймиз
break; // циклдан чиқамиз
}
}
Массивда 3 борми
йўқми деган саволга жавоб биз фақат циклдан кейин бера оламиз.
Ва бу жавоб бизда аллақачон бор: циклдан кейин
flag ўзгарувчиси false да қолиши мумкин
ёки true қийматига ўзгариши мумкин,
агар цикл массивда 3 ни аниклаган бўлса:
let arr = [1, 2, 3, 4, 5];
let flag = false;
for (let elem of arr) {
if (elem == 3) {
flag = true;
break;
}
}
// бу ерда flag ўзгарувчиси true ёки false га тенг
Энди циклдан кейин биз ифни қила оламиз, у
flag ўзгарувчисига қарайди ва
экранга '+++' ёки '---' ни чиқаради:
let arr = [1, 2, 3, 4, 5];
let flag = false;
for (let elem of arr) {
if (elem == 3) {
flag = true;
break;
}
}
if (flag === true) {
console.log('+++');
} else {
console.log('---');
}
Массив берилган:
let arr = ['a', 'b', 'c', 'd', 'e'];
Ушбу массивда 'c' элементи
борлигини текширинг. Агар бор бўлса - '+++' ни чиқаринг,
агар йўқ бўлса - '---' ни чиқаринг.
Соннинг содда ёки содда эмаслигини текширадиган код ёзинг. Содда сон фақат бирга ва ўзига бўлинади, ва бошқа сонларга бўлинмайди.