DOMAINDRIVENDESIGN_IR Telegram 256
بالاخره فهمیدم که Monad اونقدرها هم وحشتناک نیست! 🤔

به بیان ساده، Monad یک الگوی طراحی هست که از Category Theory وام گرفته شده و در برنامه‌نویسی، به خصوص در زبان‌های functional، برای ترکیب عملیاتی که نیاز به تغییر state دارند (و به عبارت دیگه دارای side effects هستند) به یک روش predictable، clear و declarative استفاده می‌شود.

مونادها به ما این امکان رو میدن که عملیات‌ها رو به راحتی پشت هم بچینیم، بدون اینکه نگران خطاها یا مشکلات اجرایی باشیم.

حالا سوال اینه که Monads چطور کمک می‌کنه؟ 🤔

به زبان ساده، Monad یک ساختار داده‌ای هست که می‌تونه مقادیر رو در خودش نگه داره و به طور امن و مرتب عملیات‌های مختلف رو روش انجام بده. مهم‌تر از همه، اینکه می‌تونه با خطاها یا کارهای asynchronous به شکل ساده برخورد کنه.

ویژگی‌های اصلی Monad

یک Monad معمولاً سه ویژگی اساسی دارد:

1- ویژگی return یا unit یا construct: این متد یک مقدار رو به نوع Monadic تبدیل می‌کنه. به عبارت دیگه، اگر شما یک مقدار ساده (مثل یک عدد یا رشته) داشته باشید، با استفاده از این متد می‌تونید آن رو در یک Monad قرار بدید.

2- ویژگی bind یا flatMap: این متد به شما این امکان رو می‌ده که عملیات‌هایی رو روی مقدار داخل Monad انجام بدید. bind تضمین می‌کنه که نتیجه هر عملیات همچنان یک Monad باقی می‌مونه و می‌تونید آن رو به راحتی به عملیات‌های بعدی وصل کنید.

3- ترکیب آسان با سایر عملیات‌ها: Monads به شما این امکان رو می‌دهند که چندین عملیات رو به شکلی صاف و بدون نیاز به نوشتن کد پیچیده ترکیب کنید. این امکان به‌ویژه در asynchronous programming و side effects بسیار مفید است. ⚙️


در واقع، Monads ساختارهایی هستند که می‌تونند مقادیر رو توی خودشون نگه دارند و عملیات‌های مختلف رو بر روی آن مقادیر انجام بدهند، به طوری که می‌توان از آن‌ها در شرایط مختلف مانند side effects، asynchronous بودن، و مدیریت خطاها استفاده کرد.

یه مثال ساده

فرض کنید داریم یک سفارش آنلاین می‌گیریم. اول باید چک کنیم که آیا موجودی داریم یا نه، بعد پرداخت رو انجام بدیم، و در نهایت وضعیت سفارش رو به روز کنیم. اگر هرکدوم از این مراحل با مشکلی مواجه بشه (مثلاً موجودی کافی نباشه یا پرداخت شکست بخوره)، باید خطا رو مدیریت کنیم.

پیاده‌سازی مثال بالا در Haskell:

data Order
= Order { orderId :: Int, product :: String, quantity :: Int }

checkStock:: Order -> Maybe Order
checkStock
order
| quantity order > 0 = Justorder
| otherwise = Nothing

processPayment
:: Order -> Maybe Order
processPayment
order = Just order

updateOrder:: Order -> Maybe Order
updateOrder
order = Just order

processOrder
:: Order -> Maybe Order
processOrderorder = do
stockChecked <- checkStock
order
paymentProcessed <-processPayment stockChecked
updateOrder paymentProcessed

main :: IO ()

main = do
let order = Order { orderId = 1,product = "Laptop", quantity = 5 }
case processOrder order of
Just o -> putStrLn $ "Order processed:
" ++ show o
Nothing -> putStrLn"Order failed"





به نظرتون شما در زبان‌هایی مثل C# یا Java چطور می‌تونید از این ویژگی استفاده کنید؟
👍3



tgoop.com/DomainDrivenDesign_ir/256
Create:
Last Update:

بالاخره فهمیدم که Monad اونقدرها هم وحشتناک نیست! 🤔

به بیان ساده، Monad یک الگوی طراحی هست که از Category Theory وام گرفته شده و در برنامه‌نویسی، به خصوص در زبان‌های functional، برای ترکیب عملیاتی که نیاز به تغییر state دارند (و به عبارت دیگه دارای side effects هستند) به یک روش predictable، clear و declarative استفاده می‌شود.

