our notes for our youngers

July 24, 2009

basic of C# (part 8)

Filed under: Basic of C# — Tags: , , , , — sevenlamp @ 5:03 PM

မေန႔က Program ေလးနဲ႔ပဲ ဆက္ေျပာရေအာင္ဗ်ာ။ အဲ့ဒီprogram ေလးမွာ user ဆီကေန number value တစ္ခုေတာင္းတယ္။ square တန္ဖိုးကို output ထုတ္ျပတယ္။ အိုေက။ ဒါကို user ကေန သတိမထားမိပဲ number မဟုတ္တဲ႔ တျခား character ေတြထည့္လိုက္တယ္ဆိုပါေတာ့… ကဲ program ဘာျဖစ္သြားမလဲ?

ဒီပံုေလးထဲကလို ျဖစ္သြားမွာေပါ့ဗ်ာ….

ဒါကို error တက္သြားတယ္လို႔ ေခၚမယ္ထင္တယ္။ ဟုတ္တယ္ဟုတ္🙂

ကဲ… အခု ကြၽန္ေတာ္ေျပာခ်င္တာက Error ေတြအေၾကာင္းပါပဲဗ်ာ။ ကြၽန္ေတာ္တို႔ program ေတြေရးတဲ႔အခါ error ဆိုတာေတြနဲ႔က မလြဲမေသြေတြ႔ၾကံဳေနရမွာပါပဲ။ အဓိကကေတာ့ error အမ်ိဳးအစား ၃ မ်ိဳးရွိတယ္ဗ်။

1 – compile error ( grammar error, syntax error လိုလဲေခၚေသးတယ္ဗ် )

2 – logic error ( semantic error )

3 – run time error

1)    Compile Error

Compile error ဘယ္အခ်ိန္မွာ ျဖစ္လည္းဆိုေတာ့ ကြၽန္ေတာ္တို႔ ေရးလိုက္တဲ႔ source code ေတြကို compiler က နားမလည္ေတာ့ဘူး ဆိုရင္ compile error ျဖစ္တာေပါ့။ ဥပမာအားျဖင့္ statement အဆံုးမွာ semicolon (;) က်န္ခဲ႔တာတို႔။ Main function ကို m အေသးနဲ႔ ေရးတာတို႔ စသည့္ျဖင့္ေပါ့။ compile error က အေတြ႔အမ်ားဆံုးနဲ႔ ေျဖရွင္းရအလြယ္ဆံုး error အမ်ိဳးအစားျဖစ္တယ္ဗ်။

2)    Logic Error

Logic error ဆိုတာကေတာ့ programmer ရဲ့ စဥ္းစားပံုမွားလို႔ ျဖစ္ေစ၊ careless ျဖစ္ျပီး မွား ရိုက္မိလို႔ ျဖစ္ေစ၊ program ရဲ့ output မွာ အေျဖမွန္ မထြက္ေတာ့ပဲ၊ wrong result ထြက္လာတာမ်ိဳးကို ဆိုလိုတာပါ။ ဥပမာ..

Console.WriteLine(“Square of {0} is {1}”, num, num*num);

လို႔ ေရးရမယ့္ေနရာမွာ

Console.WriteLine(“Square of {0} is {1}”, num, num+num);

လို႔ ေရးလိုက္မိတယ္ဆိုပါစို႔။ ဒါဆိုရင္ program က compile error တက္မလား ? မတက္ဘူးေနာ္ result ေတာ့ျပမွာပဲ။ ဒါေပမယ့္ ျပတဲ႔ အေျဖက ကိုယ္လိုခ်င္တဲ႔ အေျဖထြက္မလား.. မထြက္ေတာ့ဘူးေလ။ ဟုတ္တယ္မလား။ ဒါဆိုရင္ ဒီ program မွန္တယ္လို႔ ေျပာလို႔ ရမလား။ မရပါဘူး။ ဒီလို error မ်ိဳးကို logic error လို႔ ေခၚပါတယ္။ logic error ေတြကို ေျဖရွင္းဖို႔ အတြက္ေတာ့ ကြၽန္ေတာ္တို႔ program ကို line by line Trace လိုက္ျပီး error ကိုရွာရပါမယ္။

3)    Runtime Error

Runtime error ကေတာ့ အေပၚဆံုးမွာ ကြၽန္ေတာ္ျပထားတဲ႔ ပံုထဲက error မ်ိဳးေပါ့။ user fault ေၾကာင့္ျဖစ္ေစ၊ ကြန္ပ်ဴတာရဲ့ အမွားေၾကာင့္ျဖစ္ေစ program မွားသြားတာမ်ိဳးေပါ့။ အျမဲတမ္းမွားမလားဆိုေတာ့ user သာ အမွန္ထည့္ရင္ မမွားဘူး။ user ကမွားထည့္တာနဲ႔ ကြၽန္ေတာ္တို႔ program လည္း မွားသြားမယ္။ ဒါေပမယ့္ တကယ္ေကာင္းမြန္ျပည့္စံုတဲ႔ program တစ္ခုျဖစ္ဖို႔အတြက္ ဒီလို error မ်ိဳးေတြကိုလည္း မျဖစ္ေအာင္ programmer က စဥ္းစားေပးနိုင္ရမယ္။

Runtime error ေတြကို ေျဖရွင္းဖို႔အတြက္ေတာ့ ကြၽန္ေတာ္တို႔ Error Handling (Exception Handling) Statement ကိုသံုးရပါမယ္။ အားလံုး သိျပီးသားျဖစ္တဲ႔ try…..catch ကိုေျပာတာပါ။

Exception Handling

