کلاس DivideByZeroException
نام دوره: زبان سی شارپ مقدماتی
نویسنده: علی مقدم جاه (مدرس دوره)
کلاس DivideByZeroException چیست؟
در پست آموزش کلاس Exception، با توضیحات اولیه در رابطه با تفاوت میان ارور و استثنا آشنا شدهاید.
فرض را بر این بگیرید که برنامهای نوشته اید تا از کاربر دو عدد به عنوان ورودی دریافت کرده و عدد دوم را بر عدد اول تقسیم کند:
Console.Write("Enter number 1 : ");
int num1 = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter number 2 : ");
int num2 = Convert.ToInt32(Console.ReadLine());
float avg = num1 / num2;
Console.WriteLine($"Avg is: {avg}");
اگر قطعه کد بالا را اجرا کرده و برای هر دو عدد num1 و num2، یک عدد صحیح وارد نمایید، سیستم بدون هیچ خطایی خروجی را با استفاده از متد WriteLine بر روی مانیتور چاپ میکند.
اما اگر عدد دوم را صفر دهید، ارور زیر نمایش داده خواهد داد:
برای جلوگیری از بروز این خطا، باید از دستور try catch استفاده کنید:
try
{
Console.Write("Enter number 1 : ");
int num1 = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter number 2 : ");
int num2 = Convert.ToInt32(Console.ReadLine());
float avg = num1 / num2;
Console.WriteLine($"Avg is: {avg}");
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
همانطور که در قطعه کد بالا مشاهده میکنید، ما قسمتی از کدهای خود را که احتمال بروز خطا یا استثنا داشتند، درون محدوده بلاک try قرار دادهایم، اینکار یعنی داریم به سیستم میفهمانیم که تلاش کن این کدها را اجرا کنی، اگر توانستی کدها را اجرا کنی که چه خوب و بیخیال کدهای داخل بلاک Catch بشو، اما اگر کدهای داخل بلاک try به مشکلی برخوردند و تو نتوانستی آنها را اجرا کنی، درنتیجه کدهای داخل بلاک catch را اجرا کن.
همچنین در محدوده بلاک catch، به عنوان ورودی متد WriteLine، پراپرتی Message را توسط شئ ex فراخوانی کردیم.
این پراپرتی، توانایی چاپ علت ارور بوجود آمده را به شکل مناسب و بدون نمایش (لو رفتن) کدهای برنامهنویسی به کاربران را دارد.
شئ ex از کلاس پشت سر خود یعنی Exception تعریف شده که باید حتما در پرانتز Catch نوشته شود.
نکته: اگر نمیدانستید که ممکن است این چند خط کد چه خطایی را بوجود آورند، میتوانید مثل مثال بالا از کلاس Exception تنها استفاده کنید.
اما اگر مثل الان میدانستید که خطای مربوط به تقسیم بر صفر ممکن است بهوجود آید، پس بهتر است به جای استفاده از کلاس والد (Exception)، از کلاس فرزند مختص به این استثنا استفاده کنیم:
try
{
Console.Write("Enter number 1 : ");
int num1 = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter number 2 : ");
int num2 = Convert.ToInt32(Console.ReadLine());
float avg = num1 / num2;
Console.WriteLine($"Avg is: {avg}");
}
catch (DivideByZeroException ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
جهت شرکت در دورههای زبان برنامه نویسی سیشارپ، از کد تخفیف heplc30 استفاده کنید.