Skip to content

Latest commit

 

History

History
59 lines (40 loc) · 9.44 KB

Introduction to Increment and Decrement Operators in JavaScript.md

File metadata and controls

59 lines (40 loc) · 9.44 KB

Ինկրեմենտի (++) և դեկրեմենտի (--) օպերատորները JavaScript-ում: Փորձենք հասկանալ, թե ինչ տարբերություն կա երբ այդ օպերատորներն օգտագործվում են փոփոխականից առաջ կամ հետո (Պրեֆիքս և Պոստֆիքս ձևեր):

Ծրագրավորման մեջ ամենատարածված թվաբանական գործողություններից մեկը հանդիսանում է թվային արժեքը մեկով ավելացնելը կամ պակասեցնելը։ Այն շատ հեշտությամբ կարելի է անել հետևյալ եղանակով՝

let counter = 2;
counter = counter + 1;
alert(counter); // 3;

Այստեղ մենք հայտարարում ենք ինչ-որ counter փոփոխական, որին վերագրում ենք 2 թվային արժեքը։ Իսկ երբ ցանկանում ենք counter փոփոխականի արժեքը մեծացնել մեկով, ուղղակի counter-ին վերագրում ենք counter + 1: Սա թեև մաթեմատիկայի տեսանկյունից անսովոր գործողություն է, ծրագրավորման մեջ նորմալ է, քանի-որ ինչպես հիշում ենք = օպերատորը դա ոչ թե հավասարության, այլ վերագրման օպերատոր է, իսկ հավասարության օպերատորները JavaScript-ում երկուսն են՝ == և === :

counter = counter + 1 արտահայտության մեջ կան երկու օպերատորներ՝ + (գումարման) և = (վերագրման): Եթե մենք նայենք օպերատորների առաջնահերթությունների սանդղակը՝ կտեսնենք, որ գումարման օպերատորն ունի ավելի բարձր առաջնահերթություն, քան վերագրման օպերատորը։ Հետևաբար այդ արտահայտության մեջ առաջինը կկատարվի counter + 1 օպերացիան, որից հետո դրա արդյունքը կվերագրվի counter փոփոխականին, փոփոխելով դրա սկզբնական արժեքը։

Ինչպես արդեն նշեցի փոփոխականի թվային արժեքի մեկով ավելացնելը կամ պակասեցնելը չափազանց տարածված թվաբանական գործողություն է։ Այդ իսկ պատճառով, այն ավելի կարճ և ակնառու դարձնելու համար ստեղծվել են հատուկ օպերատորներ՝ ինկրեմենտի օպերատորը՝ (++) արժեքը մեկով մեծացնելու և դեկրեմենտի օպերատորը՝ (--) արժեքը մեկով փոքրացնելու համար։ Հետևաբար վերևի օրինակում բերված արտահայտությունը շատ ավելի կարճ և գեղեցիկ կարելի է գրել հետևյալ տեսքով՝

let counter = 2;
counter++;
alert(counter); // 3

Նույն տրամաբանությունն է գործում նաև դեկրեմենտի դեպքում, counter = counter - 1 արտահայտությունն ուղղակի կարելի է ներկայացնել counter-- տեսքով։

Այժմ տեսնենք թե ինչ տարբերություն կա, երբ ինկրեմենտի և դեկրեմենտի օպերատորները կիրառվում են փոփոխականից առաջ կամ հետո։ Մենք գիտենք, որ բոլոր օպերատորները գործողություն կատարելուց զատ, նաև ինչ-որ բան են վերադարձնում։ Օրինակ գումարման օպերատորին (+) երբ որպես օպերանդներ տալիս ենք 2 և 3 թվերը, նա դրանք գումարում է իրար և վերադարձնում է 5 թիվը։ < օպերատորին երբ տալիս ենք նույն օպերանդները՝ 2 և 3, նա դրանք համեմատում է, և վերադարձնում է Բուլյան արժեք, մեր օրինակում՝ true, որովհետև 2-ը 3-ից փոքր է։

Ինկրեմենտի և դեկրեմենտի օպերատորները ևս բացառություն չեն, նրանք նույնպես արժեք են վերադարձնում։

Սակայն կախված նրանից, թե մենք այդ օպերատորները կիրառում ենք փոփոխականի սկզբից կամ վերջից, այդ վերադարձվող արժեքները տարբերվում են։ Մենք կդիտարկենք ինկրեմենտի օպերատորը։ Դեկրեմենտի օպերատորն աշխատում է ամբողջովին նույն տրամաբանությամբ, ուղղակի օպերանդի արժեքը մեկով մեծացնելու փոխարեն մեկով փոքրացնում է։

