چرا تایپ استاتیک دوباره محبوب شد
خلاصهٔ کاملتر
نویسنده با یه قیاس ساده شروع میکنه: فرض کن میخوای یه گودال بکَنی؛ با بیل میکَنی یا با دست؟ اگه بیل خوب باشه معلومه که بیل. ولی اگه تنها بیلی که داری از جنس کاغذ باشه، عملاً بیفایدهست و بهتره با دست بکَنی. به گفتهٔ نویسنده، همین قیاس وضعیت تایپ استاتیک رو توضیح میده.
تو سیستم تایپ داینامیک، خودت باید با مغز خودت دربارهٔ حالت و محتوای متغیرها فکر کنی؛ کامپایلر نه کمکت میکنه نه جلوتو میگیره — مثل کَندن با دست. اما یه تایپ استاتیک ضعیف مثل چیزی که اوایل Java یا C++98 داشت، مثل بیل کاغذیه: حتی تو کارهای سادهای مثل تفکیک اشارهگر nullable از non-nullable هم کمکت نمیکنه، sum type نداره، و در عوض مجبورت میکنه اسم تایپها رو همهجا دستی بنویسی. نویسنده این خط رو نمونه میآره:
BufferedReader bufferedReader = new BufferedReader(new FileReader(filename));نویسنده میگه این یه فاجعهٔ کوچیکه، چون پر از تکرار و نوشتن دستیه.
در مقابل، یه سیستم تایپ مدرن مثل TypeScript، Haskell، MyPy، Swift یا Rust سه چیز بهت میده. اول، راهی برای تفکیک nullable از non-nullable — مثل Maybe t تو Haskell، T | null تو TypeScript و T? تو Swift — که کامپایلر دقیق بهت میگه کجاها باید null رو چک کنی و اگه یکی رو جا انداختی پیداش میکنه؛ نتیجه اینه که عملاً دیگه خطای null pointer سر زمان اجرا نمیبینی.
دوم، sum type یا union type که بهت اجازه میده اصل «حالتهای نامعتبر رو غیرقابلنمایش کن» رو پیاده کنی؛ یعنی هر فیلد فقط وقتی وجود داره که سیستم تو حالت مربوط به اون باشه. سوم، یهجور استنتاج تایپ (type inference)، که لازم نیست let x: number = 5 بنویسی وقتی کامپایلر خودش میفهمه let x = 5 یه عدده.
نویسنده یه عامل دیگه رو هم اضافه میکنه: گسترش امکاناتی مثل تکمیل خودکار نام متد تو IDEها. تو دههٔ ۹۰ Intellisense یه قابلیت ویژهٔ Visual Studio بود، ولی الان تقریباً تو هر ویرایشگری هست؛ پس اطلاعاتی که به سیستم تایپ میدی، جدا از خطایابی، بهرهوری هم بهت میده. جمعبندیش اینه: یه تایپ داینامیک خوب از یه تایپ استاتیک بد بهتره، اما ما الان تایپهای استاتیک خیلی بهتری از قبل داریم.
نکات کلیدی:
- نظریهٔ نویسنده: محبوبیت تایپ استاتیک با بهتر شدن کیفیت خود سیستمهای تایپ برگشت، نه با مُد
- تایپ استاتیک ضعیف (Java اولیه، C++98) مثل بیل کاغذیه و حتی از تایپ داینامیک هم بدتره
- تایپهای مدرن سه چیز دارن: تفکیک nullable، sum/union type، و استنتاج تایپ
- تفکیک nullable باعث میشه عملاً خطای null pointer سر زمان اجرا نبینی
- گسترش ابزارهای IDE مثل تکمیل خودکار، ارزش سرمایهگذاری روی تایپ استاتیک رو بیشتر کرده