Runtime error ေတြကို handle လုပ္ဖို႔အတြက္ error ျဖစ္နိုင္တဲ႔ statement ေတြကို try{ နဲ႔ } ၾကားမွာ ေရးရပါမယ္။ ျပီးရင္ အကယ္လို႔ error ျဖစ္ခဲ႔သည္ရွိေသာ္ အဲ့ဒီ error ကို ကိုင္တြယ္ေျဖရွင္းေပမယ့္ statement ေတြကိုေတာ့ catch{ နဲ႔ } ၾကားမွာ ေရးရပါမယ္။

ဥပမာ…

try{
	num = Convert.ToInt32(temp);
}
catch{
	Console.WriteLine(“Invalid Input”);
	num = 0;
}

String temp ထဲမွာ ရွိတဲ႔ data ကို integer အျဖစ္ေျပာင္းလို႔ ရရင္ num ထဲကို ၀င္သြားမယ္။ catch ထဲကို မ၀င္ပဲ Program အလုပ္ဆက္လုပ္သြားမယ္။ ေျပာင္းလို႔ မရဘူးဆိုရင္ေတာ့ catch ထဲကို ၀င္လာျပီး user ကို error message ျပတယ္။ num ထဲကို zero ထည့္ျပီး program အလုပ္ဆက္လုပ္ပါလိမ့္မယ္။ try.. catch ကိုသံုးျခင္းေၾကာင့္ ကြၽန္ေတာ္တို႔ program က လမ္းတ၀က္မွာ ရပ္သြားတာမ်ိဳး ရွိေတာ့မွာ မဟုတ္ပါဘူး။
အခု error handling statement ကို detail ၾကည့္ရေအာင္။ အေပၚက example အတိုင္းဆိုရင္ Convert လုပ္တဲ႔ အခ်ိန္မွာ error တက္တာနဲ႔ catch ထဲက အလုပ္ေတြကို သြားျပီးလုပ္မွာပါ။ try statement ထဲမွာ error ျဖစ္နိုင္တဲ႔ statement က တစ္ခုထဲရွိတဲ႔ အခ်ိန္မွာ သိပ္ျပီး ကိစၥမရွိပဲ error messge ျပလို႔ရပါတယ္။ ဒါေပမယ့္ တခါတေလမွာ error ျဖစ္နိုင္တဲ႔ statement ေတြက တစ္ခုထက္ပိုျပီးေတာ့လည္း ရွိနိုင္ပါတယ္။ error အမ်ိဳးအစားကလည္း မတူဘူးဆိုရင္ catch ထဲမွာ user ကို error ျပတဲ႔ ေနရာမွာ detail information ျပလို႔ မရတဲ႔ အခက္အခဲရွိလာပါတယ္။ ဒီ example ထဲမွာ ဆိုရင္ပဲ error ျဖစ္နိုင္တဲ႔ အေျခအေနက ၂ မ်ိဳးရွိေနပါတယ္။ number အစားတျခားဟာထည့္လိုက္ရင္ FormatException ျဖစ္ျပီး၊ number ၾကီးပဲ ၁၅ လံုးေလာက္ရိုက္ထည့္လိုက္ရင္ OverFlowException ျဖစ္ပါတယ္။ ဒါေပမယ့္ ဘယ္exception ပဲျဖစ္ျဖစ္ ကြၽန္ေတာ္တို႔ catch ထဲမွာ ေရးထားတဲ႔ Invalid Input ဆိုတဲ႔ message ပဲ ျပပါလိမ့္မယ္။ ဒါကို ကြၽန္ေတာ္တို႔က ပိုျပီး detail ၾကတဲ႔ message ျပခ်င္တယ္ဆိုရင္ေတာ့ Catch ေရးတဲ႔ အခါမွာ Exception အမ်ိဳးအစားနဲ႔ parameter ခြဲျပီး လက္ခံလို႔လည္း ရပါတယ္။ ဒီလိုမ်ိဳးပါ..

try{
	num = Convert.ToInt32(temp);
}
catch( FormatException ex )
{
	Console.WriteLine(“Please enter number value”);
	num = 0;
}
catch( OverflowException ex )
{
	Console.WriteLine(“Your number is too large”);
	num = 0;
}
catch
{
	Console.WriteLine(“Unknown error”);
	num = 0;
}

ဒါဆိုရင္ေတာ့ user ထည့္တာ number မဟုတ္ရင္ Please enter number value ဆိုျပီး ျပပါမယ္။ တန္ဖိုး အရမ္းၾကီးေနရင္ေတာ့ Your number is too large ဆိုျပီး detail ျပနိုင္ပါလိမ့္မယ္။ ကဲဒါဆိုရင္ error အမ်ိဳးအစားေတြနဲ႔ exception handling အေၾကာင္းအၾကမ္းေလးေတာ့ သိမယ္ထင္ပါတယ္။ program ေလးကို ျပန္ျပင္ေရးလုိက္ပါဦးေနာ္။

using System;
    class Program
    {
        static void Main()
        {
            string temp; int num;
            Console.Write("Enter a number : ");
            temp = Console.ReadLine();
            try
            {
                num = Convert.ToInt32(temp);
            }
            catch (FormatException ex)
            {
                Console.WriteLine("Please enter number value");
                num = 0;
            }
            catch (OverflowException ex)
            {
                Console.WriteLine("Your number is too large");
                num = 0;
            }
            catch
            {
                Console.WriteLine("Unknown error");
                num = 0;
            }
            Console.WriteLine("Square of {0} is {1}", num, num * num);
            Console.Write("\npress enter to close...");
            Console.Read();
        }
    }

ေနာက္ေနဆက္ၾကတာေပါ့။

Leave a Comment »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Create a free website or blog at WordPress.com.

%d bloggers like this: