Skip to content

Commit fa49e06

Browse files
committed
feat: Introduce JavaScript's strict mode and its benefits
1 parent 2a9c672 commit fa49e06

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,4 @@ Below is a list of our publications for easier navigation:
4343
19. [**Ի՞նչպես կատարել զանգվածի տեսակավորում՝ (sorting) օգտագործելով ներդրված sort մեթոդը։ Ի՞նչու երբ տեսակավորում ենք թվերի զանգված, արդյունքը կարող է մեզ անակնկալի բերել, և ի՞նչպես կարող ենք որպես արգումենտ փոխանցվող ֆունկցիայի օգնությամբ ստանալ ճիշտ տեսակավորված թվերի զանգված։ Ի՞նչպես ստանալ էլեմենտների պատահական դասավորվածությամբ զանգված**](./publications/Arrays%20Sort%20Method%20Quirks%20and%20Functionality.hy.md)
4444
20. [**Մնացորդով բաժանման օպերատորը JavaScript-ում (%): Ինչպե՞ս օգտվելով մնացորդով բաժանումից արտածել տրված թիվը հակառակ հերթականությամբ(«Շրջել» այն)**](./publications/Unlocking%20JavaScripts%20Remainder%20Operator.hy.md)
4545
21. [**Ի՞նչ է NaN-ը և ինչպե՞ս ստուգել արժեքն արդյոք հավասար է NaN-ի: Ինչպե՞ս հնարավորինս խուսափել իրավիճակներից, որոնց արդյունքում կստանանք NaN: Նաև մի փոքր անվերջության և մինուս անվերջության մասին**](./publications/The%20Mysteries%20of%20the%20NaN.hy.md)
46+
22. [**Խիստ ռեժիմը JavaScript-ում ("Strict mode"): Ինչու է անհրաժեշտ այն ակտիվացնել և ինչ առավելություններ ունի «սովորական» ռեժիմի հետ համեմատած**](./publications/JavaScript%20Strict%20Mode%20Directive%20and%20Its%20Impact.hy.md)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Խիստ ռեժիմը JavaScript-ում ("Strict mode"): Ինչու է անհրաժեշտ այն ակտիվացնել և ինչ առավելություններ ունի «սովորական» ռեժիմի հետ համեմատած:
2+
3+
**JavaScript** լեզուն ստեղծվել է հեռավոր _1995_ թվականին։ Որպեսզի վեբ դիզայներների համար հնարավորինս հեշտ լինի սովորել այն, լեզվի սկզբնական տարբերակում հրաժարվեցին բարդ կոնստրուկցիաներ կիրառելուց, իսկ սուղ ժամանակը, որում խնդիր էր դրվել ստեղծել լեզուն, պատճառ դարձավ, որ լեզվում տեղ գտնեն մի շարք սխալներ և անկատարություններ։ Այդ ժամանակաշրջանում կայքերը չափազանց պարզ կառուցվածք ունեյին, և ավելի շատ հիշեցնում էին այն, ինչ այսօր ընդունված է անվանել կայք-այցեքարտեր։ Հիմնական լոգիկան գրվում էր բեքենդում, դեռևս չկար _AJAX_ տեխնոլոգիան և **JavaScript**-ից շատ բան չէր էլ պահանջվում, այն ավելի շուտ հանդիսանում էր միջոց կայքերին մի փոքր ինտերակտիվություն հաղորդելու համար։
4+
5+
Հետագայում վեբի թռիչքաձև զարգացումը բերեց նրան, որ **JavaScript**-ի զարգացումն ու բարդացումը անխուսափելի էր։ Լեզվում ներդրվում էին նորանոր բարդ կառուցվածքներ և ֆունկցիաներ, սակայն լեզվի ընդհանուր կառուցվածքային հիմքը շարունակում էր մնալ նույնը, որպեսզի չխախտվի հետադարձ համապատասխանելիությունը, և նախկինում գրված սքրիփթները «չփլվեն», այլ շարունակեն նույնքան լավ աշխատել։ Այսինքն նոր ֆունկցիոնալության ավելացումը ոչ մի կերպ չէր ազդում նախկինում ներդրված, հաճախ սխալ կամ ոչ լիարժեք իրականացված ֆունկցիոնալության վրա։ Նրանք զուգահեռ գոյատևում էին լեզվի մեջ։
6+
7+
Բայց գնալով լեզվի առջև ծառացած խնդիրները շատանում էին, ֆրոնտենդում ավելի ու ավելի շատ էր օգտագործվում բիզնես լոգիկան, և տարածում էր գտնում կոնցեպտը, որ այն ինչ հնարավոր է անել ֆրոնտենդում, պետք է արվի հենց ֆրոնտենդում, բեքենդից հարցումները քչացնելու, կայքի արագագործությունն ու արդյունավետությունը բարձրացնելու համար։
8+
9+
_2009_ թվականին ընդունվեց **ES5** ստանդարտը, որում մի շարք խոշոր նորամուծությունների հետ միաժամանակ ներդրվեց նաև **JavaScript**-ի _ԽԻՍՏ ՌԵԺԻՄԸ_ (**Strict mode**): Խիստ ռեժիմում լեզվի սեմանտիկան որոշ տարբերություններ ունի սովորականից,նախ ուղղվեցին մի շարք սխալներ, որոնք լեզվում մնացել էին ստեղծման օրվանից սկսած, և ինտերպրետատորը դրանք անտեսում էր, հաճախ պատճառ հանդիսանալով սքրիփթի «տարօրինակ», անկանխատեսելի վարքագծին։ Բացի դրանից ուղղվեցին մի շարք այլ բնույթի սխալներ, որոնք խանգարում էին ինտերպրետատորին օպտիմիզացնել կոդը, ինչի պատճառով սքրիփթը երբեմն զգալիորեն դանդաղ էր աշխատում։ Եվ նաև խիստ ռեժիմը արգելեց օգտագործել սինթաքսի որոշ էլեմենտներ, որոնք **ECMAScript**-ի հաջորդ տարբերակներում պետք է ստանային հատուկ նշանակություն։ Օրինակ _implements, interface, let, package, private, protected, public, static և yield_ բառերը ռեզերվ արվեցին, որպես բանալի-բառեր, և լեզվի ավելի ուշ ստանդարտներում որոշներն արդեն մտան կիրառության մեջ։
10+
11+
Սքրիփթի աշխատանքը խիստ և ոչ խիստ ռեժիմում զգալի տարբերվում է իրարից։ Ֆունկցիաները կարող են լրիվ տարբեր կերպ դրսևորվել,բացառություններ «նետելը» և սխալների մշակումը կարդինալ տարբերվում են։ Սակայն որպեսզի շարունակեն ապահովել հետադարձ համապատասխանելիությունն ու նախկինում գրված սքրիփթները շարունակեն աշխատել, խիստ ռեժիմը ավտոմատ անջատված է։ Այն մենք պետք է «ստիպողաբար» միացնենք, օգտագործելով **"use strict"** հրահանգը։
12+
13+
Դրա համար սքրիփթի ամենասկզբում պետք է գրել **"use strict"** կամ **'use strict'** հրահանգը, և ամբողջ սքրիփթը կաշխատի ժամանակակից ռեժիմում։ Նկատենք, որ եթե հրահանգը գրենք սքրիփթի կեսից, ապա այն ուղղակի կանտեսվի։ **"use strict"**-ից առաջ չի կարող լինել ոչ մի ուրիշ ինստրուկցիա կամ արտահայտություն։ Կարող է լինել միայն մեկնաբանություններ (տողային կամ բլոկային՝ տարբերություն չկա):
14+
15+
Հնարավոր է **"use strict"**-ը կիրառել առանձին ֆունկցիաների համար, ֆունկցիայի մարմնի առաջին տողում այն գրելով։ Սակայն միայն ֆունկցիաների։ Այլ բլոկային կառուցվածքների դեպքում (_օրինակ if else կամ ցիկլեր_) այն չի աշխատի։ Նշեմ նաև որ այդպես սովորաբար չի արվում և հիմնականում խիստ ռեժիմ կիրառվում է ամբողջ սքրիփթի նկատմամբ։ Գոյություն չունի որևէ եղանակ, որի միջոցով հնարավոր կլինի սքրիփթի ԿԵՍԻՑ ՉԵՂԱՐԿԵԼ ԽԻՍՏ ՌԵԺԻՄԸ։ Եթե այն գործարկեցինք, ապա ամբողջ սքրիփթը կաշխատի այդ ռեժիմով սկզբից մինչև վերջ։
16+
17+
Նաև նշեմ որ **ES6**-ում ներդրված մի շարք նորամուծություններ՝ օրինակ կլասսներն ու մոդուլները, ավտոմատ կերպով աշխատում են խիստ ռեժիմով։ Այսինքն եթե դուք կոդը գրում եք մոդուլներով և օգտագործում եք կլասսներ, այլևս կարիք չկա խիստ ռեժիմը «ստիպողաբար» ակտիվացնելու, այն արդեն իսկ ակտիվ է։
18+
19+
Պետք է՞ արդյոք աշխատել խիստ ռեժիմում։ Պատասխանը միանշանակ է՝ ԱՅՈ՛։ Ժամանակակից բոլոր բրաուզերները սպասարկում են այն (_Չի սպասարկվում միայն Internet Explorer 10-ից հին տարբերակների կողմից, սակայն դրանցից դեռևս օգտվողների տեսակարար կշիռը մեծ չէ, և հանգիստ կարելի է անտեսել_): Խիստ ռեժիմի օգտագործումը մեծացնում է թե՛ ծրագրավորողի և թե՛ ծրագրի աշխատանքի արդյունավետությունը։ Նաև ինտերպրետատորը ծրագրի մեջ հնարավորություն կստանա անել մեծ քանակությամբ օպտիմիզացիաներ, ինչի արդյունքում ձեր գրած ծրագիրը անհամեմատ արագ կսկսի աշխատել։

0 commit comments

Comments
 (0)