برنامه نویسی

Rop.Results9 یک اتحادیه متمایز از نتیجه/خطا برای NET9 است

Summarize this content to 400 words in Persian Lang
Rop.Results9 کتابخانه ای است که برای بازگرداندن یک نتیجه خاص یا یک خطا از یک عملیات طراحی شده است و نیازی به استفاده از استثناها نیست.

به عنوان بسته Nuget در دسترس است Rop.Results9 و کد منبع در github در Rop.Results9 موجود است

نتایج می تواند 3 نوع باشد:

VoidResult: جایی که فقط موفقیت یا خطا در عملیات برگردانده می شود
نتیجه: جایی که خطا یا نتیجه خاصی از نوع T برگردانده می شود
Enumerable Result: جایی که خطا یا یک نتیجه قابل شمارش از نوع T برگردانده می شود

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

مثال:

public Result Divide1(int dividend, int divisor)
{
if (divisor == 0)
{
return Error.Fail(“Cannot divide by zero.”);
}
else
{
return dividend / divisor;
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای پردازش این نتیجه، راه های مختلفی برای انجام آن وجود دارد. مستقیم ترین راه این است که بررسی کنید آیا نتیجه شکست خورده است و خطا را به سمت بالا ارسال کنید، در غیر این صورت از مقدار برگشتی استفاده کنید:

public VoidResult ShowDivide2(int divident,int divisor)
{
var result = Divide1(divident, divisor);
if (result.IsFailed)
return result;
Console.WriteLine($”The result is {result.Value!}”);
return VoidResult.Ok;
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

همچنین می توانید نتیجه را بین مقدار صحیح و خطا ترسیم کنید.

public VoidResult ShowDivide(int divident,int divisor)
{
var result = Divide1(divident, divisor);
return result.Map(
v => Console.WriteLine($”The result is {v}”),
e => Console.WriteLine($”Error: {e.Value}”)
);
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این کتابخانه بسیار کامل است و شامل چندین سناریو ممکن است. کد مستند شده در GitHub است، اما در اینجا یک خلاصه کوتاه وجود دارد:

کلاس ها:

CancelError: نشان دهنده خطایی است که هنگام لغو یک عملیات رخ می دهد.
CastError: نشان دهنده خطایی است که زمانی رخ می دهد که عملیاتی قابل انتقال نیست.
EmptyError: نشان دهنده خطایی است که زمانی رخ می دهد که مقدار نتیجه خالی باشد.
خطا: نشان دهنده یک خطا در شیء نتیجه است.
Error: یک شی خطا را با یک داده مرتبط نشان می دهد.
ExceptionError: نشان دهنده خطایی است که به دلیل یک استثنا رخ داده است.
FailError: نشان دهنده خطایی است که در صورت شکست یک عملیات رخ می دهد.
MultiError: نشان دهنده خطایی است که دارای چندین خطا است.
NotEnumerableError: نشان دهنده خطایی است که زمانی رخ می دهد که یک عملیات قابل شمارش نباشد.
NullError: نشان دهنده خطایی است که زمانی رخ می دهد که مقدار نتیجه صفر باشد.
TimeOutError: نشان دهنده یک خطای ناشی از مهلت زمانی است.
UnknownError: نشان دهنده یک خطای ناشناخته است.
نتیجه: کلاس استاتیک حاوی متدهای مختلف برای کار با Result اشیاء
نتیجه: نتیجه ای را با مقداری نشان می دهد که می تواند موفقیت آمیز باشد یا حاوی خطا باشد.
Enumerable Result: نشان دهنده نتیجه عملیاتی است که مقدار قابل شمارش را برمی گرداند.
ResultHelper: یک کلاس ثابت حاوی متدهای پسوندی برای Result کلاس
VoidResult: نتیجه ای را نشان می دهد که حاوی مقدار نیست. اما می تواند موفق یا شکست بخورد.

رابط IRresult

نشان دهنده نتیجه عملیاتی است که می تواند با موفقیت یا شکست مواجه شود.

خواص:

خطا: در صورت وجود، خطای مرتبط با این نمونه را دریافت می کند.
IsFailed: مقداری را دریافت می کند که نشان می دهد آیا این نمونه شکست خورده است یا خیر.
IsFailedAndNotNull: مقداری را دریافت می کند که نشان می دهد آیا این نمونه شکست خورده است و مقدار null دلیل آن نیست.
IsNull: مقداری را دریافت می کند که نشان می دهد این نمونه تهی است یا خیر.
IsOk: نام مستعار IsSuccessful است
IsOkOrNull: اگر نتیجه موفقیت آمیز یا تهی باشد، true را برمی گرداند.
IsSuccessful: مقداری را دریافت می کند که نشان می دهد آیا این نمونه موفق است یا خیر.

روش ها:

GetObjectValueOrDefault(): به طور مستقیم مقدار نتیجه را به عنوان یک شی برمی گرداند.
ThrowIfFailed(): در صورتی که این نمونه ناموفق باشد، یک استثنا ایجاد می کند.

نتیجه کلاس

نتیجه ای را با مقداری نشان می دهد که می تواند موفقیت آمیز باشد یا حاوی خطا باشد.

نتیجه type اعضای زیر را در معرض دید قرار می دهد.

سازندگان:

Result(T): نمونه جدیدی از کلاس Result را با یک مقدار راه اندازی می کند.
Result(Error): نمونه جدیدی از Result را راه اندازی می کند کلاس با خطا

خواص:

خطا: مقدار خطا را دریافت می کند.
Value: مقدار نتیجه را دریافت می کند.

روش ها:

قابل شمارش(): نتیجه را به یک نتیجه قابل شمارش تبدیل می کند.
Deconstruct(ref T, ref Error): نتیجه را به مقدار و خطا تجزیه می کند.
Equals(Object): تعیین می کند که آیا این نتیجه برابر با یک شی است یا خیر.
برابر است(نتیجه): تعیین می کند که آیا این نتیجه با نتیجه دیگری برابر است یا خیر.
Equals(T): تعیین می کند که آیا این مقدار نتیجه با مقدار دیگری برابر است یا خیر.
اجرا (عمل): یک عمل را اجرا می کند.
اجرا (Func): در صورت موفقیت آمیز بودن نتیجه، اقدامی را اجرا می کند. اگر عمل یک استثنا ایجاد کند یا false را برگرداند، نتیجه یک خطا است.
اجرا (Func): در صورت موفقیت آمیز بودن نتیجه، اقدامی را اجرا می کند. اگر عمل یک استثنا ایجاد کند، نتیجه یک خطا است. در غیر این صورت، نتیجه، نتیجه عمل است.
FromError(Error): یک نمونه جدید از Result ایجاد می کند کلاس با خطای مشخص شده
FromValue(T): یک نمونه جدید از Result ایجاد می کند کلاس با مقدار مشخص شده
GetObjectValueOrDefault(): روش محافظت شده برای بدست آوردن مقدار شی یا null.
IfFailed(T): نام مستعار ValueOrDefault
اگر شکست خورد (عملکرد): نتیجه موفقیت آمیز را با عملکرد مشخص شده در صورت عدم موفقیت برمی گرداند.
نقشه(کارکرد): در صورت موفقیت آمیز بودن نتیجه، یک تابع اسکالر را اجرا می کند.
نقشه(B): مقدار نتیجه را به یک مقدار نتیجه جدید نگاشت می کند.
نقشه (اقدام، کارکرد): مقدار نتیجه را به یک مقدار voidresult جدید نگاشت می کند.
نقشه (اقدام، اقدام): مقدار نتیجه را به یک مقدار voidresult جدید نگاشت می کند.
MapEnumerable(کارکرد>): یک تابع اسکالر را اجرا می کند که در صورت موفقیت آمیز بودن نتیجه، یک عدد iennumerable را برمی گرداند.
MapFailed(T): نتیجه موفقیت آمیز را با مقدار مشخص شده در صورت عدم موفقیت برمی گرداند.
مطابقت دادن(کارکرد، کارکرد): مقدار نتیجه را با مقدار یا خطای جدید مطابقت می دهد.
مطابقت دادن(کارکرد، B): مقدار نتیجه را با یک مقدار جدید مطابقت می دهد.
مطابقت دادن(B, B): مقدار نتیجه را با مقدار جدید مطابقت می دهد.
TryGet(ref T): سعی کنید مقدار نتیجه را بدست آورید.
ValueOrDefault(T): در صورتی که نتیجه ناموفق باشد، مقدار نتیجه یا مقدار پیش فرض را برمی گرداند.
ValueOrThrow(): مقدار نتیجه را دریافت می کند یا در صورت عدم موفقیت یا تهی بودن، یک استثنا ایجاد می کند.
WithError(Error): یک نتیجه جدید را با خطای مشخص شده نشان می دهد.
WithValue(T): یک نتیجه جدید را با مقدار مشخص شده نشان می دهد.

Enumerable Result کلاس

نشان دهنده نتیجه عملیاتی است که یک مقدار قابل شمارش را برمی گرداند.

سازندگان:

خواص:

IsEmpty: EnumerableResult خالی است.
IsFailedOrEmpty: EmumerableResult ناموفق یا خالی است.
IsNullOrEmpty: نام مستعار برای IsFailedOrEmpty
مقدار: مقدار نتیجه را به عنوان یک لیست فقط خواندنی دریافت می کند.
خطا: مقدار خطا را دریافت می کند.

روش ها:

AsEnumerable(): نتیجه را به عددی تبدیل می کند.
AsReadOnlySpan: نتیجه قابل شمارش را به یک بازه فقط خواندنی تبدیل می کند.
Deconstruct(رجوع کنید به IReadOnlyListref Error): نتیجه را به یک مقدار و یک خطا تجزیه می کند.
Equals(Object): تعیین می کند که آیا شی مشخص شده با شی فعلی برابر است یا خیر.
برابر است(EnumerableResult): تعیین می کند که آیا دو EnumerableResult برابر هستند یا خیر.
برابر (IEnumerable): تعیین می کند که آیا این EnumerableResult برابر با IEnumerable است یا خیر.
اجرا (عمل>): در صورت موفقیت آمیز بودن نتیجه، اقدام مشخص شده را اجرا می کند.
اجرا (Func,VoidResult>): در صورت موفقیت آمیز بودن نتیجه، تابع مشخص شده را اجرا می کند.
اجرا (Func,Boolean>): در صورت موفقیت آمیز بودن نتیجه، تابع مشخص شده را اجرا می کند.
ExecuteScalar(کارکرد,T>): در صورت موفقیت آمیز بودن نتیجه، تابع اسکالر مشخص شده را اجرا می کند.
اول (عملکرد): در صورت موفقیت آمیز بودن نتیجه، اولین موردی را برمی گرداند که با عملکرد مشخص شده مطابقت دارد.
First(): در صورت موفقیت آمیز بودن نتیجه، اولین مورد را برمی گرداند.
FirstOrDefault(Func): در صورت موفقیت آمیز بودن نتیجه، اولین موردی را برمی‌گرداند که با تابع مشخص شده مطابقت دارد، در غیر این صورت مقدار پیش‌فرض را برمی‌گرداند.
FirstOrDefault(): در صورت موفقیت آمیز بودن نتیجه، اولین مورد را برمی گرداند، در غیر این صورت مقدار پیش فرض را برمی گرداند.
ForEach(Action): در صورت موفقیت آمیز بودن نتیجه، عمل مشخص شده را برای هر آیتم در مقدار نتیجه اجرا می کند.
FromError(Error): یک نمونه جدید از EnumerableResult ایجاد می کند کلاس با خطای مشخص شده
FromResult(نتیجه>): یک نتیجه از IEnumerable را به یک EnumerableResult تبدیل می کند.
FromValue(IEnumerable): یک نمونه جدید از EnumerableResult ایجاد می کند کلاس با مقدار قابل شمارش مشخص شده.
FromValue(A): یک نمونه جدید از EnumerableResult ایجاد می کند کلاس با مقدار واحد مشخص شده
GetObjectValueOrDefault(): شی نادیده گرفته شده محافظت شده GetObjectValueOrDefault()
اگر شکست خورد (عملکرد>): نتیجه را به لیست تبدیل می کند یا تابعی برای تبدیل خطا به آن می دهد.
نقشه(کارکرد، قابل شمارش>): مقدار نتیجه را با استفاده از یک تابع به یک مقدار نتیجه جدید نگاشت می کند.
نقشه(کارکرد): در صورت موفقیت آمیز بودن نتیجه، هر مورد را با استفاده از تابع مشخص شده foreach مورد نقشه برداری می کند.
نقشه (اقدام>، کارکرد): مقدار نتیجه را به یک مقدار voidresult جدید نگاشت می کند.
نقشه (اقدام>، اقدام): مقدار نتیجه را به یک مقدار voidresult جدید نگاشت می کند.
نقشه(B): نتیجه موفقیت آمیز را با استفاده از مقدار مشخص شده به یک نتیجه جدید نگاشت می کند.
مطابقت دادن(کارکرد,B>, Func): مقدار نتیجه را با یک مقدار یا خطای جدید با استفاده از دو تابع مطابقت می دهد.
مطابقت دادن(کارکردFunc>Error,IReadOnlyList>): مقدار نتیجه را با یک مقدار لیست جدید با استفاده از یک تابع foreach یا خطا با استفاده از یک تابع لیست مطابقت می دهد.
MatchOrNull: در صورتی که نتیجه ناموفق باشد، مقدار نتیجه یا null را برمی‌گرداند.
انتخاب کنید(کارکرد): نام مستعار برای نقشه. در صورت موفقیت آمیز بودن نتیجه، هر مورد را با استفاده از تابع مشخص شده انتخاب می کند.
ToArray(): نتیجه را به آرایه تبدیل می کند.
ToList(): نتیجه را به لیست تبدیل می کند.
ValueOrThrow(): مقدار نتیجه را دریافت می کند یا در صورت عدم موفقیت، یک استثنا ایجاد می کند.
کجا (عملکرد): در صورت موفقیت آمیز بودن نتیجه، موارد را با استفاده از تابع مشخص شده فیلتر می کند.
WithError(Error): نمونه جدیدی از EnumerableResult را راه اندازی می کند کلاس با خطای مشخص شده
WithValue(IEnumerable): نمونه جدیدی از EnumerableResult را راه اندازی می کند کلاس با مقدار مشخص شده

این پست در مدیوم نیز منتشر شده است.

Rop.Results9 کتابخانه ای است که برای بازگرداندن یک نتیجه خاص یا یک خطا از یک عملیات طراحی شده است و نیازی به استفاده از استثناها نیست.

به عنوان بسته Nuget در دسترس است Rop.Results9 و کد منبع در github در Rop.Results9 موجود است

نتایج می تواند 3 نوع باشد:

  • VoidResult: جایی که فقط موفقیت یا خطا در عملیات برگردانده می شود

  • نتیجه: جایی که خطا یا نتیجه خاصی از نوع T برگردانده می شود

  • Enumerable Result: جایی که خطا یا یک نتیجه قابل شمارش از نوع T برگردانده می شود

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

مثال:



public Result Divide1(int dividend, int divisor)
{
  if (divisor == 0)
  {
    return Error.Fail("Cannot divide by zero.");
  }
  else
  {
    return dividend / divisor;
  }
}


وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای پردازش این نتیجه، راه های مختلفی برای انجام آن وجود دارد. مستقیم ترین راه این است که بررسی کنید آیا نتیجه شکست خورده است و خطا را به سمت بالا ارسال کنید، در غیر این صورت از مقدار برگشتی استفاده کنید:



public VoidResult ShowDivide2(int divident,int divisor)
{
  var result = Divide1(divident, divisor);
  if (result.IsFailed)
    return result;
  Console.WriteLine($"The result is {result.Value!}");
  return VoidResult.Ok;
}


وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

همچنین می توانید نتیجه را بین مقدار صحیح و خطا ترسیم کنید.



public VoidResult ShowDivide(int divident,int divisor)
{
  var result = Divide1(divident, divisor);
  return result.Map(
            v => Console.WriteLine($"The result is {v}"),
            e => Console.WriteLine($"Error: {e.Value}")
  );
}


وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این کتابخانه بسیار کامل است و شامل چندین سناریو ممکن است. کد مستند شده در GitHub است، اما در اینجا یک خلاصه کوتاه وجود دارد:

کلاس ها:

  • CancelError: نشان دهنده خطایی است که هنگام لغو یک عملیات رخ می دهد.
  • CastError: نشان دهنده خطایی است که زمانی رخ می دهد که عملیاتی قابل انتقال نیست.
  • EmptyError: نشان دهنده خطایی است که زمانی رخ می دهد که مقدار نتیجه خالی باشد.
  • خطا: نشان دهنده یک خطا در شیء نتیجه است.
  • Error: یک شی خطا را با یک داده مرتبط نشان می دهد.
  • ExceptionError: نشان دهنده خطایی است که به دلیل یک استثنا رخ داده است.
  • FailError: نشان دهنده خطایی است که در صورت شکست یک عملیات رخ می دهد.
  • MultiError: نشان دهنده خطایی است که دارای چندین خطا است.
  • NotEnumerableError: نشان دهنده خطایی است که زمانی رخ می دهد که یک عملیات قابل شمارش نباشد.
  • NullError: نشان دهنده خطایی است که زمانی رخ می دهد که مقدار نتیجه صفر باشد.
  • TimeOutError: نشان دهنده یک خطای ناشی از مهلت زمانی است.
  • UnknownError: نشان دهنده یک خطای ناشناخته است.

  • نتیجه: کلاس استاتیک حاوی متدهای مختلف برای کار با Result اشیاء

  • نتیجه: نتیجه ای را با مقداری نشان می دهد که می تواند موفقیت آمیز باشد یا حاوی خطا باشد.

  • Enumerable Result: نشان دهنده نتیجه عملیاتی است که مقدار قابل شمارش را برمی گرداند.

  • ResultHelper: یک کلاس ثابت حاوی متدهای پسوندی برای Result کلاس

  • VoidResult: نتیجه ای را نشان می دهد که حاوی مقدار نیست. اما می تواند موفق یا شکست بخورد.

رابط IRresult

نشان دهنده نتیجه عملیاتی است که می تواند با موفقیت یا شکست مواجه شود.

خواص:

  • خطا: در صورت وجود، خطای مرتبط با این نمونه را دریافت می کند.
  • IsFailed: مقداری را دریافت می کند که نشان می دهد آیا این نمونه شکست خورده است یا خیر.
  • IsFailedAndNotNull: مقداری را دریافت می کند که نشان می دهد آیا این نمونه شکست خورده است و مقدار null دلیل آن نیست.
  • IsNull: مقداری را دریافت می کند که نشان می دهد این نمونه تهی است یا خیر.
  • IsOk: نام مستعار IsSuccessful است
  • IsOkOrNull: اگر نتیجه موفقیت آمیز یا تهی باشد، true را برمی گرداند.
  • IsSuccessful: مقداری را دریافت می کند که نشان می دهد آیا این نمونه موفق است یا خیر.

روش ها:

  • GetObjectValueOrDefault(): به طور مستقیم مقدار نتیجه را به عنوان یک شی برمی گرداند.
  • ThrowIfFailed(): در صورتی که این نمونه ناموفق باشد، یک استثنا ایجاد می کند.

نتیجه کلاس

نتیجه ای را با مقداری نشان می دهد که می تواند موفقیت آمیز باشد یا حاوی خطا باشد.

نتیجه type اعضای زیر را در معرض دید قرار می دهد.

سازندگان:

  • Result(T): نمونه جدیدی از کلاس Result را با یک مقدار راه اندازی می کند.
  • Result(Error): نمونه جدیدی از Result را راه اندازی می کند کلاس با خطا

خواص:

  • خطا: مقدار خطا را دریافت می کند.
  • Value: مقدار نتیجه را دریافت می کند.

روش ها:

Enumerable Result کلاس

نشان دهنده نتیجه عملیاتی است که یک مقدار قابل شمارش را برمی گرداند.

سازندگان:

خواص:

  • IsEmpty: EnumerableResult خالی است.
  • IsFailedOrEmpty: EmumerableResult ناموفق یا خالی است.
  • IsNullOrEmpty: نام مستعار برای IsFailedOrEmpty
  • مقدار: مقدار نتیجه را به عنوان یک لیست فقط خواندنی دریافت می کند.
  • خطا: مقدار خطا را دریافت می کند.

روش ها:

این پست در مدیوم نیز منتشر شده است.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا