პირობითი ოპერატორები
პირობითი ჩანაწერებს ნებისმიერ პროგრამირების ენაში წავაწყდებით. JavaScript-შიც სხვა ენების მსგავსად გვაქვს if/else ლოგიკური ბმა, ამავდროულად ტერნარული ოპერაციაც და სხვა პირობითი ჩანაწერებიც. პირობითი ჩანაწერები საჭიროა გამოვიყენოთ, მაშინ როცა გვსურს კოდის კონკრეტული ფრაგმენტი გავუშვათ, მაშინ როცა რაიმე პირობა სრულდება.
if..else
ჩვენი კოდი შეგვიძლია მოვაქციოთ if...else
ბმა-ში, სადაც განვსაზღვრავთ თუ რომელი კოდის ბლოკი უნდა გაეშვას კონკრეტული პირობიდან გამომდინარე.
მაგალითად, გვინდა სიტყვიერად გამოვიტანოთ თუ ა მეტია ბ-ზე ან პირიქით ბ მეტია ა-ზე:
let a = 2;
let b = 22;
if (a > b) {
console.log('ა მეტია ბ-ზე');
} else {
console.log('ბ მეტია ა-ზე');
}
მსგავს ტიპად მივიღებთ, რომ ბ მეტია ა-ზე, რადგან პირველი პირობა არ შესრულდა else
ავტომატურად განსაზღვრა დანარჩენი ნაწილი, თუ ა მნიშვნელობას, გავზრდით ბ-ზე მეტჯერ, მაშინ მივიღებთ, რომ ა მეტია ბ-ზე. რეალურად კოდში იმდენი if/else
შეგვიძლია ჩავწეროთ, რამდენიც გვსურს თუმცა ერთ ლოგიკურ ბმა-ს შესაძლებელია ჰქონდეს, მხოლოდ 1 if
და else
. თუმცა რა ხდება მაშინ როცა გვჭირდება დამატებითი პირობა მანამ სანამ else
(დარჩენილი ვარიანტი) გაეშვება ? ამ დროს შეგვიძლია გამოვიყენოთ else if
. else if
გაეშვება მაშინ, როცა მისი ზემდგომი პირობა არ არის ჭეშმარიტი. ლოგიკურ ბმა-ში, იმდენი else if
შეგვიძლია გავწეროთ, რამდენიც გვსურს (თუმცა შეეცადეთ მაქსიმალურად ნაკლები პირობა წეროთ, გართულება არ არის კარგი კოდის pattern-ი).
განვიხილოთ განსხვავებული მაგალითი:
let age = 21;
if (age > 18) {
console.log('თქვენ ხართ სრულწლოვანი');
} else if (age === 18) {
console.log('გილოცავთ სრულწლოვნობას');
} else {
console.log('თქვენ არ ხართ სრულწლოვანი');
}
ამ შემთხვევაში ჩვენი else if
არ გაეშვება, რადგან არასწორ ადგილას არის მოთავსებული, როგორც ზემოთ ვახსენეთ, else if
ეშვება მხოლოდ იმ შემთხვევაში, თუ მისი ზემდგომი პირობა არ შესრულდა. ამ კონკრეტულ შემთხვევაში შესრულდა ზემოთ მდგომი პირობა, ამიტომაც else if
და else
კოდმა საერთოდ აღარ განიხილა. გვჭირდება ჩვენი ლოგიკური ბმის სწორად დალაგება, კონკრეტულ შემთხვევაში უმჯობესი იქნება შევამოწმოთ, ჯერ არის თუ არა 18 წლის და შემდგომ განვიხილოთ მეტი ან ნაკლები ვარიანტი.
მაგალითი:
let age = 21;
if (age === 18) {
console.log('გილოცავთ სრულწლოვნობას');
} else if (age > 18) {
console.log('თქვენ ხართ სრულწლოვანი');
} else {
console.log('თქვენ არ ხართ სრულწლოვანი');
}
ტერნარული ოპერატორი
პირობითი ოპერაციები არამხოლოდ if...else
-ს სახით გხვდება, არამედ შესაძლებელია ჩაიწეროს ტერნარული (ternary) ოპერაციის სახითაც. ტერნარულ ოპერაციაში მონაწილეობს 3 ოპერანდი. ტერნარული ოპერატორი გამოიყენება იმისათვის, რომ ცვლადს მნიშვნელობა პირობიდან გამომდინარე მივანიჭოთ, მეორე ნაირად მას inline if უძახიან.
მისი ფორმულა არის შემდგომ ნაირად: expression1 ? expression2(true) : expression3(false) ფორმულის განმარტება: თუ expression1 არის ჭეშმარიტი მაშინ ცვლადს მივანიჭოთ expression2, წინააღმდეგ შემთხვევაში expression3.
მაგალითი:
let x = 22;
let y = x > 10 ? x + 1 : x - 1;
console.log(y); // 23
მოცემულ მაგალითში, x მნიშვნელობა არის 22, ხოლო y მნიშვნელობა არის პირობაზე დამოკიდებული, თუ x მეტი არის 10-ზე მაშინ მივანიჭოთ y-ს, ერთით გაზრდილი მნიშვნელობა, წინააღმდეგ შემთხვევაში ერთით შემცირებული მნიშვნელობა, რაც გვაძლევს 23 მნიშვნელობას y-ისთვის.
Switch
switch
ოპერატორი შედგება ვარიანტების სიისაგან, სადაც კონკრეტული ვარიანტიდან გამომდინარე ეშვება მოქმედებები, ასევე გვაქვს else
მსგავსი შემთხვევა, რომელიც switch
წარმოდგენილი არის, როგორც default
.
მაგალითი:
let dayOfWeek = new Date().toLocaleString('default', { weekday: 'long' });
switch (dayOfWeek) {
case 'Monday': {
console.log('დღეს ორშაბათია');
break;
}
case 'Tuesday': {
console.log('დღეს სამშაბათია');
break;
}
case 'Wednesday': {
console.log('დღეს ოთხშაბათია');
break;
}
case 'Thursday': {
console.log('დღეს ხუთშაბათია');
break;
}
case 'Friday': {
console.log('დღეს პარასკევია');
break;
}
case 'Saturday': {
console.log('დღეს შაბათია');
break;
}
case 'Sunday': {
console.log('დღეს კვირა');
break;
}
default: {
console.log('გადმოცემული მნიშვნელობა არ არის გათვალისწინებული');
break;
}
}
ამ მაგალითში თავიდან შევქმენით ცვლადი dayOfWeek
, რომელსაც მივანიჭეთ არსებული კვირის დღე Date.toLocaleString()
მეთოდის გამოყენებით. switch
გადავეცით ცვლადის მნიშვნელობა, ამ შემთხვევაში კვირის დღე, შემდგომ ავღწერეთ სხვადსახავ case
-ები, რომლებიც გაეშვებოდა იმის მიხედვით, თუ რომელი კვირის დღეც იყო. case
სინტაქსი შემდგომია:
case EXPRESSION: {
// მოქმედებები
break;
}
break
გამოიყენება იმისათვის, რომ კონკრეტული case
დასრულდეს.