ՋավաՍկրիպտ

ծրագրավորման լեզու

ՋավաՍկրիպտ (անգլ.՝ JavaScript), ինտերպրետացվող ծրագրավորման լեզու։ Այն համացանցում ամենահանրահայտ սկրիպտային լեզուն է և աշխատում է բոլոր հանրահայտ բրաուզերներում, որոնց թվում են Google Chrome, Mozilla Firefox, Օպերա և Սաֆարի[7]։

ՋավաՍկրիպտ
Изображение логотипа
Տեսակscripting language?, prototype-based programming language?, իմպերատիվ ծրագրավորման լեզու, ֆունկցիոնալ ծրագրավորման լեզու, միջոցառմամբ կողմնորոշվող ծրագրավորման լեզու, Համակարգչային պլատֆորմ, ծրագրավորման ինտերպրետացվող լեզու, բազմահարացուցային ծրագրավորման լեզու, ծրագրավորման լեզու, strict programming language? և բարձր մակարդակի ծրագրավորման լեզու
Կատարման ձևինտերպրետացվող է
Առաջացել է1995 թ․
ՆախագծողԲրենդան Այկ
Ընդլայնումներ.js[1]
Տիպիզացիադինամիկ
Համացանցի տվյալների տեսակtext/javascript[1][2]
Հիմնական իրականացումներKJS, Rhino, SpiderMonkey, V8, WebKit
Հիմքի վրա էECMAScript?
Ներշնչվել էScheme, Self, Ջավա, C, LiveScript?, Lua, Perl, AWK, HyperTalk? և Python[3]
ՍեփականատերSun Microsystems[4] և Օրաքլ[5]
Անվանված էՋավա[6]
Կայքecma-international.org/publications-and-standards/standards/ecma-262/(անգլ.)
 JavaScript Վիքիպահեստում

Այս լեզուն առաջին անգամ կիրառվել է Netscape Communications-ի կողմից Netscape Navigator 2 beta (1995) բրաուզերում։ ՋավաՍկրիպտ լեզուն ստեղծվել է Բրենդան Այկի կողմից 1995 թվականին։

Ինչ է ՋավաՍկրիպտը խմբագրել

  • ՋավաՍկրիպտը նախագծվել է կայքերի HTML էջերին դինամիկություն հաղորդելու համար
  • ՋավաՍկրիպտը սկրիպտային լեզու է
  • ՋավաՍկրիպտը սովորաբար ներառվում է ուղղակիորեն HTML ֆայլերի մեջ
  • ՋավաՍկրիպտը ինտերպրետացվող լեզու է

ՋավաՍկրիպտ խմբագրել

Նախքան Բրենդան Այկի ներգրավումը Netscape ընկերություն (1995 թվականի ապրիլի 4)[8], խնդիր էր դրված ընդլայնել ծրագրավորման սխեման՝ Scheme կամ Netscape զննարկիչում փոփոխության ենթարկել որոշ կարևորագույն տարրեր։ Քանի-որ պահանջը դրված էր խիստ նպատակային, Էյխային ներգրավեցին ընկերություն, որպես սերվերային նյութերի պատասխանատու։ Նա այս աշխատանքը կատարեց շուրջ մեկ ամիս, զբաղվեց HTTP[8] պրոտոկոլի բարելավման աշխատանքներով։ Այստեղ նա ծավալեց նաև նոր ծրագրավորման աշխատանքներ։ Մայիսի 8-ին ծրագրավորողը ետ վերադարձավ, զբաղվելով հաճախորդների սպասարկման աշխատանքներով (զննարկիչում), որտեղ էլ սկսեց վաստակել նոր ծրագրավորման լեզվի առաջխաղացման հաշվին։ Բացի Թոմ Պակինայից (Tom Paquin), Պիկա Շելլան (Rick Schell) ևս համոզված էր, որ Netscape-ը պետք է աջակցի ծրագրավորման լեզվին, որը գրված է HTML կոդով[9]։

 
Մարկ Անդրեսսեն
 
Բիլլ Ջոյ

