جاواسکریپت و اصطلاحات زیاد آن

اگر به کمک جاواسکریپت برنامه‌ای نوشته باشید حتما با اصطلاحاتی مثل es, typescript, babel, webpack و چیزهایی مثل اینها برخورد داشته اید؛ شاید بطور تجربی مفهوم این اصطلاحات را بدانید و روزانه آنها را به کار ببرید اما چطور میتوانیم از هر کدام تعریف دقیق تری برای خودمان داشته باشیم؟به عنوان مقدمه اصلا جالب نیست که بدانیم که ECMA نسخه استانداردسازی شده از جاوااسکریپت است که در سال 2011 منتشر شد و شماره 5 به آن نسبت داده شد، چون در همه مقاله ها و ویدیوهای آموزشی به شکل دیوانه واری به این نکته اشاره شده است.در سال 2015 نسخه ششم به نام ES6 منتشر شد و به آن ECMAScript 2015 هم می‌گویند.تا همینجا به نظر این نامگذاری ها عجیب است و شاید ریشه در بی صاحب بودن این زبان برنامه نویسی دارد!برای درک بهتر بی‌صاحب بودن این زبان این چند خط تاریخچه تکراری را بخوانید:این زبان در سال 1995 متولد شد متعلق به شرکت netscape بود و نامش livescript گذاشته شد، اما چون محبوبیت زبان java زیاد شده بود این شرکت تصمیم گرفت نام livescript را به javascript تغییر دهد. سال 1996 این زبان در سازمان استانداردسازی ECMA ثبت شد و نهایتا به اسم ECMAscript تغییر نام داد و به نام جاوااسکریپت استفاده میشود!اکمااسکریپت 6 نسخه جدید جاوااسکریپت است.جاوااسکریپتی که این روزها استفاده میشود ES6 است و در مرورگرهای قدیمی پشتیبانی نمی‌شود. این نسخه فیچرهای جالب و به روزی دارد. مثل کلاس ها و استفاده از توابع فلِشی (شاید به نام لامبدا شنیده باشید) که در اکثر زبان های مدرن وجود دارند.تایپ اسکریپت سوپرستی برای جاوااسکریپت است.اما تایپ اسکریپت (Typescript) هیچ ارتباطی با روند توسعه جاواسکریپت ندارد. تایپ اسکریپت را مایکروسافت توسعه میدهد و آن را یک سوپرست (superset) می‌نامند، یعنی یک زبان کمکی است که بوسیله آن به شکل مدرن کدنویسی می‌کنید، از کلاس و تایپ ها و اینترفیس ها و تمامی ویژگی های مدرن برنامه نویسی در کدهایتان بهره میبرید ولی در نهایت کد شما به خودِ جاوااسکریپت کامپایل میشود و برای مرورگر قابل درک خواهد بود.فیچرهای درون تایپ اسکریپت چیزی به هسته جاوااسکریپت اضافه نمیکنند ولی با ابزاری که در اختیار برنامه نویس قرار میدهد توسعه را سریع و قابل تست و منسجم می‌کند.مهمترین ویژگی تایپ اسکریپت همانطور که از اسمش پیداست وجود تایپ است. جاوااسکریپت ذاتا "داینامیک تایپ" است، یعنی وقتی متغیری میسازید نیازی نیست بگویید چه نوعی است.(استرینگ است یا عدد یا ...)متغیرها در جاوااسکریپت هر نوع دیتایی را در خود نگه می‌دارند، یعنی شما یک متغیر استرینگی دارید و بعدا به آن عدد نسبت می‌دهید و هیچ مشکلی پیش نمی‌آید. این ویژگی توسعه کد را کُند می‌کند. کنترل ورودی های فانکشن و اینکه مقادیر متناسب استفاده می‌کنید از عهده تایپ اسکریپت بر می‌آید ولی جاوااسکریپت روی هوش شما حساب می‌کند که برای پروژه های بزرگ و چند نفره چندان منطقی نیست.بِیبل (Babel) چیست؟ وظیفه تبدیل ES6 به ES5 را به عهده دارد. وقتی برای توسعه برنامه خود از ورژن 6 جاوااسکریپت استفاده میکنید، خروجی شما روی همه مرورگرها قابل اجرا نخواهد بود. برای تبدیل کد خود به کد قابل فهم برای همه مرورگرها لازم است از babel استفاده کنید. بیبل را یک ترنسپایلر(Transpiler) میگویند.وب پک (webpack) چیست؟ وب پک یک باندلر (Bundler) است. به کمک این ابزار، کد شما که معمولا چندین فایل js است به یک فایل یکپارچه قابل تبدیل خواهد شد. وب پک به این روش عمل میکند که فایل های شما را اسکن میکند و میفهمد کدام ها به هم مرتبط هستند و همه اینها را در یکپارچه سازی لحاظ میکند و یک فایل تولید میکند که شرایط بهتری برای پابلیش دارد. نکته اصلی وب‌پک اینجاست که در طول این عملیات باندلینگ، ما میتوانیم از پلاگین های مختلفی استفاده کنیم. مثلا از پلاگین babel برای تبدیل کدمان به ES5 استفاده می‌کنیم که باندل ما قابل درک برای همه مرورگرها باشد. یا اگر با تایپ اسکریپت پروژه را توسعه می‌دهیم از پلاگین تایپ اسکریپت استفاده کنیم که کد ما را به جاوااسکریپت تبدیل کند. میتوانیم از پلاگین های بهینه سازی استفاده کنیم که فایل خروجی ما را کوچک تر کنند. به این عمل minifying می‌گویند. وب پک جایگزینهای قدیمی تری مثل Grunt و Gulp دارد که شاید با آنها آشنا باشید. جی کوئری محبوبترین و پر استفاده ترین کتابخانه جاوااسکریپتجی کوئری (Jquery) یک کتابخانه معروف برای کار با المان های صفحات Html است. شما به کمک جاوااسکریپت خالص به سختی می‌توانید المان های صفحه را مثل موم در دستانتان داشته باشید و آنها را فراخوانی کرده و یا تغییر دهید، در صورتی که جی کوئری یک اینترفیس با متدهای ساده و حفظ شدنی برای دسترسی به المان های صفحه است.فریم ورک های محبوب جاوااسکریپتفریم ورک های Vueو Angular و React را می‌توان فریم ورک هایی برای توسعه front-end دانست که بر اساس زبان جاوااسکریپت نوشته شده اند. (البته React را بیشتر کتابخانه می‌دانند تا یک فریم ورک) . اما چه زمانی چه کتابخانه و چه فریم ورکی بهینه ترین است؟ و یا اصلا چرا از یک فریم ورک باید استفاده کرد؟امیدوارم در آینده در مورد این موضوع هم چیزهایی بنویسم.