مسیرها
/
C#
C#
/
تمرین‌ها
/
سازهای تگزاس
سازهای تگزاس

سازهای تگزاس

تمرین یادگیری

مقدمه

فیلتر کردن استثناها

کلیدواژه‌ی فیلتر کردن استثناها when است. این کلیدواژه بعد از دستور catch قرار می‌گیرد و می‌تواند یک عبارت منطقی دریافت کند که هر مقداری را که در آن لحظه در دسترس است در بر بگیرد. اگر نتیجه‌ی این عبارت «درست» باشد، بلوکی که به آن دستور catch مربوط است اجرا می‌شود؛ در غیر این صورت، دستور catch بعدی، اگر وجود داشته باشد، بررسی می‌شود.

try
{
    // do stuff
}
catch (Exception ex) when (ex.Message != "")
{
    // output the message when it is not empty
}
catch (Exception ex)
{
    // show stack trace or something.
}

استثناهای تعریف‌شده توسط کاربر

استثنای تعریف‌شده توسط کاربر به هر کلاسی گفته می‌شود که در کد شما تعریف شده باشد و از System.Exception مشتق شده باشد. چنین کلاسی تابع همه‌ی قواعد وراثت کلاس است، اما علاوه بر آن، کامپایلر و محیط اجرای زبان با این کلاس‌ها رفتاری ویژه دارند و اجازه می‌دهند نمونه‌هایشان، همان‌طور که در تمرین exceptions توضیح داده شد، بیرون از جریان عادی کنترل پرتاب و گرفته شوند.

از استثناهای تعریف‌شده توسط کاربر اغلب برای حمل اطلاعات بیشتری، مانند یک پیام و سایر داده‌های مرتبط، استفاده می‌شود تا در اختیار روال‌هایی که استثنا را می‌گیرند قرار بگیرد.

دستورالعمل‌ها

در حین کار در Instruments of Texas، به شما مأموریت داده شده است که روی یک ماشین‌حساب آزمایشی نوشته‌شده با C# کار کنید. شما در حال ساختن یک بستر آزمون هستید تا شماری از توابع ماشین‌حساب را، با شروع از ضرب، بررسی کنید. خواهید دید که وقتی هر دو عملوند ضرب منفی باشند، نگرانی ویژه‌ای وجود دارد.

کلاس Calculator برای شما فراهم شده است و نباید تغییر داده شود.

1. تعریف استثنای تعریف‌شده توسط کاربر CalculationException را کامل کنید

تعریف سازنده‌ی CalculationException را کامل کنید؛ این سازنده باید هر استثنایی را که ماشین‌حساب پرتاب می‌کند و همچنین عملوندهایی را که در لحظه‌ی پرتاب استثنا در حال پردازش هستند، ذخیره (بسته‌بندی) کند.

2. شرایط سرریز را در ماشین‌حساب مدیریت کنید و اطلاعات بیشتری در اختیار فراخواننده قرار دهید

متد CalculatorTestHarness.Multiply() را پیاده‌سازی کنید؛ این متد باید متد Calculator.Multiply() از نمونه‌ی Calculatorی که به سازنده پاس داده شده است را فراخوانی کند و مقادیر صحیح x و y را به آن بدهد. اگر در متد Calculator.Multiply() سرریزی رخ دهد، یک OverflowException پرتاب می‌شود. این استثنا باید در متد CalculatorTestHarness.Multiply() گرفته و در یک CalculationException بسته‌بندی شود و مقادیر x و y که پاس داده می‌شوند باید به عنوان عملوندهای استثنا ذخیره شوند. شیء CalculationException تازه‌ساخته‌شده باید پرتاب شود. اگر متد Calculator.Multiply() موفق باشد، می‌توانید مقدار بازگشتی آن را نادیده بگیرید.

var cth = new CalculatorTestHarness(new Calculator());
cth.Multiply(Int32.MaxValue, Int32.MaxValue);
// => throws an instance of CalculationException

var cth2 = new CalculatorTestHarness(new Calculator());
cth2.Multiply(3, 2);
// => silently exits

3. عملیات ضرب را برای ورودی‌های معتبر آزمایش کنید

متد CalculatorTestHarness.TestMultiplication() را پیاده‌سازی کنید که دو عدد صحیح می‌گیرد و متد CalculatorTestHarness.Multiply() را فراخوانی می‌کند. در این صورت "Multiply succeeded" بازگردانده می‌شود.

var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(6, 7);
// => "Multiply succeeded"

4. عملیات ضرب را برای ورودی‌های منفی آزمایش کنید

متد CalculatorTestHarness.TestMultiplication() را طوری تغییر دهید که اگر هر دو آرگومان صحیح منفی باشند (کمتر از صفر)، "Multiply failed for negative operands. <INNER_EXCEPTION_MESSAGE>" بازگردانده شود.

جانگهدار <INNER_EXCEPTION_MESSAGE> باید با پیام استثنای درونی CalculationException جایگزین شود.

var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(-2, -Int32.MaxValue);
// => "Multiply failed for negative operands. " + innerException.Message

5. عملیات ضرب را برای ورودی‌های مثبت آزمایش کنید

متد CalculatorTestHarness.TestMultiplication() را طوری تغییر دهید که اگر حداقل یکی از آرگومان‌های صحیح منفی نباشد، "Multiply failed for mixed or positive operands. <INNER_EXCEPTION_MESSAGE>" بازگردانده شود.

جانگهدار <INNER_EXCEPTION_MESSAGE> باید با پیام استثنای درونی CalculationException جایگزین شود.

var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(Int32.MaxValue, Int32.MaxValue);
// => "Multiply failed for mixed or positive operands. " + innerException.Message
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
C# Exercism

آماده‌اید سازهای تگزاس را شروع کنید؟

در Exercism ثبت‌نام کنید تا C# را همراه با 62 مفهوم178 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.