Բրենդան Էյխի հետ համագործակցում էին[8] հիմնադիր[10] (Netscape Communications) Մարկ Անդերսսեն և համահեղինակ (Sun Microsystems) Բիլլ Ջոյը։ Որպեսզի հաջողությամբ ավարտեին աշխատանքը, ընկերությունը համագործակցության պայմանագիր ստորագրեց[11]։ Նրանք նպատակ էին դրել՝ ստեղծել այնպիսի ծրագրավորման լեզու, որը բազային ծրագրավորման մաս կկազմեր, հարմար կլիներ և՛ ոճաբանի, և՛ ցմ ծրագրավորողի համար, չէր պահանջիի լրացուցիչ ծավալուն և բարդ գործողություններ կատարելու անհրաժեշտություն[8]։ Առաջին ծրագիրը կոչվում էր Mocha[12][13][14], այնուհետև անվանափոխվեց LiveScript[14][15] և նախատեսված է թե՛ որպես ծրագրավորում՝ հաճախորդի համար, և թե՛ որպես ծրագիր՝ սերվերի համար (այնտեղ այն պետք է ունենա LiveWire անվանում)[11]։ Որպես սինտակսներ հանդես եկան Սի և Java լեզուները, ու, քանի որ այդ ժամանակ Java-ն համարվում էր խիստ ժամանակակից ժամանակակից բառ[8][11], 1995 թ. դեկտեմբերի 4-ին LiveScript լեզուն վերանվանեցին JavaScript[16], ստանալով արտոնագիր Sun-ից։ JavaScript անոնսը Netscape-ի և Sun -ի համար հանդիսանում է բետա-տարբերակի (Netscape Navigator) երկրորդ թողարկումը[8][17]։

1996 թվականին Microsoft ընկերությունը թողարկեց JavaScript լեզուն, JScript անվանումով։ Այն առաջադրվել էր 1996 թվականի հուլիսի 18-ին[18]։ Առաջին զննարկիչը, որ աշխատեց այս ծրագրի հետ, Internet Explorer 3.0 էր։

Netscape[19][20]-ը ներկայացված է որպես ECMA ասսոցիացիայի լեզու։ Ստանդարտ տարբերակն ունի ECMAScript անվանումը, նկարագրվում է ECMA-262 ստանդարտով։ Առաջին տարբերակը հանդիսացավ JavaScript 1.1 տարբերակը, ինչպես նաև JScript և ScriptEasy[11][21]:

Ինչ կարող է անել JavaScript-ը խմբագրել

  • JavaScript-ը HTML դիզայներին տալիս է ծրագրավորման գործիք
  • JavaScript-ը կարող է դինամիկ տեքստ ներդնել HTML էջի մեջ
  • JavaScript-ը կարող է արձագանքել իրավիճակներին(events), այսինքն ՝ JavaScript -ը կարող է գործել, երբ ինչ որ բան է պատահում, օրինակ երբ էջը ավարտում է բեռնավորումը, կամ երբ օգտագործողը մատնահարում է HTML էլեմենտի վրա
  • JavaScript-ը կարող է կարդալ և փոխել HTML էլեմենտի պարունակությունը
  • JavaScript-ը կարող է օգտագործվել տվյալը վավերացնելու համար մինչ վերջինիս սպասարկիչ ուղարկվելը։ Սա կարող է սպասարկչին զերծ պահել ավելորդ գործընթացներից և ծանրաբեռնվածությունից
  • JavaScript-ը կարող է օգտագործվել կայքից օգտվողի զննարկիչը ճանաչելու համար, և կախված զննարկչից՝ բեռնել տվյալ բրաուզերին սպեցիֆիկ էջը
  • JavaScript-ը կարող է օգտագործվել cookie-ներ ստեղծելու համար

JavaScript-ի կառուցվածքը կարելի է բաժանել հետեևյալ 3 մասերի

  1. ECMAScript
  2. բրաուզերի օբյեկտավորված մոդել
  3. դոկումենտի օբյեկտավորված մոդել

