به بهانه‌ی تایپ‌اسکریپت!

مقدمه (می‌تونید skip کنید.) ?آخرین باری که مقاله نوشتم یادم نمیاد. شاید به دوران راهنمایی برمی‌گرده. یه سایت وردپرسی به اسمِ «فنجون، دریچه‌ای به دنیای وب» داشتیم. توی ترلو (Trello) یه سری کارت تعریف می‌کردیم و می‌گفتیم این آموزش‌هایی هست که توی کامنت‌ها ازمون درخواست کردند. از بین این کارت‌ها، موضوعی که برامون جذاب بود رو انتخاب می‌کردیم و در موردش پست می‌نوشتیم. (مثلاً چی؟ چجوری اون علامت شورتکات کنار آیکون‌ها رو توی ویندوز برداریم؟ :دی)کمک کردن به بقیه. کامنت‌هایی که می‌گرفتیم. حس خیلی خوب داشت. اون بازه‌ی زمانی همه‌مون از شهرهای مختلف (اصفهان، تهران، کرمان، ...) با هم ریموت کار می‌کردیم. به خاطر کنکور و درس‌هایی که سنگین شده بود (از همینجا نسبت به کنکور اعلام انزجار کنم :دی.)، آروم‌آروم فعالیت‌مون کمتر شد و در نتیجه بعد از مدتی سایت اومد پایین.بعدها با یکی از بچه‌ها که بیشتر با هم در ارتباط بودیم و بیشترِ کارهای سایت رو هم انجام می‌داد، توی دانشگاه تهران با هم قرار گذاشتیم و همدیگه رو دیدیم. (وحید اگه این پست رو می‌خونی، سلام! :دی)محتوای فارسی توی این چند سال خیلی تغییر کرده. سایت‌ها، بلاگ‌ها و فروم‌های تخصصی، اون رونق قبل رو نداره. توی سیاهچاله‌ای به اسم تلگرام و اینستاگرام با حجم زیادی از محتوا (خوب؟ بد؟) گیر کردیم. البته فکر می‌کنم محتوای کانال‌های عمومی index می‌شه.آرش چند روز پیش سایت Internet Archive رو بهم معرفی کرد که می‌شه محتوای سایت‌هایی که دیگه در دسترس نیستند رو پیدا کرد. من هم رفتم سراغش و بین اسنپ‌شات‌هایی که از فنجون پیدا کردم، غرق شدم. کلی خاطره زنده شد.خیلی وقته که می‌خواستم شروع کنم دوباره بنویسم ولی به هر دلیلی (شما بگید تنبلی) نمی‌نوشتم. این چند ماه از لحاظ کاری سرم کمی خلوت‌تر شده ولی فکر و ذهنم به خاطر اتفاق‌هایی که افتاد و تصمیم‌هایی که باید بگیرم خیلی شلوغ شده. به همین خاطر، نوشتن بهم کمک می‌کنه که ذهنم آروم‌تر بشه و این پست، شاید (؟) یه بهونه‌ای باشه که بیشتر بنویسم.حالا چرا تایپ‌اسکریپت؟ ?تقریباً دو سالی هست که دارم با تایپ‌اسکریپت سر و کله می‌زنم. (می‌تونید اسلاید ارائه‌ای که پارسال در مورد تایپ‌اسکریپت رو داشتم، از اینجا ببینید.) چند باری بود که می‌خواستم در موردش بنویسم. الان که دارم این پست رو می‌نویسم، کم‌کم داریم به تایپ‌اسکریپت نسخه‌ی ۴.۰ نزدیک می‌شیم.شروع ماجرا ?️شروع تایپ‌اسکریپت بعد از مسافرتی بود که با آرش و احمد به تهران داشتیم. تصمیم ساده‌ای نبود و ریسک زیادی داشت. آرش تصمیم نهایی رو گرفت و استارتش رو بعد از اولین روزی که از تهران برگشتیم، توی شرکت زد.اون موقع که شروع کردیم، تایپ‌اسکریپت تازه ترند شده بود و خیلی از پکیج‌ها و لایبرری‌ها در حال مهاجرت به تایپ‌اسکریپت بودند یا حداقل براشون می‌شد تایپ تعریف کرد و جداگانه به پروژه اضافه کرد.TypeScript In Last 5 Years!روزهای اول برام تازگی داشت و مستقیم با تایپ‌اسکریپت شروع نمی‌کردم. اول جاوااسکریپت کد می‌زدم و بعد از اینکه تموم می‌شد، می‌اومدم js رو به ts تغییر می‌دادم :)). بعد با ارورهایی که تایپ‌اسکریپت می‌زد توی سر و صورت آدم درگیر می‌شدم. (نکنید! پیشنهاد نمی‌شه :دی.)Element implicitly has an 'any' type :\ به فرآیندی که برای توسعه‌ی بخش فرانت‌اند در نظر گرفته بودیم، یه قرارداد اضافه کردیم که باید این سه مورد رو رعایت کنیم:۱- هر کد جدیدی که به پروژه اضافه می‌شه باید با تایپ‌اسکریپت نوشته بشه.TypeScript! All The Things :))۲- اگه خواستیم تغییری توی کد بدیم و فایل‌ش جاوااسکریپت بود، در صورتی که از لحاظ زمانی وقت‌گیر نبود یا ریسک تولید باگ جدید نداشت، باید علاوه بر اینکه اون تغییر رو اعمال می‌کنیم (رفع باگ، پیاده‌سازی فیچر، یا ...)، باید اون فایل رو هم به تایپ‌اسکریپ بازنویسی کنیم.۳- به ازای هر باری که تایپ any تعریف کنیم یه بچه گربه می‌میره. در نتیجه تایپ any ممنوع!Every time you any, a kitten dies :(خب حالا که چی؟ ?با همین قراردادی که بین خودمون گذاشتیم، تونستیم بخش زیادی از پروژه (۸۰ درصد) رو ببریم روی تایپ‌اسکریپت (توی یه بازه‌ی زمانی تقریباً ۹ ماهه) و خب در ازای هزینه‌ای که برای این تغییر دادیم، چندتا مزیت مهم و با ارزش به دست آوردیم:توسعه و مستندسازی پروژه به صورت موازی: پروژه در حال بزرگ شدن بود و مستندات زیادی نداشت. تایپ‌اسکریپت کمک می‌کرد که همزمان با کد زدن، پروژه مستند بشه. (بعدها مستندات پروژه آماده و جدا شد.)Writing Documentation!ساده‌تر شدن خوندن کدهای بقیه: موقع تغییرِ کدِ بخشی از پروژه که قبلاً درگیرش نبودیم، زمان کمتری برای خوندن کد هم‌تیمی‌مون صرف می‌کردیم تا بفهمیم چی به چیه.باگ کمتر در تغییرهای جدید: تشخیص Side Effectهای (اثرهای جانبی؟) هر تغییری راحت‌تر و سریع‌تر شده بود و اینکه درصد اشتباه‌های انسانی به علت خستگی و خواب‌آلودگی کمتر شده بود :)). در نتیجه حس اطمینان خاطر بیشتری موقع تغییر کد داشتیم.Side Effects!تشخیص و رفع باگ قبل از اعلام وضعیت قرمز: موقع بازنویسی یه سری از فایل‌ها به تایپ‌اسکریپت، باگ‌هایی که هنوز بهشون برنخورده بودیم و گزارش نشده بودن رو پیدا می‌کردیم و همون موقع برطرف می‌شدن.Fix Bugs Ahead Of Time!افزایش سرعت در تغییر و پیاده‌سازی‌های آینده: زمان رسیدن فیچرها در ابتدای مسیر کند شد ولی بعد از یه بازه‌ی زمانی، به طور نسبی حتی نسبت به قبل از تایپ‌اسکریپت هم سریع‌تر شده بود. خطاهایی (error) که بود رو می‌تونستیم قبل از اجرا و ذخیره‌ی کد ببینیم و برطرف کنیم.Speed Up Development Process.نقطه (دات): فشار دادن کلید «.» (نقطه) جذاب‌تر از قبل شده بود :)). چی بهتر از auto completion؟ وقتی داریم کد می‌زنیم،‌ همزمان IDE بهمون پیشنهاد بده و اینتر بزنیم و اینکه اشتباه‌های تایپی (typo) تقریباً به صفر نزدیک شد.کیفیت کد خروجی: تایپ تعریف کردن و استفاده از تایپ‌ها بهمون کمک می‌کرد که کدهای بهتری از لحاظ منطقی بنویسیم و بهتر فکر کنیم.حرف آخر! ?تایپ‌اسکریپت ممکنه برای همه‌ی پروژه‌ها مناسب نباشه، مثل پروژه‌هایی که:۱- پیاده‌سازی لاجیک UI زیادی داره.۲- دیتا مدل پیچیده‌ای از سمت بک‌اند نداره.۳- کوچیکه و قرار نیست طولانی‌مدت توسعه داده بشه.با این حال ترجیح اینه که تا جایی که امکانش هست از تایپ‌اسکریپت استفاده کنیم و بقیه رو هم به استفاده از تایپ‌اسکریپت تشویق کنیم تا باگ‌های کمتری رو ببینیم و پوست شفاف‌تری داشته باشیم. به گرمایش زمین هم کمک کردیم.تایپ‌اسکریپت چیز خاصی نیست واقعاً :)). صرفاً به جاوااسکریپت، تایپ اضافه می‌کنه و در نهایت هم به جاوااسکریپت کامپایل می‌شه. (و اینکه کامپایل تایمش هم داره بهتر می‌شه.)TypeScript Developers! این پست، صرفاً بهونه‌ای بود برای اینکه شروع به نوشتن کنم (همه‌ش دنبال بهونه‌ایم :دی.). توی پست‌های بعدی اگه عمری باشه، سعی می‌کنم بیشتر در مورد خود تایپ‌اسکریپت بنویسیم.