Async و جاوااسکریپت چیست
Async چیست؟
قبل از اینکه دربارهی تابع Async در جاوااسکریپت یا Asynchrony در برنامهنویسی بپردازیم اول درباره برنامهنویسی همگام و ناهمگام شرح می دهیم
برنامهنویس برای نوشتن کدهای یک صفحه از یک وبسایت شاید لازم باشد تا چندین هزار خط کد بنویسد. این کدها هرکدام عملکردها و و ظایف مشخص اما متفاوتی دارند. بعضیها مربوط میشوند به درخواستهایی از سرور و بعضیها را مرورگر اجرا میکند.
Synchronous Programming (برنامه نویسی همگام)
برنامهنویسی همگام یا عملکردهای همگام (Synchronous Operations) یا Blocking Programming زمانی اتفاق میافتد که اجرای کامل کدهایی (عملکردهایی) جلوی اجرای سایر کدها را میگیرد. یعنی دستور اجرای هیچ کد دیگری عملی نمیشود تا یک کار (Task) تمام شود. اگر به مثال بانک برگردیم، شما باید صبر کنید تا کارهای ۴ نفر جلویی شما تمام شود و بعد نوبت به شما برسد. آن ۴ نفر جلویی راه شما را بستهاند (بلاک کردهاند). البته برنامهنویسی همگام کاربردهای خودش را دارد. مهمترین کاربردش در ساختن Real-time Systems است. زبانهای Argus, Signal and Lustre از زبانهای خاص برنامهنویسی همگام هستند. سایر زبانها مثل جاوا و پایتون و #C نیز همگام هستند اما راههایی وجود دارد که بشود کدهای ناهمگام با آنها نوشت.
Asynchronous Programming (برنامه نویسی ناهمگام)
برنامهنویسی ناهمگام یا عملکردهای ناهمگام (Asynchronous Operations) یا Nonblocking Programming نقطهی مقابل اولی است. یعنی چند عملکرد و کد باهم میتوانند اجرا شوند و خللی در کار جریان اصلی اجرای کدهای نوشته هم ایجاد نکنند. دراینجا دیگر نوبت یا ترتیب معنا ندارد. مجموعه کدها بهموازات هم اجرا میشوند. مهمترین کاربرد این نوع از برنامهنویسی زمانی است که درخواستی از پایگاهداده (Database) میشود و نتیجهای باید از آن گرفت. بارگذاری بقیهی صفحه و اجرای سایر کدها متوقف نمیماند تا آن نتیجه برسد و آن کار تمام شود. تنها زبان برنامهنویسی که ناهمگام است و درهنگام اجرا در مرورگر ناهمگام عمل میکند، زبان جاوااسکریپت است.
جاوااسکریپت و برنامه نویسی Asynchronous
جاوااسکریپت (JavaScript or JS) زبان قدرتمند و توانمندی است که کتابخانههای زیادی دارد. فریمورکهای قدرتمندی هم دارد. یکی از معروفترین فریمورکهای سمت سرور این زبان که آنهم به شما امکان برنامهنویسی ناهمگام میدهد، فریم ورک Node است. ناهمگامی در جاوااسکریپت به این دلیل است که برنامهنویس میتواند ترتیب اجرای توابع (Functions) را کنترل کند. یعنی توابع براساسی که نوشته میشوند ممکن است خوانده نشوند. جاوااسکریپت دو امکان مهم برای کنترلکردن زمان اجرای توابع به برنامهنویس میدهد.
اولین امکان Callbacks در جاوااسکریپت است. برنامهنویس با این امکان میتواند وقتی تابعی اجرا شد از آن تابع بخواهد تا اجرای تابع دیگری را فراخواند (یعنی اجرای دومی شروع شود). امکان دوم به Async در JS یا Async/Await معروف است که با کمک JS Promises عملی میشود.
Async/Await در جاوا اسکریپت
در جاوااسکریپت شیئ (Object) بهنام Promise وجود دارد که میشود در درونش دو دسته کد را جای داد. کدهایی که باید اجرا شوند و نتیجهای را حاصل کنند (Producing code) و کدهایی که به آن نتیجه نیاز دارند و منتظر گرفتن آن نتیجه، که یا موفقیتآمیز است یا یک خطا، میمانند (Consuming code).
وقتی کلمهی Async قبلاز تابعی نوشته میشود، آن تابع باید یک Promise را اجرا کند و نتیجهاش که مشخص شد، براساس آن نتیجه کاری انجام دهد. اما وقتی کلمهی Await قبلاز تابعی نوشته میشود، آن تابع باید منتظر باشد تا نتیجهی یک شئ مشخص شود و بعد اجرا شود. مثلا، برنامهنویس میتواند به دو تابع زمان بدهد. یعنی کد را اینطور بنویسد که تابع دوم ۵ ثانیه پس از مشخصشدن نتیجهی Promise اجرا شود.
جمعبندی و نتیجهگیری
۱. زبانهای برنامهنویسی فقط برای طراحی سایت استفاده نمیشوند و کاربردهای مختلفی دارند. بههمیندلیل، باید ویژگیهای مختلفی داشته باشند.
۲. زبانهای برنامهنویسی علیالاصول همگام هستند. اما برنامهنویسی همگام در وب دیزاین مشکلاتی برای برنامهنویس و کاربر ایجاد میکند. بههمیندلیل، زبانی مثل جاوا اسکریپت که اساسا ناهمگام است، برای طراحی سایت بسیار مهم میشود.
۳. در زبان جاوا اسکریپت مجموعهای از امکانات به کدنویس این قدرت را میدهد که زمان اجرای تقریبا هر چیزی را کاملا کنترل کند.
۴. البته امکان Async/Await در زبانهای دیگر (مثل پایتون و #C) نیز پیشبینی شده است.
۵. ناهمگامبودن JavaScript یکی از ویژگیهایی است که این زبان را کاربردی میکند. برنامهنویس شاید نیازی به یادگیری زبانهای پیشرفتهی دیگر نداشته باشد ولی قطعا به جاوا اسکریپت نیاز دارد. بههمیندلیل، آموزش جاوااسکریپت از اصلیترین سرفصلهای دوره آموزش طراحی سایت است.
دیدگاهتان را بنویسید