JavaScript-ի դյուրըմբռնելիությունը կայանում է նրա օբյեկտների կառուցվածքի մեջ։ JavaScript-ը բավականին նման է C ծրագրավորման լեզվին։ JavaScript-ի օբյեկտները պարունակում են՝

  1. մեթոդներ (ֆունկցիաներ)
  2. հատկանիշներ՝ (տվյալներ կամ այլ օբյեկտներ) նկարագրում է օբյեկտների հատկանշական գծերը
  3. իրադարձություններ (անգլ.՝ events), որոնք փոխկապակցված են օբյեկտների հետ
  4. AngularJS[22] - JavaScript- շրջանակ `բաց կոդով։

Լեզվի ձևաբանությունը խմբագրել

JavaScript-ը կարելի է գրել անմիջապես HTML ֆայլի մեջ՝ կոդը ներառելով <script> բացվող և </script> փակվող թեգերի մեջ։ JavaScript-ը կարելի է նաև գրել .js ընդլայնմամբ առանձին ֆայլում։ Ներքևում ներկայացված է JavaScript-ի օգտագործման պարզագույն օրինակ՝

<!DOCTYPE html> 
<html>
<head>
<title>Օրինակ</title>

<script type="text/javascript">
alert("Hello World");
</script>

</head>
<body>
</body>
</html>

HTML ֆայլը ակտիվացնելիս կբացվի փոքր պատուհան Hello World ազդանշանով։

Ավելի բարդ օրինակ խմբագրել

Այս ընտրանքային կոդը ներկայացնում է JavaScript- ի տարբեր առանձնահատկություններ։
/*Գտնում է երկու թվերի ամենացածր ընդհանուր բազմապատիկը (LCM) (LCM) երկու թվերի համար */
function LCMCalculator(x, y) { // կոնստրուկտիվ ֆունկցիա

 var checkInt = function(x) { // ներքին գործառույթը
   if (x % 1 !== 0) {
     throw new TypeError(x + "is not an integer"); // var a =  mouseX
   };
   return x
 }
 this.a = checkInt(x)
   // semicolons   ^^^^   պարտադիր չէ, նոր գծի համարը բավարար է
 this.b = checkInt(y) գրառումը;

}
// Կառուցողի կողմից ստեղծված օբյեկտի նմուշների նախատիպը
// կոնստրուկտորի «նախատիպը»
LCMCalculator.prototype = { // օբյեկտի հիմնական    կոնստրուկտոր։ LCMCalculator, // Սահմանվում է ծրագրային կոդը    gcd: function() { // մեթոդը, որը հաշվարկում է բաժանարարը

   // Euclidean ալգորիթմը։
   var a = Math.abs(this.a),
     b = Math.abs(this.b),
     t;
   if (a < b) {
     // swap variables
     t = b;
     b = a;
     a = t;
   }
   while (b !== 0) {
     t = b;
     b = a % b;
     a = t;
   }
   // Միայն անհրաժեշտ է հաշվարկել GCD- ն մեկ անգամ, կիրառվում է «վերահղման» այս մեթոդը։
// Իրականում ոչ վերաձևակերպում, այն սահմանվում է օրինակով,

    // այսպիսին, որ this.gcd- ը վերաբերում է LCMCalculator.prototype.gcd- ի փոխարեն այս «վերաձևակերպմանը»։
    // Նշեք, որ, եթե LCMCalculator օբյեկտի անդամները «ա» և / կամ «բ» են փոխվել, դա հանգեցնում է սխալ արդյունքների։

   // Also, 'gcd' === "gcd", this['gcd'] === this.gcd
   this['gcd'] = function() {
     return a;
   };
   return a;
 },
 // Օբյեկտի  անվանումները կարող են սահմանվել ըստ տողերի կողմից (") կամ single (') մեջբերումներ։
lcm: function() { // Variable անունները կապված չեն օբյեկտի հատկությունների հետ, e.g., |lcm|ոչ թե |this.lcm|:
//չօգտագործել |this.a*this.b| խուսափելով FP ճշգրտության դասերից։
var lcm = this.a / this.gcd() * this.b; // Միայն մեկ անգամ պետք է հաշվարկի lcm, այնպես որ «վերահղեք» այս մեթոդը։
this.lcm = function() { return lcm; }; return lcm; }, toString: function() { return "LCMCalculator: a = " + this.a + ", b = " + this.b; }

};

// Սահմանել ընդհանուր գործառույթ. այն իրականացվում է վեբ բրաուզերների համար։
function output(x) {

 document.body.appendChild(document.createTextNode(x));
 document.body.appendChild(document.createElement('br'));

}

// Նշում։ Array's map() and forEach() սահմանվում են JavaScript 1.6 տարբերակի համար։
// Դրանք կիրառվում են այստեղ JavaScript- ին բնորոշ ֆունկցիոնալությունը ցուցադրելու համար։

[

 [25, 55],
 [21, 56],
 [22, 58],
 [28, 56]

].map(function(pair) { // array literal + mapping function

   return new LCMCalculator(pair[0], pair[1]);
 }).sort((a, b) => a.lcm() - b.lcm()) // sort with this comparative function; => is a shorthand form of a function, called "arrow function"
 .forEach(printResult);

function printResult(obj) {

 output(obj + ", gcd = " + obj.gcd() + ", lcm = " + obj.lcm());

} Բրաուզերի պատուհանում պետք է ցուցադրվի հետևյալ արդյունքը.

LCMCalculator: a = 28, b = 56, gcd = 28, lcm = 56
LCMCalculator: a = 21, b = 56, gcd = 7, lcm = 168
LCMCalculator: a = 25, b = 55, gcd = 5, lcm = 275
LCMCalculator: a = 22, b = 58, gcd = 2, lcm = 638

Տարբերակների պատմություն խմբագրել

Տարբերակ Թողարկման ամսաթիվ Համարժեք է Netscape
Navigator
Mozilla
Firefox
Internet
Explorer
Opera Safari Google
Chrome
1.0 Մարտ 1996 2.0 3.0
1.1 Օգոստոս 1996 3.0
1.2 Հունիս1997 4.0-4.05 3
1.3 Հոկտեմբեր 1998 ECMA-262 1st + 2nd edition 4.06-4.7x 4.0 5[23]
1.4 (Netscape)
Server
6
1.5 Նոյեմբեր 2000 (ECMA-262 3rd edition) 6.0 1.0 5.5 (JScript 5.5),
6 (JScript 5.6),
7 (JScript 5.7),
8 (JScript 5.8)
7.0 3.0-5 1.0-10.0.666
1.6 Նոյեմբեր 2005 1.5 + array extras + array and string generics + E4X 1.5
1.7 Հոկտեմբեր 2006 1.6 + Pythonic generators Արխիվացված 2013-03-02 Wayback Machine + iterators + let 2.0 28.0.1500.95
1.8 Հունիս 2008 1.7 + generator expressions + expression closures 3.0 11.50
1.8.1 1.8 + native JSON support + minor updates 3.5
1.8.2 Հունիս 22, 2009 1.8.1 + minor updates 3.6
1.8.5 Հուլիս 27, 2010 1.8.2 + new features for ECMA-262 5th edition compliance 4.0

Ծանոթագրություններ խմբագրել

  1. 1,0 1,1 Miller M., Borins M., Bynens M., Farias B. Updates to ECMAScript Media TypesIETF, 2022. — doi:10.17487/RFC9239
  2. https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types
  3. http://speakingjs.com/es5/ch03.html#_influences
  4. Netscape and Sun announce JavaScript, the open, cross-platform object scripting language for enterprise networks and the internet — 1995.
  5. http://tsdr.uspto.gov/#caseNumber=75026640&caseType=SERIAL_NO&searchType=statusSearch
  6. https://www.youtube.com/watch?v=XOmhtfTrRxc&t=2m5s
  7. JavaScript Introduction
  8. 8,0 8,1 8,2 8,3 8,4 8,5 Hamilton, Naomi (2008 թ․ հուլիսի 31). «The A-Z of Programming Languages: JavaScript». a-z of programming languages (անգլերեն). ComputerWorld. Արխիվացված օրիգինալից 2011 թ․ օգոստոսի 22-ին. Վերցված է 2009 թ․ նոյեմբերի 18-ին.
  9. Eich, Brendan (2008 թ․ ապրիլի 3). «Popularity» (անգլերեն). Արխիվացված օրիգինալից 2008 թ․ ապրիլի 7-ին. Վերցված է 2009 թ․ նոյեմբերի 18-ին.
  10. Frommer, Dan (2008 թ․ հունիսի 30). «Marc Andreessen Joins Facebook Board» (անգլերեն). Արխիվացված օրիգինալից 2011 թ․ օգոստոսի 22-ին. Վերցված է 2009 թ․ նոյեմբերի 18-ին.
  11. 11,0 11,1 11,2 11,3 {{{заглавие}}}. — P. 1, 2. — ISBN 978-0-470-22780-0
  12. Brendan Eich (2008 թ․ ապրիլի 3). «Popularity» (անգլերեն). անհատական բլոգ. Վերցված է 2015 թ․ մարտի 18-ին.
  13. Brendan Eich (2011 թ․ հունիսի 21). «New JavaScript Engine Module Owner» (անգլերեն). անհատական բլոգ. Վերցված է 2015 թ․ մարտի 18-ին.
  14. 14,0 14,1 , JavaScript. Գրպանի ուղեցույց։ Անհրաժեշտ հրահանգներ և կոդ (խմբ. Քրիստիան Ուենց (Cristian Wenz); թարգմ. անգլ. Ի. Վ. Բերշտեյն) 272 էջ 18, էջեր 272 — 272 էջ, ISBN 978-5-8459-1186-5։
  15. Paul Krill (2008 թ․ հունիսի 23). «JavaScript creator ponders past, future» (անգլերեն). InfoWorld. Վերցված է 2015 թ․ մայիսի 3-ին. «Eich: That's right. It was all within six months from May till December (1995) that it was Mocha and then LiveScript. And then in early December, Netscape and Sun did a license agreement and it became JavaScript.»
  16. Bellis, Mary (2008 թ․ հունիսի 30). «The History of JavaScript». About.com Guide (անգլերեն). Արխիվացված օրիգինալից 2011 թ․ օգոստոսի 22-ին. Վերցված է 2009 թ․ նոյեմբերի 18-ին.
  17. «Netscape and Sun Announce Javascript(TM), the Open, Cross-Platform Object Scripting Language for Enterprise Networks and the Internet» (անգլերեն). Netscape Communications, Sun Microsystems — Անոնս JavaScript. Արխիվացված է օրիգինալից 1996 թ․ դեկտեմբերի 16-ին. Վերցված է 2009 թ․ նոյեմբերի 17-ին.
  18. «Microsoft Announces ActiveX Scripting» (անգլերեն). Microsoft — Անոնս JScript. 1996 թ․ հուլիսի 18. Արխիվացված օրիգինալից 2011 թ․ օգոստոսի 22-ին. Վերցված է 2009 թ․ նոյեմբերի 17-ին.
  19. {{hwdva] | հեղինակ = Silwa C. | վերնագիր = Scripting standard coming | հղում = https://books.google.am/books?id=kxcEAAAAMBAJ&pg=PA10&lpg=PA10&dq=Netscape+submitted+the+JavaScript+specification&source=bl&ots=JEnGQvNAmu&sig=chtE3zvk_PmmkxWi14D6XEKyRIs&hl=ru&ei=QyEFS7f-EciB_Qbms6G4Dw&sa=X&oi=book_result&ct=result&resnum=4&ved=0CB4Q6AEwAw#v=onepage&q=&f=false | լեզու = en | թողարկում = Network World | տիպը =ամսագիր | թողարկումը = IDG Network World Inc | տարի = 1996 | գլուխ = 13 | համար = 49 | էջեր = 10 }}
  20. Սիբախ, Պիտեր (2007 թ․ հունիսի 13). «Ծանոթացում ECMAscript-ի հետ». developerWorks Ռուսաստան. IBM. Արխիվացված օրիգինալից 2011 թ․ օգոստոսի 22-ին. Վերցված է 2009 թ․ նոյեմբերի 19-ին.
  21. «History of scripting» (անգլերեն). Nombas. Արխիվացված է օրիգինալից 2004 թ․ հունիսի 18-ին.
  22. AngularJS
  23. «What Version of Javascript». Javascript.about.com. 2016 թ․ փետրվարի 22. Արխիվացված է օրիգինալից 2017 թ․ հունվարի 9-ին. Վերցված է 2017 թ․ փետրվարի 24-ին.

Արտաքին հղումներ խմբագրել

 Վիքիպահեստն ունի նյութեր, որոնք վերաբերում են «ՋավաՍկրիպտ» հոդվածին։