پیشنهاد رسمی اضافه شدن type unions به زبان #C
نویسنده: وحید نصیری
تاریخ: ۱۴۰۳/۰۵/۰۸ ۰۷:۱۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
که امکان داشتن یک چنین کدهایی را با چندین نوع خروجی، میسر میکند:
public class Person
{
public (string or Address) Address { get; set; }
}
چه کاربردی داره؟
این متد را درنظر بگیرید:
public Receipt PlaceOrder(Order order)
{
var product = _products.SingleOrDefault(p => p.ProductId == order.ProductId);
if (product is null)
{
throw new Exception("Product doesn't exist");
}
if (product.Cost > order.Payment)
{
throw new Exception("Insufficient funds");
}
var receipt = new Receipt(++_receiptId, order.Payment);
_receipts.Add(receipt);
return receipt;
}
برای استفاده کننده دقیقا مشخص نیست که این متد ممکن است چندین استثناء را هم صادر کند. با وجود type unions، میتوان مقصود واضحتری را ارائه داد:
public (Receipt or PlaceOrderError) PlaceOrder(Order order)
هرچند در این لحظه، شبیه به اینکار را با استفاده از کتابخانهی OneOf هم انجام میدهند و ... TypeScript هم که در اساس توسط قسمت مهمی از تیم #C طراحی شده، مدتهاست که به همراه چنین قابلیتی هست.