Skip to content

Latest commit

 

History

History
70 lines (59 loc) · 5.73 KB

Understanding Conditional Branching in JavaScript.hy.md

File metadata and controls

70 lines (59 loc) · 5.73 KB

if else կոնստրուկցիան (շատ հաճախ անվանում են նաև ճյուղավորման կամ պայմանի օպերատոր) գործնականում մեծամասամբ շատ հեշտ կարելի է փոխարինել switch case կոնստրուկցիայով: Ո՞ր դեպքերում է այդ փոփոխությունն արդարացված և կա՞ արդյոք արտադրողականության տարբերություն այդ երկու հիմնական ճյուղավորման կոնստրուկցիաների միջև:

Կոդինգի ժամանակ ծրագրավորողը շատ հաճախ է կանգնում երկընտրանքի առաջ՝ պայման արտահայտող որ՞ կոնստրուկցիան օգտագործել, որպեսզի կոդը հնարավորինս ընթեռնելի լինի, իսկ հավանական սխալների ուղղումը՝ հեշտ։ Իհարկե երկընտրանք բառը կարող է տեղին չհամարվել, քանի-որ բացի if else և switch case կոնստրուկցիաներից, կան նաև այլ լուծումներ՝ լինի դա թերնարի օպերատորը, թե օրինակ օբյեկտների օգտագործումը՝ պայմանի համապատասխանությունն արագ և հեշտ ստուգելու համար (վերջին տարբերակի մասին կարդացեք Enmanuel Durán-ի հոդվածը) ։

Ընդհանրապես ընդունված է համարել, որ էստեթիկ առումով if else կոնստրուկցիան ավելի գեղեցիկ և հեշտ ընթեռնելի է, քան switch case-ը։ Սա իհարկե սուբյեկտիվ կարծիք է, և կլինեն ծրագրավորողներ, ովքեր կպնդեն հակառակը։ Սակայն անվիճելի է, որ switch case կոնստրուկցիան ավելի շատ տողեր է զբաղեցնում և նաև նրա սինթաքսն ուսանողներին համեմատաբար ավելի խճճված է թվում։

if (found) {
  // do something
} else {
  // do something else
}

switch (found) {
  case true:
    // do something
    break;
  default:
  // do something else
}

Վերևի կոդի երկու կտորներն էլ կատարում են բացարձակապես նույն բանը, սակայն if else կոնստրուկցիայի օգտագործմամբ կտորն ավելի կարճ է, հեշտ և ընթեռնելի։ Սակայն երբ ստուգման ենթակա պայմանների քանակը ավելանում է, սովորաբար ավելի նախընտրելի է դառնում switch case կոնստրուկցիայի օգտագործումը։

let seasonIndex = new Date().getMonth();
let season;

if (seasonIndex === 0 || seasonIndex === 1 || seasonIndex === 11) {
  season = "Winter";
} else if (seasonIndex === 2 || seasonIndex === 3 || seasonIndex === 4) {
  season = "Spring";
} else if (seasonIndex === 5 || seasonIndex === 6 || seasonIndex === 7) {
  season = "Summer";
} else if (seasonIndex === 8 || seasonIndex === 9 || seasonIndex === 10) {
  season = "Autumn";
}

Տարվա եղանակը գտնելու համար if-else-ի միջոցով գրված կոդում ստիպված ենք լինում բազմաթիվ անգամներ օգտագործել տրամաբանական (Բուլյան) || (OR) օպերատորը։ Կոդը հորիզոնական հարթության վրա ծավալվում է՝ դժվարացնելով ընթեռնելիությունն ու բարդացնելով հնարավոր սխալների ուղղումը։ Այժմ նույն առաջադրանքը փորձենք կատարել switch case կոնստրուկցիայի օգնությամբ։

let seasonIndex = new Date().getMonth();
let season;

switch (seasonIndex) {
  case 0:
  case 1:
  case 11:
    season = "Winter";
    break;
  case 2:
  case 3:
  case 4:
    season = "Spring";
    break;
  case 5:
  case 6:
  case 7:
    season = "Summer";
    break;
  case 8:
  case 9:
  case 10:
    season = "Autumn";
    break;
}

Տարբերությունն ակնհայտ է։ Կոդը չի ծավալվում հորիզոնական հարթության վրա՝ դժվարացնելով ընթեռնելիությունը, բաղկացած է կարճ արտահայտություններից, և անգամ թռուցիկ հայացքը բավարար է ըմբռնելու թե ինչպես է այն աշխատում։ Արտադրողականության առումով՝ դեպքերի ճնշող մեծամասնությունում switch case կոնստրուկցիան ավելի արագ է աշխատում, քան if-else-ը։ Այդ արտադրողականության տարբերությունը հատկապես զգալի է դառնում մեծ քանակությամբ պայմանների ստուգման պարագայում։ Եթե ստուգվող պայմանները երկուսը կամ երեքն են՝ այդ տարբերությունն աննշան է, և արտադրողականության տեսանկյունից չի կարող զգալի դեր խաղալ, հետևաբար այս դեպքում պետք է հաշվի առնել միայն էստեթիկ բաղադրիչը։ Մեծ քանակությամբ պայմանների առկայության դեպքում ցանկալի է օգտագործել switch case, արդյունքում կունենանք ավելի բարձր արտադրողականություն և հավանաբար նաև ավելի ընթեռնելի կոդ: