ماژولها در ES 6
هدف از سیستم ماژولها در ES 6 ، مدیریت بهتر تعدادی قطعه کد جاوا اسکریپتی، به صورت یک واحد مشخص است. همچنین ماژولها امکان مخفی کردن قسمتهایی از کد را که نباید به صورت عمومی در دسترس قرارگیرند، نیز میسر میکنند. این مسایل سالها آرزوی برنامه نویسان جاوا اسکریپت بودهاند و برای برآورده کردن آنها به روشهای غیراستاندارد و کتابخانههای ثالثی روی آورده بودند. به همین جهت برای آشنایی بهتر با ماژولها در ES ...
در ES 5 تنها آرایه (Array) و آبجکت (Object) را به عنوان ساختار دادهایی، به صورت توکار در اختیار داریم. Array یک کالکشن مبتنی بر ایندکس است. همچنین میتوان هر نوع مقداری را در آن ذخیره کرد: var collection = ['a', 1, /3/, {}];
یعنی هر کدام از اعضای آرایه میتوانند جنس متفاوتی داشته باشند. همانطور که در کد فوق مشاهده میکنید اعضای آرایه به ترتیب از کاراکتر، عدد، عبارت با قاعده و در نهایت یک شیء خال ...
Generators در حقیقت نوعی Iterator هستند. آنها نوع خاصی از توابع هستند که قابلیت تعلیق و از سرگیری مجدد را دارند. برای رسیدن به این هدف، اینبار تعریف function به صورت * function خواهد بود و در آن برای بازگشت مقادیر، از واژهی کلیدی yield استفاده میشود.
یک نمونه مثال ابتدایی از Generators را در کدهای زیر مشاهده میکنید: function* generator () {
yield 1;
// pause
yield 2;
// pause
yield 3;
// p ...
رسمیترین زبانهای شیء گرا از کلاسها و وراثت مربوط به آنها پشتیبانی میکنند؛ ولی از زمانی که JavaScript ساخته شد، به دلیل نداشتن کلاسها باعث سردرگمی بیشتر توسعه دهندهها شد. برای آشنایی با مباحث شیء گرایی در جاوااسکریپت ^ و ^ را مطالعه کنید. در واقع کلاسها در ES 6 هم واقعا مانند کلاسها در سایر زبانها نبوده و صرفا یک syntax آسان بر فراز روشهای پیاده سازی انواع دادههای شخصی در ورژنها قبلی میباشند. این syntax به معنای تول ...
در مطلب Iterators به بررسی حلقههای for of پرداختیم. اما سؤال مهم اینجا است که for of چگونه یک iterator را پیدا میکند و چه چیزی سبب میشود تا بتواند این پیمایش را انجام دهد؟ پاسخ به این سؤال نیاز به آشنایی با مفهوم جدیدی در ES 6 به نام Symbols دارد.
Symbol یک primitive data type جدید در ES 6 است؛ دقیقا مانند اعداد، Boolean، رشتهها و امثال آنها. دو نکتهی مهم در مورد Symbols وجود دارد:
الف) منحصربفرد و immutable ( ...
یکی از اهداف ES 6 ، استاندارد سازی کار با Iterators و Iterables است. فرض کنید شیءایی را داریم که مجموعهای از عناصر را در بر دارد. این مجموعه میتواند آرایهای از عناصر باشد و یا set و map اضافه شده به ES 6 و یا حتی اشیایی که در زمان اجرا ایجاد میشوند. اگر این مجموعه Iterable باشد، حرکت بر روی آن یک Iterator را تولید میکند که امکان حرکت در این مجموعه را آیتم به آیتم میسر خواهد کرد:
هر Iterator شیءایی است که د ...
در زبانهای برنامهنویسی مانند سیشارپ و یا جاوا میتوانیم از Reflection جهت خواندن متادیتاها استفاده کنیم. به عنوان مثال امکان تعریف پراپرتی و یا متدها و حتی تایپهایی در زمان اجرا را در اختیارمان قرار میدهد. اما از آنجائیکه جاوا اسکریپت یک زبان داینامیک است، این قابلیت کمتر مورد توجه قرار گرفته است. در جاوا اسکریپت حین کار با کلاسها و اشیاء، ممکن است نیاز داشته باشید تا از اعضای یک کلاس
کوئری بگیرید و یا اینکه یک سری پراپرتی و متد ...
Destructuring assignment این امکان را به ES 6 اضافه کردهاست تا بتوان خواص یک شیء یا اعضای یک آرایه را با سهولت بیشتری به متغیرها نسبت داد و نگارش آن بسیار شبیه است به تعریف اشیاء یا آرایهها در جاوا اسکریپت.
Destructuring Arrays
بدون استفاده از Destructuring assignment برای دسترسی به اعضای یک آرایه و انتساب آنها به متغیرهای مختلف، روش متداول زیر مرسوم است: var first = someArray[0];
var second = someArra ...
در بیشتر زبانهای برنامهنویسی قابلیتی تحت عنوان String Interpolation وجود دارد. منظور، فرآیند جایگزین کردن مقادیر، با یکسری placeholder درون یک رشته است. در نسخههای قبلی جاوا اسکریپت محدودیتهایی در استفاده از رشتهها وجود داشت و امکان انجام این کار به صورت توکار مهیا نبود. یعنی برای پیادهسازی این قابلیت میتوانستیم با تغییر prototype شیء String و یا روشهای دیگری اینحالت را پیادهسازی کنیم ( + ): // First, checks if it isn't ...
در ES 6 تغییراتی جهت ساده سازی خواندن، نوشتن و همچنین بالا بردن امنیت متغیرها و پارامترها صورت گرفتهاند، تا دیگر شاهد یک سری رفتارهای عجیب و غریب، در حین کار با متغیرهای جاوا اسکریپتی نباشیم.
واژهی کلیدی let
تاکنون به کمک واژهی کلیدی var امکان تعریف متغیرها در جاوا اسکریپت مهیا بودند. برای نمونه در مثال زیر، متغیر x داخل بدنهی if با استفاده از var تعریف شدهاست: var doWork = function(flag){ ...