۲۲ - ۲حالت چیه؟
مثل خیلی دیگه از مباحثِ علم کامپیوتر، سرمنشاء مفهومِ حالت، از نظریهی ماشینها هست. کلیدِ چراغ سادهترین شکلِ یه حالت ِه. یه کلیدِ چراغ دو حالت داره، روشن یا خاموش. اون دو وضعیتِ کلید رو میشه حالت ِ کلید دونست. بطورِ مشابه، ترانزیستورها توی کامپیوترها هم حالت ِ باینری ِ خاموش یا روشن دارن. این خیلی نگاهِ سطحِ پایین ایه، اما حالتی که توی حافظهی کامپیوتر هست، تعمیمی از همین ایدهست.
در اکثر زبانهای برنامهنویسی دستوری، این حالتمند بودن، فراگیر و ضمنی ِه، و در تایپهای توابع هم اشاره نمیشه. ولی تو هسکل حق نداریم یواشَکی یه مقدار رو تغییر بدیم؛ فقط میتونیم آرگومان بگیریم و جواب برگردونیم. تایپِ State
در هسکل راهی برای بیانِ حالت، بدون توسل به تغییر ِه که در طولِ محاسبات ممکنه تغییر کنه. موند ِ State
بیشتر برای راحتی وجود داره، و اساساً برای کار با State
واجب نیست.
با State
میشه با مقادیری که احتمال داره به ازای هر محاسبهای تغییر کنن، راحت و بدون توسل به موتاسیون کار کرد. اگه جایی نیاز به موتاسیون باشه، باید برین سراغ تایپِ ST
(که خیلی خلاصه تو یکی دیگه از فصلها توضیح میدیم).
اگه تو هسکل از State
و نمونه ِ Monad
ِش (فقط برای راحتی) استفاده کنیم، میشه حالتی داشته باشیم که:
۱.
نیازی به IO
نداره؛
۲.
فقط محدود به داده ایه که در محفظهی State
قرار گرفته؛
۳.
شفافیت مرجع رو حفظ میکنه؛
۴.
به صراحت در تایپِ توابع ظاهر میشه.
راههای دیگهای هم برای به اشتراک گذاشتن ِ داده داخلِ یه برنامه وجود دارن که برای نیازهایی متفاوت از نوعداده ِ State
طراحی شدن. State
برای زمانی خوبه که میخواین مقادیری توی برنامهتون باشن که ممکنه با هر مرحله از محاسبه تغییر کنن؛ و برنامه، هم بتونه بخوندِشون و هم تغییرشون بده.