دیجی ویت
اکما اسکریپت دقیقاً چیست؟ | چه تفاوتی با جاوا اسکریپت دارد؟ | به چه دردی می‌خورد؟
اکما اسکریپت چیست؟

اکما اسکریپت دقیقاً چیست؟ | چه تفاوتی با جاوا اسکریپت دارد؟ | به چه دردی می‌خورد؟

راستش را بخواهید دلیل اینکه این مقاله را می‌نویسم، این است که تا به امروز تعریف درست و دقیقی از اکما اسکریپت و رابطه‌ای که با جاوا اسکریپت دارد ندیده‌ام. جملاتی که ممکن است در برخی سایت‌ها درباره اکما اسکریپت بخوانید چیزهایی شبیه جملات زیر است:

  • اکما اسکریپت، نوعی جاوا اسکریپت استاندارد شده است.
  • جاوا اسکریپت یک زبان برنامه‌نویسی است که استانداردی به نام اکما اسکریپت را اعمال میکند.
  • اکما اسکریپت خودش یک استاندارد است.
  • جاوا اسکریپت زیرمجموعۀ اکما اسکریپت است.
  • اکما اسکرپیت یک زبان برنامه‌نویسی است.
  • اکما اسکریپت هستۀ جاوا اسکریپت است.

خب، پیشنهاد می‌کنم هر تعریفی را که در ذهنتان است فعلاً دور بریزید تا باهم تعریف درست ECMAScript را یاد بگیریم، رابطه آن با جاوا اسکریپت را بگوییم و ببینیم که مرورگرهای وب این وسط چه کاره‌اند؟

تعریف چند اصطلاح ساده

در این بخش لیستی از تعاریف و اصلاحات مربوط به اکما اسریپت و جاوا اسکریپت را می‌خوانید. آشنایی با این اصطلاحات شما را از سردرگمی نجات می‌دهد. پیشنهاد می‌کنم این بخش را با دقت بخوانید تا با رابطه میان اکما اسکریپت و جاوا اسکریپت بهتر آشنا شوید.

Ecma International (اکمای بین‌المللی)

Ecma International، سازمانی است که استاندارهای حوزۀ فناوری را تعریف می‌کند.

اجازه دهید یک مثال جالب از استاندارهایی که توسط این سازمان تعریف شده است خدمتتان عرض کنم. بی زحمت همین الان نگاهی به کیبورد لپ تاپ یا گوشی موبایلی که الان در دستتان است بیاندازید؛ در تمام کیبوردها، معمولاً اعداد در قسمت بالا، حروف پایین آن‌ها، کلید فاصله یا Space در وسط و فلش‌های جهت دارد در پایین حروف سمت راست قرار گرفته‌اند. به این ترتیبِ چینش دکمه‌های کیبورد، استاندارد QWERTY می‌گویند که توسط سازمان بین‌المللی Ecma تعریف شده است.

ECMA-262 یا ECMA SCRIPT؟ مساله این است...

ECMA-262، استاندارد دیگری است که توسط اکمای بین‌المللی تعریف شده است. این استاندارد شامل شناسه‌هایی برای یک زبان اسکریپت‌نویسی همه منظوره است.

نکته: تفاوت زبان برنامه‌نویسی با زبان اسکریپت‌نویسی در این است که، زبان اسکریپت‌نویسی بر خلاف زبان برنامه‌نویسی نیازی به کامپایل ندارد و به همین دلیل سرعت اجرای آن‌ کمتر است.

ECMA-262، استانداری مانند QWERTY است، منتها با این تفاوت که به جای طرح و مشخصات یک صفحه کلید، تعیین‌کننده مشخصات زبان اسکریپت‌نویسی است. با توجه به اینکه اکماهای دیگری مانند ECMA-260، ECMA-261 و... نیز وجود دارند که برای استانداردهای دیگرند و ربطی به زبان اسکریپت‌نویسی ندارند، برای جلوگیری از سردرگمی مخاطبان، به جای  ECMA-262 از نام ECMASCRIPT استفاده می‌شود. در جدول زیر این موضوع به وضوح قابل تشخیص است.

Ecma International

پس می‌توانیم نتیجه بگیریم، اکما اسکریپت استانداری نیست که جاوا اسکریپت آن را تعریف یا اعمال کرده باشد، اکما اسکریپت هسته جاوا هم نیست، این استاندارد توسط سازمان بین‌المللی اکما تعریف شده است و زبان‌هایی مانند جاوا اسکریپت بر اساس مشخصه‌های آن عمل می‌کنند.

به عبارت دیگر، اکمااسکریپت شامل قوانین، دستورالعمل‌ها و جزئیاتی است که یک زبان اسکریپ‌نویسی باید آن‌ها را رعایت کند تا سازگار با اکما اسکریپت شمرده شود.

و اما یک نکتۀ دیگر، ECMA مخفف European Computer Manufacturer’s Association است.

خب، حالا که با تعریف درست اکما اسکریپت آشنا شدید، بیایید نگاهی به JAVA SCRIPT داشته باشیم و ببینیم ربط ابن دو به هم چیست.

جاوا اسکریپت چیست؟

جاوا اسکریپت، همانطور که از نامش مشخص است، یک زبان اسکریپت نویسی همه منظوره است که مطابق با استاندارهای اکما اسکریپت عمل می‌کند.

در واقع شما با خواندن ECMASCRIPT یاد می‌گیرید چطور یک زبان اسکریپ نویسی بسازید، ولی اگر مستندات و دستورالعمل‌های جاوااسکریپت را بخوانید، یاد می‌گرید که چطور از یک زبان اسکریپت نویسی استفاده کنید.

خیلی‌ها هم هستند که اعتقاد دارند جاوا اسکریپت یک لهجه یا گویش از زبان اکمااسکریپت است. خب این اعتقاد کلاً غلط است. چرا؟

ببینید، وقتی گویشی از زبان (مثلا زبان فارسی، فرانسوی یا ترکی) داریم، اکثر واژگان و دستور زبان آن گویش از زبان مادر گرفته شده است. طبق اعتقاد این دوستان هم اکما اسکریپت باید زبان مادر باشد و جاوا اسکریپت ویژگی‌های خود را از آن گرفته باشد؛ اما اینطور نیست. جاوا اسکریپت بیشتر براساس مشخصه‌های تعریف شده اکما اسکریپت، در ECMA-262 پیاده می‌شود، اما در جاوا اسکریپت یک سری ویژگی‌ها وجود دارد که اکما اسکریپت (یا به تعبیر برخی دوستان زبان مادر) آن‌ها را ندارد.

جاوا اسکریپت چیست؟

این اسکرین شات چندتا از ویژگی‌های آزمایشی جاوا اسکریپت را نشان می‌دهد که تا این لحظه به اکما اسکریپت اضافه نشده اند.

بدیهی است که این توضیحاتی که خواندید تنها گوشۀ کوچکی از جاوا اسکریپت است. برای آشنایی بیشتر با جاوا اسکریپت می‌توانید مقالۀ « جاوا اسکریپت چیست؟ » را بخوانید.

موتور جاوا اسکریپت چیست؟

موتور جاوا اسکریپت یک برنامه یا مترجم است که کدهای جاوا اسکریپت را فهمیده و آن‌ها اجرا می‌کند.

سروکلۀ موتورهای جاوا اسکریپت معمولاً در مرورگرهای وب پیدا می‌شود. موتورهای جاوا اسکریپت موجود در مرورگرها اغلب نام‌هایی برای خودشان دارند. برای مثال V8 موتور جاوا اسکریپت مرورگر کروم، Spider Monkey موتور جاوا اسکریپت مرورگر فایرفاکس و Chakra متعلق به Microsoft Edge است.

تفاوت عملکرد مرورگرها

فرض کنید سه نفر آدم مختلف در مقابل ما قرار دادند. ما برای این سه نفر یک دستور یکسان صادر می‌کنیم و می‌گوییم: "بپر". دو نفر از این آدم‌ها متوجه دستور "بپر" می‌شوند اما نفرم سوم به این دستور واکنش سریعتری نشان می‌دهد و سریع می‌پرد. در واقع نفر سوم هم پردازش دستور را سریعتر انجام داده و هم اجرای آن را.

مشابه این امر برای مرورگرها هم اتفاق می‌افتد، دو مرورگر می‌توانند کدهای جاوا اسکریپت را بفهمند، اما یک مرورگر آن را سریعتر از دوتای دیگر اجرا می‌کند. چرا؟ چون مرورگر سوم موتور جاوا اسکریپت کارآمدتری دارد.

تفاوت پشتیبانی مرورگرها از زبان‌های مختلف

به همین اطراف خودتان نگاه کنید و چند نفر را در نظر بگیرید که به زبان فارسی صحبت می‌کنند. آیا همه این افراد تعداد لغات و دستور زبان‌های یکسانی از زبان فارسی را می‌دانند؟ آیا همۀ آن‌ها به تمام ضرب‌المثل‌های زبان فارسی مسلط هستند؟ قطعاً پاسخ این سوال منفی است.

مرورگرهای وب نیز در این مورد مثل ما آدم‌ها هستند. این درست است که تمام موتورهای جاوا اسکریپت مرورگرها، جاوا اسکریپت را می‌فهمند، اما بعضی از آن‌ها سریعتر و بهتر عمل می‌کنند.

اگر یادتان باشد، گفتیم که Ecma Script یک سری شناسه و مشخصات است و زبان‌های اسکریپت نویسی می‌توانند از آن تبعیت کنند و مشابه آن باشند. خب، با این حساب بروزسانی ECMASCRIPT و ارائه نسخه‌های جدید آن به این معنی نیست که تمام موتورهای جاوا اسکریپت یک دفعه تمام ویژگی‌های نسخه جدید را کسب می‌کنند. در واقع این پشتیبانی مرورگر است که تصمیم می‌گیرد موتور جاوا اسکریپت با استاندارهای آخرین نسخه اکما اسکریپت سازگار شود یا نه.

سوالی که معمولاً برای اکثر توسعه‌دهندگان وب ایجاد می‌شوند این است که "مرورگر کدام نسخه ECMASCRIPT را پشتیبانی نمی‌کند، یا "کدام ویژگی‌های نسخه جدید ECMASCRIPT توسط این مرورگر پشتیبانی نمی‌شوند؟"

در واقع این توسعه دهندگان عزیز می‌خواهند بدانند که اگر گوگل، موزیلا یا مایکروسافت بخواهند موتور جاوا اسکریپت مرورگرشان را به روز رسانی کنند، چه ویژگی‌های جدیدی از ECMASCRIPT جدید به آن‌ها اضافه می‌شود.

نکته‌ای که در مورد مرورگرها وجود دارد این است که وقتی ECMASCRIPT به روز رسانی می‌شود، آن‌ها تمام ویژگی‌های نسخۀ جدید را به صورت یک جا دریافت نمی‌کند. مرورگرها دستورات جدید اکما اسکریپت را به تدریج به دستورات قبلی اضافه می‌کنند. برای مثال تصویر زیر بخشی از تغییرات جاوا اسکریپت در مرورگر فایرفاکس را نشان می‌دهد.

تفاوت پشتیبانی مرورگرها از زبان‌های مختلف

همانطور که می‌بینید، بخشی از تغییرات مربوط اکما اسکریپت سال 2015 و بخشی دیگر مربوط به نسخه ارائه شده در سال 2017 است.

محیط RUNTIME جاوا اسکریپت

ما دو نوع آبجکت یا شیء در جاوا اسکریپت داریم:

آبجکت محلی یا Native Object: به اشیائی مثل آرایه متنی، رشته، عدد و ... که در تمام نقاط برنامه قابل دسترسی هستند و روی تمام مرورگرها در تمام سیستم عامل‌ها کار می‌کنند آبجکت یا شی محلی می‌گویند. این اشیا در ECMA Script تعریف شده‌اند.

آبجکت هاست یا Host Object: اشیا یا آبجکت‌هایی هستند که در محیط میزبان (در این‌جا مرورگر)، برای کامل کردن محیط Runtime اکما اسکریپت تعریف می‌شوند. Document، Window، HTML و Form نمونه‌ای از هاست آبجکت هستند.

توجه:هر آبجکتی که Native نباشد، Host Object است.

محیط RUNTIME جاوا اسکریپت

خب، حالا برسیم به تعریف Runtime: به محیطی که در آن کدهای جاوا اسکریپت اجرا شده و توسط موتور جاوا اسکریپت تفسیر می‌شوند، محیطِ Runtime جاوا اسکریپت می‌گویند. برای مثال Node.js و Chrome هر دو محیط‌های Runtime هستند.

هر مرورگری (از جمله کروم، فایرفاکس و سافاری) یک JS Runtime Environment یا محیط اجرای جاوا اسکریپت دارد. در این محیط یک سری API وب وجود دارد که توسعه دهنده می‌تواند به آن‌ها دسترسی داشته باشد و برنامه بنویسد..

یک نکتۀ جالب: کروم و نود.جی‌اس خودشان با c++ نوشته شده‌اند ولی وظیفۀ اجرای کدهای دیگری از جمله جاوا اسکریپت را بر عهده دارند.

ECMAScript 6 چیست؟

بسیار خب، الان دیگر می‌دانید جاوا اسکریپ و اکما اسکریپت چه هستند و چه ارتباطی با مرورگرهای وب دارند، پس بیایید برویم سر اصل مطلب، یعنی ECMAScript 6!

  • ECMAScript 6، ششمین نسخه از استاندارد ECMA-262 است و نسبت به نسخه اولیه آن دچار تغییر و تحولاتی زیادی شده است. ECMAScript 6 را با نام‌های ECMA-2015، ES6 و ECMAScript 2015 نیز می‌شناسند.
  • دلیل این نام‌گذاری‌های مختلف این است که اکما تصمیم گرفته بود اکما اسکریپت را به شکل سالانه به روز رسانی کند و چون ممکن بود کاربران ES6 را با ES2016 اشتباه بگیرند، به جای ES6 نام ES2015 برای آپدیت رسمی سال 2015 انتخاب کرد.

Babel چیست؟

بابل، یک مبدل است که می‌تواند کدهای ES6 را به کدهای ES5 تبدیل کند.

بله، درست است که توسعه دهندگان وب می‌توانند از ویژگی‌ها و دستورالعمل‌های جدید ES6 استفاده کنند، اما همیشه کمی نگرانی بابت هماهنگی این کدها با مرورگرهای مختلف وجود دارد. برای مثال هنوز که هنوز است دو مرورگر اینترنت اکسپلورر و Edge مایکروسافت، به طور کامل از کدهای ES6 پشتیبانی نمی‌کنند.

توسعه دهندگان می‌توانند برای اینکه از این بابت نگرانی نداشته باشند با استفاده از Babel می‌توانند کدهای مبتنی بر ES6 را با ویژگی‌های ES5 معادل‌سازی کنند.

خداحافظی موقت

خب دوستان، قصد من در این مقاله این بود که شما را با اکما اسکریپت، ارتباط آن با جاوا و مسائل پیرامون این دو آشنا کنم. کار ما هنوز با ECMAScript و JAVAScript تمام نشده و این تازه شروع کار است. در مقالات بعدی می‌خواهیم به شکل تخصصی‌تر این مباحث را مورد بحث قرار دهیم و با نحوه کدنویسی نویسی و قواعد و قوانین آن نیز آشنا شویم. تا آن زمان خواهش می‌کنم راحت باشید و هر سوالی و نظری که دارید همین‌جا مطرح کنید.

توجه داشته باشید که نظر شما پس از تایید مدیر در سایت نمایش داده خواهد شد.
علیرضا
4 ماه پیش
عالی بود، خیلی عالی بود :)