جاوا اسکریپت: زبانی برای تمام فصول

برندن آیک (Brendan Eich)؛ همه چیز از همیجا شروع شد. شاید زمانی رو یادتون نیاد که خیلی برای فرار از اینترنت اکسپلورر مایکروسافت میرفتن سراغ یه مرورگر باکلاس به اسم Netscape. اینترنت اکسپلورر روی سیستم های ویندوزی لاگینی هایی به اسم ActiveX داشت که اجازه می داد اسکریپت های خاصی رو اجرا کنی. نت اسکیپ هم برای اینکه توی این بازار استانداردی رو پایه گذاری کنه شروع کرد به ایجاد یه زبان اسکریپت. اما این زبان خیلی شبیه به جاوا (Java) شده بود. برندن به عنوان برنامه نویس نت اسکیپ زبانی طراحی کرد که سینتکس هاش (Syntax) شبیه جاوا بود اما ساختار شیئ گرایی مخصوص به خودش رو داشت و اسمشو گذاشتن Mocha.سال 1995 به LiveScript تغییر نام پیدا کرد و در نهایت با مشارکت شرکت سان مایکروسیستم (Sun Microsystems) به JavaScript تغییر کرد. سال 1998 وقتی موزیلا (Mozilla) کد بیس مرورگر نت اسکیپ رو خرید، موتور اصلی نرم افزار رو از سی (C) تبدیل به جاوا اسکریپ نسخه 1.5 و البته منطبق با استاندارد ECMA-262 کرد.جاوا اسکریپتجاوا اسکریپت یه زبان برنامه نویسی Interpreted چندمنظوره آکولاد محور (Curly Braces) با قابلیت پشتیبانی از شیئ گرایی (Object Oriented) و وراثت مبتنی بر پروتوتایپ (Prototype Inheritance) هست که توابع در اون شهروند درجه یک (First-Class Citizen) هستن! اجازه بدید یه کم ساده تر بگیم:جاوا اسکریپت زبان برنامه نویسی هست که عمدتا برای محیط وب استفاده میشه و تقریبا در تمام مرورگرهای معتبر پشتیبانی میشه. هرچند در محیط های غیر وب مثل سرور و دسکتاپ هم نفوذ کرده.جاوا اسکریپ، زبانی هست که در زمان اجرا، همزمان به زبان ماشین ترجمه و بعد اجرا میشه. یعنی نیاز به کامپایل شدن نداره. البته این موضوع برای بعضی حالت ها مثل فریم ورک ها و کتابخانه هایی که برای سرور استفاده میشن کمی فرق میکنهبرای نوشتن کد جاوا اسکریپت الزاما نیاز به نرم افزار خاصی نیست و داخل نوت پد (Notepad) هم میشه کد مورد نظرمون رو نوشت. برای آزمایش کد جاوا اسکریپ، کافیه مرورگر کروم خودتون رو باز کنید و روی یک صفحه کلید F12 رو بزنید. در صفحه ای باریکی باز میشه، در قسمت کنسول (console) این دستورات رو به ترتیب وارد کنید و کلید Enter رو بزنید. یادتون باشه، انتهای هر دستور حتما سمیکالن (;) داشته باشید:var name = 'Keanu Reeves'; console.log('Hi, this is ', name);با اجرای این دستورات میبینید که جمله "Hi, This is Keanu Reeves" نمایش داده میشه.کد جاوا اسکریپتکدهای جاوا اسکریپ بسیار شبیه کد جاوا و سی هست. البته تفاوت هایی هم با هم دارن. برای مثال اینکه نوع متغییر در اون داینامیک (Dynamically Typed) هست. یعنی برای تعریف یک متغییر نیاز به تعریف نوع اون نیست و با توجه به مقداری که بهش داده میشه، نوع متغییر هم معین میشه. برای مثال متغییر زیر اول از نوع رشته بوده ولی بلافاصله میتونه به نوع عددی تبدیل بشه. میتونید در کنسول مرورگر با اجرا کردن دو خط ابتدای در یه مرحله و دو خط دوم در مرحله بعدی، نوع متغییر رو ببینید که از رشته با عدد تبدیل شده:var a = '3'; typeof a; a = 3; typeof a;این یعنی جاواسکریپت زبانی با نوع پذیری دینامیک و ضعیف (Loosely Dynamically Typed) هست. البته منظور از ضعیف، ضعف در زبان نیست!برای ایجاد یک تابع، در پایه ای ترین حالت باید از کلمه function به همراه اسم تابع، پارامترها ورودی در پرانتر و در نهایت آکولاد برای نوشتن کد استفاده کرد:function getPrice(item) { //... code }برای ایجاد یک شیئ نیز باید از قانون آکولاد پیروی کرد:var item = { name: 'laptop', price: 5000 }در مورد ایجاد آرایه، از براکت استفاده میشه:var colors = ['red', 'green', 'blue']در صورتی که بخواهیم کلاسی رو ایجاد کنیم، مثل زبان های شیئ گرای دیگه میتونیم از کلمه class استفاده کنیم:class Aminals { constructor(name) { this.name = name } getName() { return this.name; } }عجایب جاوا اسکریپتاگه از زبان های برنامه نویسی دیگه ای مثه سی یا جاوا و مشابه اون سراغ جاوا اسکریپت اومده باشید، به مواردی برمیخورید که ممکنه براتون گیج کننده باشه. چند مورد رو اینجا با هم بررسی می کنیم.همه چیز در جاوا اسکریپت شیئ هست: وقتی از شیئ حرف میزنیم، یعنی باید دارای property و method باشه. با یه مثال توضیح میدیم:var brand = 'Nissan'; typeof brand;همه میدونیم نوع متغییر brand از نوع رشته هست. حالا اینجا رو ببینیم:brand.length;متد length طول رشته رو برمیگردونه! متد؟!؟ اگه نوع متغییر رشته هست، پس چرا متد داره؟! نکته اینجاست که خود نوع رشته هم از یک کلاس بالاتر به نام String داره وراثت میگیره. بنابراین، متدهای String هم برای زیرمجموعه اون معتبره. پس میتونیم بگیم همه چیز در جاوا اسکریپ شیئ هست. این شامل آرایه، تابع، کلاس، رشته، عدد و خود شیئ هم میشه. در نهایت تمام این اشیاء به شیئ مادر یعنی Object برمیگردند.توابع شهروندان درجه یک هستند: در جاوا اسکریپت، توابع جایگاه خاصی دارند. شما می تونید یک تابع رو داخل یک متغییر بریزید و یا از داخل یک تابع، یک تابع دیگه رو به عنوان مقدار برگردونید. حتی میتونید تابع رو به عنوان پارامتر یه تابع در زمان فراخوانی به صورت آرگومان به اون تابع ارسال کنید.یکی از مهمترین و پر کاربردترین بخش ها در جاوا اسکریپت، همین موضوع برگردوندن تابع به عنوان یه مقدار از درون تابع دیگه هست چه مفاهیم پیچیده ای همچون Closure رو مطرح میکنه.فرض کنید تابعی داریم که میخوایم بدون اینکه به داخل تابع دسترسی داشته باشیم، به طریقی بتونیم متغییری رو از اون بخونیم. به عبارت دیگه، تعداد بازدید یه سایت رو میخوایم بخونیم، بدون اینکه اجازه داشته باشیم متغییر اولیه رو دستکاری کنیم:function counter() { let count = 0; function increase() { count++; return count; } return increase; } var myCounter = counter(); console.log(myCounter()); console.log(myCounter());در کد بالا، تابع counter یک بار اجرا شده و تموم میشه و مقدار برگشتی اون که خودش یک تابع هست داخل myCounter ریخته میشه. با وجود اینکه تابع counter کارش تمام شده، اما ما بواسطه مقدار برگشتی اون همچنان به مقدار count داخل تابع مادر دسترسی داریم و میتونیم اونو افزایش بدیم! این مفهوم closure هست. درک closure و استفاده از اون در کد نیاز به تمرین و مطالعه زیادی داره. به طور معمول، این روش در حالت برنامه نویسی تابع محور (Functional Programming) استفاده میشه که قدرت بسیار زیادی در اختیار برنامه نویس قرار میده.جاوا اسکریپت، لباس فری سایز One Size Fits Allزبان جاوا اسکریپت تنها به مرورگر ختم نمیشه و چه بسا در همون مروگر هم فقط به کدهای داخل html محدود نمیشه. جاوا اسکریپت در فضای وب فریم ورک ها و لابرری های بسیار قدرتمندی داره که کار برنامه نویسی رو بسیار راحت تر کرده و باعث شده خروجی زیباتر و قوی تری در اختیارمون بگذاره. در محیط سرور، یکی از قدرتمندترین و پرسرعت ترین سرورها رو ارائه میده به شکلی که شرکت های بزرگ هم از اون استفاده می کنند. اما قضیه باز هم ادامه داره! اپلیکیشن های موبایل و حتی ویندوز هم با جاوا اسکریپ نوشته میشن که سرعت بسیار بالایی دارند.جاوا اسکریپت در وببرای سهولت استفاده از جاوا اسکریپت و افزایش تمرکز برنامه نویس در کیفیت خروجی کد، فریم ورک ها و لابرری هایی وجود دارند تا قدرت بیشتری در اختیار برنامه نویس قرار دهند. فریم ورک هایی مثل ReactJs، AngularJs و VueJs از معروف ترین ها هستن. در ساخت وب اپلیکیشن های Dropbox، Facebook، Instagram و Netflix از فریم ورک Reactjs استفاده شده است.جاوا اسکریپت در موبایلاز مهمترین فریم ورک های تولید اپلیکیشن نیتیو (Native) برای موبایل، React Native و Flutter هست که در واقع همون ReactJs باضافه امکاناتی برای ایجاد دسترسی به منابع تلفن هوشمند هست. بنابراین، اگه ReactJs رو یاد بگیرید، به راحتی میتونید به سمت React Native هم برید. اپلیکیشن ایسنتاگرام مشخصا با این فریم ورک برای نسخه iOS و Android نوشته شدجاوا اسکریپت در سروروقتی صحبت از سرور میشه، خیلی از افراد به سختی می پذیرن که جاوا اسکریپت هم میتونه به عنوان سرور انتخاب بشه. نود جی اس (NodeJs) نمونه بارز برخلاف این تصوره که در بسیاری از پروژه ها داره استفاده میشه. NodeJs یه سرور وب پرسرعت برای ارائه API هست که کدهای جاوا اسکریپ رو بوسیله یه موتور قوی نوشته شده با سی پلاس پلاس (++C) به نام V8 Engine اجرا میشه. بخشی از کدهای جاوا اسکریپت به صورت Interpreted و بخشی هم به صورت compiled اجرا میشن که سرعت بسیار بالایی در تبادل اطلاعات ایجاد میکنه. Paypal، Uber، Netflix و Linkedin اسامی برخی از این غولهایی هستن که از NodeJs در پلتفورم خودشون استفاده می کنن.جاوا اسکریپت در دسکتاپاین مورد آخری چیزی هست که خیلیا رو متعجب میکنه. اما جاوا اسکریپ بواسطه فریم ورک هایی که ایجاد شده تونسته به فضای دسکتاپ هم نفوذ کنه. معروفترین فریم ورک در این زمینه الکترون (ElectronJs) هست. اپلیکیشن های زیادی مثل WhatsApp، Spotify و VSCode با استفاده از این فریم ورک ساخته شدند.یادگیری جاوا اسکریپتجاوا اسکریپت هم سخته و هم آسون! بله... این واقعیت جاوا اسکریپته. اگر بخواید در حد بالایی روی جاوا اسکریپت مسلط بشید، باید براش وقت بگذارید. جاوا اسکریپت رو در سه سطح مبتدی، مدرن و پیشرفته باید دنبال کنید. هر یک از این مباحث، بویژه سطح پیشرفته مطالب پیچیده ای داره که باید روش مطالعه و تمرین کافی داشته باشید.از این اواسط راه یادگیری و تمرین و پس از تسلط نسبی، توصیه میکنم حتما سراغ تایپ اسکریپت (TypeScript) که تکمیل شده جاوا اسکریپت توسط مایکروسافت که ویژگی هایی مثه Type و Interface بهش اضافه شده برید.یادتون باشه اینکه سراغ کدوم پلتفورم برید (وب، سرور، موبایل و دسکتاپ) بستگی به مسیر کاری خودتون داره و نه توصیه من یا دیگری. هرچند میتونید از این راهنمایی ها بهره ببرید.