میشه گفت که موناد الگو طراحی برای تابع هاست که یه سری مشکلات حل میکنن مثلا مشکل Null بودن ، مدیریت State یا Error Handling که توی این مقاله می خوام در مورد Either صحبت کنم.
ساختار Either برای مدیریت خطا ها استفاده میشه و حتی توی زبان برنامه نویسی مثل Golang جزیی از syntax اون محسوب میشه و دو مقدار value , err رو بر میگردونه.
خوب حالا برای پیاده سازی اون ما چرخ از اول اختراع نمی کنیم و از کتابخونه Arrow توی کاتلین یا پکیج dartz در زبان دارت استفاده می کنیم. اما قبل اون بهتر هست یه مثال از زمانی ببینیم که باید با استفاده از بلوک try-catch بیایم و ارور هامون رو کنترل کنیم توی این مثال هدف ما parse کردن یه رشته و به دست آوردن معکوس اون هست.
خوب همینطور که توی کد های بالا دیدیم برای مدیریت بهتر برنامه میایم و یه سری Exception به بیرون تابع پرتاب میکنیم و باید در ادامه این خطا ها رو مدیریت کنیم وگرنه برنامه کرش میکنه. در نهایت خروجی برنامه برای مقدار 2 عدد 0.5 و برای مقادیر غیر عددی یا 0 نمایش نوع خطا هست.
حالا با استفاده از Either کد هامون Refactor میکنیم تا ببینیم نتیجه چه خواهد بود?.
خوب در ابتدا اومدیم و یه سری کلاس برای تایپ ارور هایی که داشتیم اضافه کردیم تا داخل تابع هامون به عنوان مقادیر چپ برگردونیم. توی مرحله بعدی تابع های parse و reciprocal دیگه خطایی رو پرتاب نمیکنن و بلکه یه Either بر میگردونن که حاوی مقدار اصلی و مقدار ارور ماست. فرق دیگه ای که وجود داره به جای استفاده تو در توی توابع داخل magic اومدیم و از توابع map , flatmap استفاده کردیم. در آخر درون تابع main اومدیم و با استفاده از when یا تابع fold مقدایر Left , Right رو هندل کردیم.
استفاده از Either مزیت هایی به همراه داره که میشه به مدیریت ساده تر ارور ها اشاره کرد (حد اقلش اینکه ما به برنامه تا حد ممکن ارور اضافه نکردیم ?) برای یادگیری بیشتر هم میتونین به داکیومنت هایی وجود داره مراجعه کنین ?.