حل مسئله تقسیم با تاخیر در مصاحبه فنی


نزدیک به یک ماه پیش، یک نوشته ای در لینکدین مطالعه کردم که برام جالب بود. یکی از برنامه نویس های حرفه ای اینطوری بیان کرده که صورت مسئله ای رو مطرح کرده و به صد نفر در مصاحبه های فنی داده و خواسته که حلش کنند. این همکار عزیز گفته بود فقط ۵ نفر تونستند مسئله رو حل کنند!

نکته ای که برا من جالب بود، عمیق بودن مسئله است. و همون موقع گفتم راجع به راه حلش یک مقاله مینویسم. مسئله پر از نکته هاییه که همه رو باید با هم جمع کرد تا به صورت مسئله رسید.

نکته مهم تر طرز فکر ما برای حل مسئله است. خواستم با این مقاله، هم راه حل رو بگم و هم طرز فکر خودم رو برای حل مسئله باهاتون به اشتراک بگذارم.

بریم ببینیم صورت مسئله چیه:

با توجه به نکات زیر یک تابع بنویسید که دو عدد از ورودی دریافت کند و حاصل تقسیم را محاسبه نماید و خروجی را برگرداند.
۱. هروگونه خطا را هندل کنید.
۲. تابع با ۳ ثانیه تاخیر خروجی را برگرداند.
۳. تابع را از بیرون صدا بزنید و از async و await استفاده کنید.


پیشنهاد میکنم قبل از اینکه راه حل رو ببینید، خودتون یک بار سعی کنید مسئله رو حل کنید.




بریم مسئله رو قدم به قدم حل کنیم.


قدم اول

اولین نکته ای که بهش توجه کردم نکته سوم صورت مسئله بود.

۳. تابع را از بیرون صدا بزنید و از async و await استفاده کنید.

یعنی داخل تابع از Promise استفاده میکنم و فرمت تابع همچین چیزیه:


قدم دوم

شرط اول صورت مسئله چی میگه؟

۱. هرگونه خطا را هندل کنید

بنابراین باید تابع داخل try cache نوشته بشه:


و همچنین میتونه به این معنی باشه که همه ورودی ها رو به ازای خطاهای قابل پیش بینی بررسی کنیم. چه خطاهایی قابل پیش بینی هستند؟

۱. ورودی های a و b عدد نباشند.

۲. مقدار ورودی b صفر باشه که منجر به خطای divide by zero میشه.

با هندل کردن این خطاهای قابل پیش بینی، به کد زیر میرسیم:

قدم سوم

حالا میرسیم به نکته دوم:

۲. تابع با ۳ ثانیه تاخیر خروجی را برگرداند.

برای تاخیر در ارائه جواب باید از تابع setTimeout استفاده کنیم.


قدم چهارم

به نظر میرسه تابع ما آماده شده و طبق نکته سوم، باید از بیرون با async و await صدا بزنیم:


اما یه نکته ای باقی مونده. ما یک تابع ساختیم که تابع divide رو صدا بزنه. ولی خودش رو اجرا نکردیم. پس خود تابع رو هم صدا میکنیم. به این تکنیک در جاوااسکریپت IIFE میگن:


قدم پنجم

کد نهایی رو در یک فایل بنام divide.js ذخیره میکنیم.

با اجرای دستور زیر اجراش میکنیم:

و خروجی عدد ۵ رو میبینیم.


قدم ششم

وقتی تابع رو با مقادیر a=10 و b=0 اجرا کنیم همچین خطایی میگیریم:

بنابر این با توجه به نکته اول (هرگونه خطا را هندل کنید) ، دستورات صدا زدن تابع divide رو صورت زیر تغییر میدیم:

و عبارت زیر در کنسول لاگ میشه:

در واقع ما همه خطاها رو هندل کردیم.

جالب اینه که قدم ششم در راه حل خود مطرح کننده سوال هم نبود!


امیدوارم از این مقاله لذت ببرید و براتون مفید باشه.

اگر دوست دارید میتونید از طریق صفحه لینکدین با من در ارتباط باشید :)