Եվ այսպես սկզբից դիտարկենք այն դեպքը, երբ ինկրեմենտի օպերատորը գտնվում է օպերանդից աջ։ Այն նույնիսկ անուն ունի, և կոչվում է ինկրեմենտի պոստֆիքս օպերատոր։ Երբ մենք օգտագործում ենք ինկրեմենտի պոստֆիքս օպերատորը, ապա այն մեծացնում է օպերանդի արժեքը մեկով, սակայն վերադարձնում է ՀԻՆ ԱՐԺԵՔԸ։ Այսինքն ստացվում է, որ փոփոխականն արդեն արժեքը փոխել է, մեկով մեծացել է, սակայն պոստֆիքս օպերատորը մեզ վերադարձրել է նախկին արժեքը։ Օրինակ՝

let counter = 2;
let a = counter++;
alert(counter); // 3
alert(a); // 2

Տեսեք ինչ հետաքրքիր բան է ստացվել։ Մենք հայտարարել ենք ինչ-որ counter փոփոխական, և միանգամից նրան վերագրել 2 թվային արժեքը։ Ապա հայտարարել ենք ինչ-որ a փոփոխական, որին վերագրել ենք այն արժեքը, որը վերադարձնում է counter փոփոխականի նկատմամբ կիրառված ինկրեմենտի պոստֆիքս օպերատորը։ Կոդը աշխատացնելով տեսնում ենք, որ ինչպես վերևում նշվեց, պոստֆիքս օպերատորը թեև փոխել է counter փոփոխականի արժեքը, և այն այժմ մեկով ավել է, բայց մեզ վերադարձրել է նախկին արժեքը, մինչև մեկով ավելացնելը եղած արժեքը։ Այժմ դիտարկենք այն դեպքը, երբ ինկրեմենտի օպերատորը գտնվում է օպերանդից ձախ՝

let counter = 2;
let a = ++counter;
alert(counter); // 3
alert(a); // 3

Երբ ինկրեմենտի օպերատորն օգտագործվում է օպերանդից ձախ՝ դա նույնպես առանձին անուն ունի, կոչվում է ինկրեմենտի պրեֆիքս օպերատոր։ Ինկրեմենտի պրեֆիքս օպերատորի տարբերությունը ինկրեմենտի պոստֆիքս օպերատորից կայանում է նրանում, որ պրեֆիքս ձևը փոխում է փոփոխականի արժեքն ու ՀԵՆՑ ԱՅԴ փոխված արժեքն էլ վերադարձնում է։

Մեր օրինակում ստեղծեցինք ինչ-որ counter փոփոխական և նրան վերագրեցինք թվային արժեք։ Ապա ստեղծեցինք ևս մեկ փոփոխական՝ ինչ-որ a, որին վերագրեցինք այն արժեքը, որը կվերադարձնի counter փոփոխականի նկատմամբ կիրառված ինկրեմենտի պրեֆիքս օպերատորը։ Աշխատեցնելով կոդը նկատում ենք, որ և՛ counter և՛ a փոփոխականների արժեքը 3 է, այսինքն պրեֆիքս օպերատորը վերադարձրել է օպերանդի արդեն փոխված, ՆՈՐ արժեքը, ի տարբերություն պոստֆիքս օպերատորի, որը վերադարձնում էր օպերանդի ՀԻՆ արժեքը։

Մի կարևոր դիտարկում՝ ինկրեմենտի և դեկրեմենտի օպերատորները կարելի է կիրառել ՄԻԱՅՆ փոփոխականների նկատմամբ։ Եթե փորձեք այն կիրառել թվային լիտերալի վրա, ապա կստանանք սինթաքսի սխալ։ Օրինակ՝

console.log (2++); // Uncaught SyntaxError

Նաև կարող է հարց առաջանալ, թե ինկրեմենտի և դեկրեմենտի ո՞ր ձևն է ճիշտ օգտագործել, պոստֆիքսը թե՞ պրեֆիքսը։ Եթե օպերատորի վերադարձրած արժեքը չի օգտագործվում, և մեզ ուղղակի պետք է մեծացնել կամ փոքրացնել փոփոխականի արժեքը, ապա ոչ մի տարբերություն չկա թե որ ձևը կօգտագործենք։ Եթե օպերատորի վերադարձրած արժեքը պետք է նույն պահին օգտագործել՝ պրեֆիքս ձևը, իսկ եթե պետք է փոփոխականի արժեքը փոխել և միաժամանակ անհրաժեշտ է օգտագործել մինչև փոխելը եղած արժեքը՝ պոստֆիքս ձևը։