პირობითი ოპერატორები

პირობითი ჩანაწერებს ნებისმიერ პროგრამირების ენაში წავაწყდებით. JavaScript-შიც სხვა ენების მსგავსად გვაქვს if/else ლოგიკური ბმა, ამავდროულად ტერნარული ოპერაციაც და სხვა პირობითი ჩანაწერებიც. პირობითი ჩანაწერები საჭიროა გამოვიყენოთ, მაშინ როცა გვსურს კოდის კონკრეტული ფრაგმენტი გავუშვათ, მაშინ როცა რაიმე პირობა სრულდება.

if..else

ჩვენი კოდი შეგვიძლია მოვაქციოთ if...else ბმა-ში, სადაც განვსაზღვრავთ თუ რომელი კოდის ბლოკი უნდა გაეშვას კონკრეტული პირობიდან გამომდინარე.

მაგალითად, გვინდა სიტყვიერად გამოვიტანოთ თუ ა მეტია ბ-ზე ან პირიქით ბ მეტია ა-ზე:

JS
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-ი).

განვიხილოთ განსხვავებული მაგალითი:

JS
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 წლის და შემდგომ განვიხილოთ მეტი ან ნაკლები ვარიანტი.

მაგალითი:

JS
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.

მაგალითი:

JS
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.

მაგალითი:

JS
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 სინტაქსი შემდგომია:

JS
case EXPRESSION: {
  // მოქმედებები
  break;
}

break გამოიყენება იმისათვის, რომ კონკრეტული case დასრულდეს.