• #
    ‫۱ ماه قبل، سه‌شنبه ۹ مرداد ۱۴۰۳، ساعت ۰۰:۵۹

    چه کاربردی داره؟

    • #
      ‫۱ ماه قبل، سه‌شنبه ۹ مرداد ۱۴۰۳، ساعت ۰۸:۳۰

      این متد را درنظر بگیرید:

      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 طراحی شده، مدت‌هاست که به همراه چنین قابلیتی هست.