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 ক্লাসটি আপনার জন্য দেওয়া হয়েছে এবং এটি পরিবর্তন করা উচিত নয়।
CalculationException-এর ডেফিনিশন সম্পূর্ণ করুনCalculationException-এর কনস্ট্রাক্টরের ডেফিনিশন সম্পূর্ণ করুন, যেটি ক্যালকুলেটর থেকে থ্রো হওয়া যেকোনো এক্সেপশন এবং এক্সেপশনটি থ্রো হওয়ার সময় প্রসেস হতে থাকা অপারেন্ডগুলো সংরক্ষণ (র্যাপ) করবে।
CalculatorTestHarness.Multiply() মেথডটি ইমপ্লিমেন্ট করুন, যেটি কনস্ট্রাক্টরে পাস করা Calculator ইনস্ট্যান্সের Calculator.Multiply() মেথড কল করবে এবং 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
CalculatorTestHarness.TestMultiplication() মেথডটি ইমপ্লিমেন্ট করুন, যেটি দুটি ইন্টিজার নেয় এবং CalculatorTestHarness.Multiply() মেথড কল করে। "Multiply succeeded" রিটার্ন হয়।
var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(6, 7);
// => "Multiply succeeded"
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
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
Exercism-এ সাইন আপ করুন, C# ট্র্যাকের 62টি কনসেপ্ট178টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।