مونادها به ما این امکان رو میدن که عملیات‌ها رو به راحتی پشت هم بچینیم، بدون اینکه نگران خطاها یا مشکلات اجرایی باشیم.

حالا سوال اینه که Monads چطور کمک می‌کنه؟ 🤔

به زبان ساده، Monad یک ساختار داده‌ای هست که می‌تونه مقادیر رو در خودش نگه داره و به طور امن و مرتب عملیات‌های مختلف رو روش انجام بده. مهم‌تر از همه، اینکه می‌تونه با خطاها یا کارهای asynchronous به شکل ساده برخورد کنه.

ویژگی‌های اصلی Monad

یک Monad معمولاً سه ویژگی اساسی دارد:

1- ویژگی return یا unit یا construct: این متد یک مقدار رو به نوع Monadic تبدیل می‌کنه. به عبارت دیگه، اگر شما یک مقدار ساده (مثل یک عدد یا رشته) داشته باشید، با استفاده از این متد می‌تونید آن رو در یک Monad قرار بدید.

2- ویژگی bind یا flatMap: این متد به شما این امکان رو می‌ده که عملیات‌هایی رو روی مقدار داخل Monad انجام بدید. bind تضمین می‌کنه که نتیجه هر عملیات همچنان یک Monad باقی می‌مونه و می‌تونید آن رو به راحتی به عملیات‌های بعدی وصل کنید.

3- ترکیب آسان با سایر عملیات‌ها: Monads به شما این امکان رو می‌دهند که چندین عملیات رو به شکلی صاف و بدون نیاز به نوشتن کد پیچیده ترکیب کنید. این امکان به‌ویژه در asynchronous programming و side effects بسیار مفید است. ⚙️


در واقع، Monads ساختارهایی هستند که می‌تونند مقادیر رو توی خودشون نگه دارند و عملیات‌های مختلف رو بر روی آن مقادیر انجام بدهند، به طوری که می‌توان از آن‌ها در شرایط مختلف مانند side effects، asynchronous بودن، و مدیریت خطاها استفاده کرد.

یه مثال ساده

فرض کنید داریم یک سفارش آنلاین می‌گیریم. اول باید چک کنیم که آیا موجودی داریم یا نه، بعد پرداخت رو انجام بدیم، و در نهایت وضعیت سفارش رو به روز کنیم. اگر هرکدوم از این مراحل با مشکلی مواجه بشه (مثلاً موجودی کافی نباشه یا پرداخت شکست بخوره)، باید خطا رو مدیریت کنیم.

پیاده‌سازی مثال بالا در Haskell:


data Order
= Order { orderId :: Int, product :: String, quantity :: Int }

checkStock:: Order -> Maybe Order
checkStock
order
| quantity order > 0 = Justorder
| otherwise = Nothing

processPayment
:: Order -> Maybe Order
processPayment
order = Just order

updateOrder:: Order -> Maybe Order
updateOrder
order = Just order

processOrder
:: Order -> Maybe Order
processOrderorder = do
stockChecked <- checkStock
order
paymentProcessed <-processPayment stockChecked
updateOrder paymentProcessed

main :: IO ()

main = do
let order = Order { orderId = 1,product = "Laptop", quantity = 5 }
case processOrder order of
Just o -> putStrLn $ "Order processed:
" ++ show o
Nothing -> putStrLn"Order failed"





به نظرتون شما در زبان‌هایی مثل C# یا Java چطور می‌تونید از این ویژگی استفاده کنید؟

BY کانال مکتب‌خانه DDD


Share with your friend now:
tgoop.com/DomainDrivenDesign_ir/256

View MORE
Open in Telegram


Telegram News

Date: |

The court said the defendant had also incited people to commit public nuisance, with messages calling on them to take part in rallies and demonstrations including at Hong Kong International Airport, to block roads and to paralyse the public transportation system. Various forms of protest promoted on the messaging platform included general strikes, lunchtime protests and silent sit-ins. Ng was convicted in April for conspiracy to incite a riot, public nuisance, arson, criminal damage, manufacturing of explosives, administering poison and wounding with intent to do grievous bodily harm between October 2019 and June 2020. Content is editable within two days of publishing Just at this time, Bitcoin and the broader crypto market have dropped to new 2022 lows. The Bitcoin price has tanked 10 percent dropping to $20,000. On the other hand, the altcoin space is witnessing even more brutal correction. Bitcoin has dropped nearly 60 percent year-to-date and more than 70 percent since its all-time high in November 2021. 1What is Telegram Channels?
from us


Telegram کانال مکتب‌خانه DDD
FROM American