۲۲ - ۲حالت چیه؟

مثل خیلی دیگه از مباحثِ علم کامپیوتر، سرمنشاء مفهومِ حالت، از نظریه‌ی ماشین‌ها هست. کلیدِ چراغ ساده‌ترین شکلِ یه حالت ِه. یه کلیدِ چراغ دو حالت داره، روشن یا خاموش. اون دو وضعیتِ کلید رو میشه حالت ِ کلید دونست. بطورِ مشابه، ترانزیستورها توی کامپیوترها هم حالت ِ باینری ِ خاموش یا روشن دارن. این خیلی نگاهِ سطحِ پایین ایه، اما حالتی که توی حافظه‌ی کامپیوتر هست، تعمیمی از همین ایده‌ست.

در اکثر زبان‌های برنامه‌نویسی دستوری، این حالتمند بودن، فراگیر و ضمنی ِه، و در تایپ‌های توابع هم اشاره نمیشه. ولی تو هسکل حق نداریم یواشَکی یه مقدار رو تغییر بدیم؛ فقط می‌تونیم آرگومان بگیریم و جواب برگردونیم. تایپِ ‏‎State‎‏ در هسکل راهی برای بیانِ حالت، بدون توسل به تغییر ِه که در طولِ محاسبات ممکنه تغییر کنه. موند ِ ‏‎State‎‏ بیشتر برای راحتی وجود داره، و اساساً برای کار با ‏‎State‎‏ واجب نیست.

با ‏‎State‎‏ میشه با مقادیری که احتمال داره به ازای هر محاسبه‌ای تغییر کنن، راحت و بدون توسل به موتاسیون کار کرد. اگه جایی نیاز به موتاسیون باشه، باید برین سراغ تایپِ ‏‎ST‎‏ (که خیلی خلاصه تو یکی دیگه از فصل‌ها توضیح میدیم).

اگه تو هسکل از ‏‎State‎‏ و نمونه ِ ‏‎Monad‎‏‌ِش (فقط برای راحتی) استفاده کنیم، میشه حالتی داشته باشیم که:

۱.

نیازی به ‏‎IO‎‏ نداره؛

۲.

فقط محدود به داده ایه که در محفظه‌ی ‏‎State‎‏ قرار گرفته؛

۳.

شفافیت مرجع رو حفظ می‌کنه؛

۴.

به صراحت در تایپِ توابع ظاهر میشه.

راه‌های دیگه‌ای هم برای به اشتراک گذاشتن ِ داده داخلِ یه برنامه وجود دارن که برای نیازهایی متفاوت از نوع‌داده ِ ‏‎State‎‏ طراحی شدن. ‏‎State‎‏ برای زمانی خوبه که می‌خواین مقادیری توی برنامه‌تون باشن که ممکنه با هر مرحله از محاسبه تغییر کنن؛ و برنامه، هم بتونه بخوندِشون و هم تغییرشون بده.