Skip to content

Latest commit

 

History

History
31 lines (21 loc) · 4.59 KB

Dynamically Generating Functions via Function Constructor.hy.md

File metadata and controls

31 lines (21 loc) · 4.59 KB

Ֆունկցիաների ստեղծման համար JavaScript ծրագրավորման լեզվում կան մի քանի եղանակներ, որոնցից մեկը՝ Function կոնստրուկտորի օգնությամբ, օբյեկտիվ պատճառներով հազվադեպ է օգտագործվում։

JavaScript-ը ծրագրավորման ամենաճկուն լեզուներից մեկն է, նա ծրագրավորողին տալիս է գրեթե անսահման ազատություն՝ թույլ տալով օգտագործել ծրագրավորման տարբեր հայեցակարգերը։ Նրա ճկունությունն արտահայտվում է անգամ ֆունկցիաներ ստեղծելու ժամանակ՝ դրա համար ներկայումս գոյություն ունեն ավելի քան 6 տարբեր եղանակներ՝ չհաշված գեներատոր ֆունկցիաների սինթաքսը։

Մենք կարող ենք ֆունկցիաներ ստեղծել հայտարարելու եղանակով (function declaration), կարող ենք ֆունկցիան հայտարարել անանուն, ապա այն վերագրել փոփոխականին` ասես թե այն սովորական արժեք է (function expression), ինչպես նաև կարող ենք հայտարարել և միանգամից կանչել այն (IIFE)։

Սկսած ES6 ստանդարտից հասանելի է ֆունկցիաների ստեղծման ևս երկու եղանակ՝ arrow function֊ների սինթաքսիսը (լյամբդա ֆունկցիաներ) և հատուկ՝ մեթոդների ստեղծման համար նախատեսված Shorthand method definition կոչվող համառոտ սինթաքսիսը։ Նաև պետք է նշել, որ այս եղանակներով ստեղծված ֆունկցիաները տարբերվում են ոչ միայն կարճ գրելաձևով։

Օրինակ arrow function-ները չունեն սեփական this-ը և super-ը, arguments փսևդոզանգվածը, չեն կարող օգտագործվել որպես կոնստրուկտոր֊ֆունկցիաներ, իսկ Shorthand method definition եղանակով ստեղծված մեթոդները տարբերվում են սովորական եղանակով ստեղծված մեթոդներից՝ ժառանգականության իրականացման որոշակի նրբություններով։

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

Դիտարկենք պարզագույն օրինակներից մեկը։ Անհրաժեշտ է ստեղծել ֆունկցիա, որը կստանա 2 արգումենտ, և կվերադարձնի նրանց գումարը։

const sum = new Function("a", "b", "return a + b");
console.log(sum(5, 3)); // 8

Հնարավոր է նաև ֆունկցիայի պարամետրերը և մարմինը վերագրել փոփոխականներին, ապա Function կոնստրուկտորի կանչի ժամանակ տալ նրան որպես արգումենտներ։ Օրինակ՝

const a = "a";
const b = "b";
const body = "return a + b";
const sum = new Function(a, b, body);
console.log(sum(4, 8)); // 12

Function կոնստրուկտորի օգնությամբ ստեղծված ֆունկցիաների առանձնահատկություններին ավելի մանրամասն կարելի է ծանոթանալ հետևյալ հղումներով՝ Understanding new Function in JavaScript - David Walsh Blog, JavaScript Function Definitions - W3Schools: