مقدمه
با وجودی که جاوااسکریپت در ابتدا به عنوان یک زبان اسکریپتنویسی برای پیادهسازی در
مرورگرهای وب معرفی شد، اما امروز به عنوان یک زبان برنامهنویسی چندمنظوره توسط گروههای
مختلفی از برنامهنویسان و توسعهدهندگان استفاده میشود. در این درس، به برخی از مهمترین
حوزههای کاربرد جاوااسکریپت و انواع برنامههای قابل تولید با این زبان اشاره میکنیم.
APIهای جاوااسکربپت
برای درک ماهیت جاوااسکریپت و حوزههای کاربرد آن باید با مفهومی با نام API آشنا باشیم.
API
اختصاری است برای Application Programming Interface که معادل فارسی آن رابط برنامهنویسی
اپلیکیشن است. یک API واسطی است که باعث میشود تا یک برنامهنویس بتواند کاری را که در
حالت عادی انجام آن مشکل یا غیرممکن است، به راحتی انجام دهد.
وقتی ما به زبان ماشین برنامهنویسی میکنیم، هیچ واسطی بین ما و سختافزار وجود ندارد و ما
مستقیماً برای سختافزار کد مینویسیم و این تنها جایی است که ما بلاواسطه و بدون API
کدنویسی میکنیم اما حتی هنگام کدنویسی با استفاده از زبان اسمبلی نیز پای یک واسط به نام
اسمبلر در میان است. یعنی ما برای اسمبلر برنامه مینویسیم نه برای ماشین و این اسمبلر است
که کد ما را به کد ماشین تبدیل میکند.
هنگام برنامهنویسی با استفاده از یک زبان سطح بالا، لایههای بیشتری بین ما و سختافزار
قرار میگیرند و ما معمولاً روی بالاترین لایه کدنویسی میکنیم و هر لایه کار ترجمه برای
لایهی پایینی را تا رسیدن به پایینترین لایه یعنی سختافزار انجام میدهد. با این حساب،
حتی هستهی یک زبان برنامهنویسی نیز یک API است. در واقع، هستهی زبان جاوااسکریپت یک API
مینیمال شامل امکانات لازم برای کار با اعداد، رشتههای متنی، آرایهها و نوعهای دادهای
دیگر است و امکانات مربوط به عملکردهایی مانند I/O و برنامهنویسی گرافیکی و برنامهنویسی
شبکه و نظایر اینها در هستهی جاوااسکریپت وجود ندارد. اینگونه ویژگیها و امکانات توسط
محیط میزبان جاوااسکریپت فراهم میشوند. اینکه در یک صفحهی وب، ورودی کاربران از طریق ماوس
و کیبورد کاربر و یا درخواستهای HTTP دریافت شده و خروجی توسط HTML و CSS نمایش داده
میشود، امکانی است که مرورگر به عنوان محیط میزبان فراهم میکند.
به طور خلاصه میتوان گفت: جاوااسکریپت یک زبان برنامهنویسی است که چندین API و کتابخانه
برای آن ایجاد شده که استفاده از این زبان را در حوزههای مختلف ممکن میکند. در واقع، هر
زبانی برای اینکه کاربردی بوده و بتواند مفید واقع شود، باید دارای یک پلتفرم یا کتابخانهی
استاندارد (standard library) برای انجام اموری مانند عملیات پایهای ورودی و خروجی (I/O) و
برنامهنویسی گرافیکی و اعمالی از این دست باشد. علاوه بر کتابخانهی استاندارد،
کتابخانههای متعدد دیگری نیز توسط افراد و شرکتهای مختلف ایجاد شده و میشود که استفاده
از یک زبان را برای امور مختلف ممکن میکنند.
جاوااسکریپت در سمت کاربر
اصلیترین حوزهی کاربرد جاوااسکریپت، برنامهنویسی وب است. برنامهنویسی وب شامل دو بخش یا
قلمروی متفاوت است: برنامهنویسی سمت کاربر و برنامهنویسی سمت سرور. برنامهنویسی سمت
کاربر (client-side) شامل کدهایی است که روی سیستم کاربر تفسیر و اجرا میشوند و نیازی به
برقراری ارتباط با یک سرور راه دور ندارند. در برنامهای که صرفاً با استفاده از کدهای سمت
کاربر نوشته شده باشد، همهی اتفاقات روی سیستم کاربر رخ میدهد و این مرورگر کاربر است که
هم کدها را تفسیر کرده و هم نتیجه را نمایش میدهد. اما برنامهنویسی سمت سرور شامل کدهایی
است که روی یک سرور راه دور پردازش و اجرا شده و نتیجه برای مرورگر ارسال میشود. اکثر
برنامههای وب به ترکیبی از هر دو نوع کد سمت کاربر و سمت سرور نیاز دارند. جاوااسکریپت
زبانی است که میتواند هم برای کدنویسی سمت کاربر و هم برای کدنویسی سمت سرور مورد استفاده
قرار گیرد. اما با توجه به اینکه فلسفهی ابتدایی جاوااسکریپت این بود که در سمت کاربر و
برای ایجاد تعاملپذیری (interactivity) در صفحات وب به کار رود، ابتدا در مورد جنبهی
client-side این زبان صحبت میکنیم.
هر صفحهی وبی که کاری فراتر از ارائهی یک محتوای استاتیک انجام میدهد و به عنوان مثال،
محتوای خود را مرتباً بروزرسانی میکند، نقشههای تعاملی ارائه میدهد، گرافیکهای متحرک دو
یا سهبعدی دارد، به احتمال زیاد به جاوااسکریپت متکی است. در واقع، تا قبل از معرفی
جاوااسکریپت، صفحات وب امکان تعامل با کاربر را نداشتند و تنها قادر به ارائهی اطلاعات و
محتوا به صورت ایستا یا استاتیک بودند. صفحات وب استاتیک را میتوانیم ورژن دیجیتال اسناد و
روزنامهها و مجلهها بدانیم. ویژگی بارز این صفحات، ارائهی اطلاعات به صورت یکطرفه و
بدون قابلیت تعامل است. اما با معرفی جاوااسکریپت، امکان خلق صفحات پویا و دارای قابلیت
تعامل فراهم شد.
به این ترتیب، جاوااسکریپت به عنوان یک زبان اسکریپتنویسی که طراحان وب را قادر به
پیادهسازی امکانات و ویژگیهای پیچیده در صفحات وب میکرد، به یک جزء لاینفک طراحی وب در
سمت کاربر تبدیل شد. این روزها هم از جاوااسکریپت برای برنامهنویسی وب در سمت کاربر به شکل
گسنردهای استفاده میشود. از این منظر، جاوااسکریپت سومین طبقه از کیک تکنولوژیهای
استاندارد وب است. طبقات اول و دوم HTML و CSS هستند.
همانطور که گفتیم، هستهی جاوااسکریپت یک مجموعهی حداقلی از امکانات و قابلیتهایی برای کار
با نوعهای دادهای این زبان است و چیزی که استفاده از این زبان را در حوزههای مختلف
امکانپذیر میکند، کتابخانهها و APIهایی هستند که برای این زبان نوشته شدهاند. APIهای وب
در سمت کاربر در دو گروه جای میگیرند:
گروه اول که Browser APIs هستند، در مرورگرهای وب پیادهسازی میشوند و بنابراین، برای
استفاده از آنها نیازی به افزودن هیچ فایل و کتابخانهای به طور مستقیم و صریح نداریم. برخی
از این APIها عبارتند از:
- DOM یا Document Object Model یک API است که به ما امکان ویرایش HTML و CSS و ایجاد،
حذف یا تغییر HTML، اعمال استایل روی صفحه به طور دینامیک و کارهایی از این دست را
میدهد.
- Geolocation یک API دیگر است که اطلاعات جغرافیایی را بازیابی میکند. این API همان
چیزی است که Google Maps را قادر به پیدا کردن موقعیت مکانی کاربر و نمایش آن در قالب
یک نقشه میکند.
- Canvas و WebGL دو API هستند که ما را قادر به ایجاد گرافیکهای دو
و سه بعدی ثابت و
متحرک میکنند.
گروه دوم که Third Party APIs هستند، به طور پیشفرض در مرورگرها پیادهسازی نمیشوند بلکه
توسط افراد و شرکتهای ثالث ایجاد میشوند و بنابراین، برای استفاده از آنها باید فایل یا
فایلهای جاوااسکریپتی مربوطه را به صفحهی وب خود لینک کنیم. به عنوان مثال:
- Tweeter API ما را قادر به انجام کارهایی مانند نمایش آخرین توئیتها در وبسایت میکند.
- Google Maps API و OpenStreetMap API ما را قادر به نمایش نقشههای
دلخواه خود در صفحات
وب میکنند.
از میان APIهای سمت کاربر جاوااسکریپت، DOM از همه مهمتر است. DOM استانداردی است که از یک
ساختار درختی برای نمایش عناصر و صفتهای HTML استفاده میکند. البته تولید این ساختار
درختی بر عهدهی مفسر است و برنامهنویس دخالتی در آن ندارد. وقتی یک مفسر (مثلاً یک
مرورگر) صفحهی وبی را تفسیر میکند، یک ساختار درختی از روی آن ایجاد میکند. جاوااسکریپت
از این ساختار برای تغییر عناصر HTML و ویژگیهای CSS به صورت دینامیک استفاده میکند.
مطابق مستندات W3C تعریف DOM به این صورت است:
DOM یک رابط مستقل از زبان و پلتفرم است که به برنامهها و اسکریپتها این
امکان را میدهد که به طور پویا به محتوا، ساختار و شیوهی استایلدهی سندها دسترسی پیدا
کرده و آن را تغییر دهند.
بنابراین، بخش زیادی از قابلیتهای جاوااسکریپت در سمت کاربر مرهون DOM API است و البته
تعداد بسیار زیادی API دیگر نیز وجود دارد که هر یک برای انجام کار مشخصی ایجاد شدهاند.
کدنویسی محتاطانه با جاوااسکریپت
مطلب بسیار مهمی که هنگام کدنویسی سمت کاربر با جاوااسکریپت باید به آن توجه داشته
باشیم، لزوم رعایت اصلی به نام کدنویسی محتاطانه است. کدهای سمت کاربر جاوااسکریپت در
نهایت توسط مرورگر تفسیر و اجرا میشوند و کاربر به این کدها دسترسی دارد و کنترل
مرورگر نیز در اختیار کاربر است و مثلاً میتواند به راحتی موتور جاوااسکریپت مرورگر
خود را غیر فعال کند و این به معنای یک چالش و خطر امنیتی بالقوه است. بنابراین، باید
از نوشتن کدهایی که حاوی اطلاعات حساس هستند و کدهایی که اجرا نشدن آنها میتواند
مشکلآفرین باشد، اجتناب کنیم. برای انجام اعمالی مانند عملیات بانکی و یا ذخیرهی
اطلاعات کاربران در یک دیتابیس باید از کدنویسی سمت سرور استفاده کنیم.
جاوااسکریپت در سمت سرور
از سال 2010 و با معرفی Node.js این امکان فراهم شد که کدهای جاوااسکریپت را در خارج از
مرورگرها نیز اجرا کنیم. به این منظور، کافیست یک نسخه از Node.js را روی سیستم خود نصب
کنیم تا به این موتور رندرِ مستقل از مرورگر دست پیدا کنیم. Node.js یک محیط میزبان مستقل
برای اجرای کدهای جاوااسکریپت است که به پلتفرم وابسته نیست و روی سیستمعاملهای اصلی
یعنی ویندوز، لینوکس و مکینتاش اجرا میشود.
یک نتیجهی معرفی Node.js امکان نصب آن روی سرور و در نتیجه امکان استفاده از جاوااسکریپت
برای برنامهنویسی وب در سمت سرور بود. به این ترتیب، جاوااسکریپت تبدیل به زبانی شد که هم
در سمت کاربر و هم در سمت سرور قابل استفاده است. کدهای جاوااسکریپت در سمت کاربر توسط
مرورگر و در سمت سرور توسط Node.js تفسیر میشوند.
موفقیت دراماتیک Node باعث شد تا استفاده از جاوااسکریپت در بین توسعهدهندگان وب به بیشترین
حد خود برسد و برنامهنویسان زیادی به سمت این زبان گرایش پیدا کنند. به هر حال، این که هم
در سمت کاربر و هم در سمت سرور از زبان یکسانی برای کدنویسی استفاده شود، مزیت ویژهای به
حساب میرود.
جاوااسکریپت در خارج از وب
با وجودی که جاوااسکریپت به عنوان زبان برنامهنویسی وب شناخته میشود اما در سالهای اخیر
به لطف تولید کتابخانههای مختلف، امکان استفاده از این زبان برنامهنویسی برای تولید طیف
وسیعی از اپلیکیشنها فراهم شده است. به عنوان نمونه، کتابخانهی Electron.js امکان تولید
اپلیکیشنهای دسکتاپ گرافیکی را با استفاده از جاوااسکریپت فراهم میکند و یا کتابخانهی
React native امکان ساخت اپلیکیشنهای موبایلی را برای سیستمعاملهای اندروید و iOS با
استفاده از جاوااسکریپت به ما میدهد. علاوه بر اینها، کتابخانههای متعدد دیگری نیز وجود
دارد که تولید اپلیکیشنهای مبتنی بر هوش مصنوعی و یادگیری ماشین، ساخت رباتها و غیره را
با استفاده از جاوااسکریپت ممکن میسازند.
همچنین، مفسر جاوااسکریپت در مکانهای دیگری مانند نرمافزارهای Adobe Photoshop و Adobe
Acrobat و دیتابیسهای NoSQL مانند Apache CouchDB و محیطهای دسکتاپ کاملی مانند GNOME نیز
وجود دارد که استفاده از جاوااسکریپت را در این محیطهای بیرون از مرورگر نیز ممکن کرده
است. ActionScript نیز یک پیادهسازی دیگر از استاندارد ES است که در نرمافزار Adobe
Animate جاسازی شده است.