February 19, 2012

ကွန်တရိုးများ

ပရိုဂရမ်ဆိုသည်မှာ အစီအစဉ်များပင်ဖြစ်၏။ ထို့ကြောင့် ပရိုဂရမ်ကောင်းဆိုသည်မှာ အစီအစဉ်ကောင်းများ ဖြစ်ကြပေသည်။ မည်သည့်ပရိုဂရမ်များကို ပရိုဂရမ်ကောင်းများဟု ခေါ်ဆိုမည်နည်း။ မည်သည့် အချိန်အခါမျိုးမှာမဆို ဟာကွက်မရှိအောင် စီစဉ်ထားသော အစီအစဉ်များကို အစီအစဉ်ကောင်းဟု ခေါ်နိုင်ပါသည်။

ပြီးခဲ့သော အခြေခံ ပရိုဂရမ်မင်း အခန်းများတွင် ကိန်းများနှင့် သင်္ကေတများ အကြောင်းကို ဖော်ပြခဲ့၏။ ကိန်းများ သင်္ကေတများဖြင့် အစီအစဉ်ကောင်းတစ်ခုကို ရေးသားရန် မလုံလောက်သေးပါ။

မိုးလေဝသ သတင်းတွင် မိုးရွာမည်ဟု ဖော်ပြထားပါက ထီးယူသွားပါမည်။ ဒါမှမဟုတ်ပါက ထီးမယူသွားပါ။
ညနေ ၆နာရီ မထိုးမချင်း ဘီယာဆိုင်မသွားပါ။ အစရှိသဖြင့် အကြောင်းအရာတစ်ခုခုကြောင့် တစ်ခုခု လုပ်ဆောင်ရန် အသုံးပြုသော စကားလုံးများကို ပရိုဂရမ်မင်းဘာသာရပ်တွင် ကွန်တရိုးများဟု ခေါ်ဆိုလေ့ရှိ၏။

လော့ဂျစ်သုံး ကွန်တရိုးများ


if ဝါကျ


အခြေအနေတစ်ခုကို ဖော်ပြရာတွင် Java ပရိုဂရမ် အတွင်းတွင် if ဝါကျကို အသုံးပြု၍ ဖော်ပြလေ့ရှိပါသည်။

အကယ်၍ မိုးရွာခဲ့လျှင် ထီးဆောင်းသွားပါမည်။
if (မိုးရွာသည်) {
    ထီးဆောင်းသွားပါမည်;
}
Java ဘာသာရပ်တွင် if ဝါကျ၏ အခြေအနေကို ဖော်ပြရာတွင် if ၏ နောက်ရှိ လက်သည်းကွင်းအတွင်းတွင် အခြေအနေဖော်ပြချက်ကို ရေးသားရန် လိုအပ်ပါသည်။ အခြေအနေများသည်၊ တူညီသည်၊ ကြီးမားသည်၊ အစရှိသည့် နှိုင်းယှဉ်ဖော်ပြချက်များကို အသုံးပြုနိုင်ပါသည်။

အသက် ၂၀အောက်ဆိုလျှင် မကြည့်ရပါ။
int age;
...
if (age < 20) {
    မကြည့်ပါနှင့်;
}

ပရိုဂရမ်ဘက်မှကြည့်သောအခါ မိုးရွာသည် ဆိုသည်မှာ မိုးရွာသည်ဆိုသည်မှာ မှန်ပါသည်ဟု အဓိပ္ပါယ်ရပါသည်။
boolean raining;
...
// မိုးရွာလျှင်
if (raining == true) {
    ထီးဆောင်းပါမည်;
}
// တနည်းအားဖြင့်
if (raining) {
    ထီးဆောင်းပါမည်;
}

// မိုးမရွာပါက
if (raining != true) {
    ထီးမဆောင်းပါ;
}

// တနည်းအားဖြင့်
if (raining == false) {
    ထီးမဆောင်းပါ;
}

// ဤကဲ့သို့လည်း
if (!raining) {
    ထီးမဆောင်းပါ;
}

အခြေအနေများကို ဖော်ပြရာတွင် အခြေအနေများကို တစ်ခုခြင်း ဖော်ပြနိုင်သလို ပူးတွဲ၍လည်း ဖော်ပြနိုင်ပါသည်။ မိုးရွာလျှင် ထီးဆောင်းမည်၊ နှင်းကျလျှင် ထီးဆောင်မည် ဆိုသည်ကို မိုးရွာလျှင် ဒါမှမဟုတ် နှင်းကျလျှင် ထီးဆောင်းသွားပါမည်ဟုလည်း ရေးသားနိုင်ပါသည်။ ဒါမှမဟုတ်(OR)ကို Java တွင် || ဟု ဖော်ပြနိုင်ပါသည်။
boolean raining;
boolean snowing;
...
if (raining) {
    ထီးဆောင်းပါမည်;
}

if (snowing) {
    ထီးဆောင်းပါမည်;
}

// အောက်ပါအတိုင်းလည်း ရေးသားနိုင်ပါသည်
if (raining || snowing) {
    ထီးဆောင်းပါမည်;
}
တဖန် မိုးရွာ၍ လေထန်ပါက ကဲ့သို့သော အခြေအနေနှစ်ခုကိုလည်း AND ဖော်ပြပုံကို အသုံးပြု၍ ဖော်ပြနိုင်ပါသည်။ Java ဘာသာရပ်တွင် AND အား && ဟုရေးသားနိုင်ပါသည်။
boolean raining;
boolean winding;
...
if (raining && winding) {
    ထီးဆောင်းပါမည်;
}


if / else ဝါကျ

"မိုးရွာလျှင် ထီးဆောင်း၍၊ မိုးမရွာပါက ထီးမဆောင်းပါ" ကဲ့သို့သော ဝါကျများကို အခြေအနေကို တစ်ခုချင်းဖော်ပြနိုင်သကဲ့သို့၊ "အကယ်၍ မိုးရွာခဲ့ပါက ထီးဆောင်မည်။ သို့မဟုတ်ပါက ထီးမဆောင်းပါ" ဟု if / else ကို အသုံးပြု၍ ရေးသားနိုင်ပါသည်။
if (raining) {
    ထီးဆောင်းမည်;
} else {
    ထီးမဆောင်းပါ;
}

if / else if / else ဝါကျ

if else ထက်မက အခြေအနေများကို ကွန်တရိုးလုပ်လိုပါက if / else if / else ဝါကျကို အသုံးပြုနိုင်ပါ။
if (အခြေအနေ၁) {
    အလုပ်၁;
} else if (အခြေအနေ၂) {
    အလုပ်၂;
} else {
    အခြားသော အလုပ်;
}


switch ဝါကျ

အခြေအနေများကို အသုံးပြုရာတွင် if / else if / else အပြင် switch ဝါကျကို အသုံးပြုနိုင်ပါသေးသည်။ switch ဝါကျတွင် အသုံးပြုနိုင်သော ပါရာမီတာများ၏ ပုံစံများမှာ ကနဦးပုံစံများနှင့် ၎င်း၏ ရက်ပါပုံစံ အော့ဘဂျက်များ၊ ထို့အပြင် Java 7 မှစ၍ String ပုံစံများကိုလည်း အသုံးပြုလာနိုင်ပါသည်။
    public static void main (String [] args) {
        String param = args [0];

        switch (param) {
        case "sunday":
            System.out.println("Today is a holiday.");
            break;
        case "monday":
            System.out.println("Today is not a holiday.");
            break;
        case "tuesday":
            System.out.println("Today is not a holiday.");
            break;
        case "wednesday":
            System.out.println("Today is not a holiday.");
            break;
        case "thursday":
            System.out.println("Today is not a holiday.");
            break;
        case "friday":
            System.out.println("Today is not a holiday.");
            break;
        case "saturday":
            System.out.println("Today is a holiday.");
            break;
        default:
            break;
        }
    }
တဖန် အောက်ပါကဲ့သို့လည်း တူညီသော အရာများကို ပူးတွဲ၍ ရေးသားနိုင်ပါသည်။
    public static void main (String [] args) {
        String param = args [0];

        switch (param) {
        case "saturday":
        case "sunday":
            System.out.println("Today is a holiday.");
            break;
        case "monday":
        case "tuesday":
        case "wednesday":
        case "thursday":
        case "friday":
            System.out.println("Today is not a holiday.");
            break;
        default:
            break;
        }
    }
တဖန် အထက်ပါအခြေအနေမျိုးကို if / else if နှင့် လည်း အသုံးပြုနိုင်ပါသည်။
    public static void main (String [] args) {
        String param = args [0];

        if ("saturday".equals(param) ||
            "sunday".equals(param)) {
            System.out.println("Today is a holiday.");
        } else if ("monday".equals(param) ||
            "tuesday".equals(param) ||
            "wednesday".equals(param) ||
            "thursday".equals(param) ||
            "friday".equals(param)) {
            System.out.println("Today is not a holiday.");
        }
    }
ဤကဲ့သို့ ရေးသားရာတွင် အစဉ်ပြေသလိုရေးသားနိုင်ပါသည်။ if else က ကောင်းသလား၊ switch က ကောင်းသလား ဆိုတာကတော့ ဖြေရအတော်ခက်ပါမည်။ ကွန်တရိုးလုပ်ရမည့်အချက်များ နည်းမည်ဆိုပါက လွယ်လင့်တကူ if else ကို အသုံးပြုသည်က မြန်ဆန်ရှင်းလင်းပါသည်။ သို့ရာတွင် အကြောင်းအရာများ များလာမည် ဆိုပါက if else တွေများလာလျှင် ကုဒ်များသည် ရှုပ်ထွေးလာတတ်ပြီး၊ မှားယွင်းလွယ်ကူစေနိုင်ပါသည်။ ထိုအခါမျိုးတွင် switch ဝါကျကို အသုံးပြုသည်က အမြင်ရှင်းလင်းပါသဖြင့် အမှားအယွင်း နည်းပါးစေနိုင်ပါသည်။


loop ဝါကျများ

လုပ်ဆောင်ချက်များကို အကြိမ်ကြိမ် အလုပ်လုပ်စေလိုသည့် အခါမျိုးတွင် Java နှင့် while , do while နှင့် for ဝါကျများကို ပြင်ဆင်ထားပါသည်။

အောက်ပါဝါကျကိုကြည့်ပါ။
public static void writeFiveTimes() {
    System.out.println("1: writing");
    System.out.println("2: writing");
    System.out.println("3: writing");
    System.out.println("4: writing");
    System.out.println("5: writing");
}
အထက်ပါအတိုင်း ရိုးရှင်းစွာ ၅ကြိမ်ရေးသားနိုင်ပါသည်။


do while ဝါကျနှင့် while ဝါကျ

အကြိမ်ကြိမ် အလုပ်လုပ်စေလိုသည့်အခါမျိုးတွင် do while ဒါမှမဟုတ် while ဝါကျကို အသုံးပြုနိုင်ပါသည်။ အောက်ပါ ရေးသားပုံကိုကြည့်ပါ။ စာကြောင်း ၃မှ ၅အကြားရှိ လုပ်ဆောင်ချက်အား၊ စာကြောင်း ၅တွင်ဖော်ပြထားသည့် အခြေအနေအတိုင်းဆိုပါက အကြိမ်ကြိမ် လုပ်ဆောင်နေမည် ဖြစ်သည်။
public static void writeFiveTimes() {
    int i = 1;
    do {
        System.out.println(++i + ": writing");
    } while (i < 5);
}
အထက်ပါ ရေးသားပုံထဲတွင် i သည် ၅ထပ်ငယ်ပါက စာကြောင်း ၄ကို လုပ်ဆောင်စေမည်ဖြစ်သည်။ စာကြောင်း ၄တွင် ++i ဖြင့် i အား တစ်ပေါင်းနေပါသဖြင့် တစ်ကြိမ်လုပ်ပြီးလျှင် i သည် ၂ဖြစ်ပြီး၊ ၅ကြိမ်ရေးပြီးပါက i သည် ၅ ဖြစ်သွားပြီး ဤ do while ဝါကျအတွင်းမှ လွတ်မြောက်မည် ဖြစ်၏။

အထက်ပါ ရေးသားပုံကိုလည်း while တစ်ခုတည်းဖြင့်လည်း ရေးသားနိုင်ပါသည်။
public static void writeFiveTimes() {
    int i = 1;
    while (i < 5) {
        System.out.println(++i + ": writing");
    }
}

for ဝါကျ

အကြိမ်ကြိမ် လုပ်ဆောင်စေသည့် ကွန်တရိုးများကို ရေးသားစေလိုသည့်အခါမျိုးတွင် while အပြင် for ဝါကျကိုလည်း Java တွင် ပြင်ဆင်ထားပါသည်။ ရေးသားပုံမှာ အောက်ပါအတိုင်းဖြစ်၏။
public static void writeFiveTimes() {
    for (int i=0; i < 5; ) {
        System.out.println( ++i + ": writing");
    }
}
အချို့သောအခါများတွင် Array ကဲ့သို့ ကိန်းစဉ်များ၊ List ကဲ့သို့ Collection များကို အကြိမ်ကြိမ်အသုံးပြုလိုသောအခါရှိမည်။ ယခင်ကဆိုလျှင် Iterator ကို အသုံးပြု၍ while ဖြင့် အကြိမ်ကြိမ် လုပ်ဆောင်စေခဲ့ကြပါသည်။ သို့ရာတွင် Java 5 မှစ၍ for ဝါကျပြုပြင် ပြုလုပ်မှု့များကို ဖြည့်စွက်လာပြီး၊ Iterator အဖြစ်ပြောင်းသုံးစရာမလိုတော့ပဲ for ဖြစ်လည်း အသုံးပြုလာနိုင်ပါသည်။
public static void writeFiveTimes() {
    int [] array = {1,2,3,4,5};
    for ( int i : array) {
        System.out.println( ++i + ": writing");
    }
}


breakဖြင့် နှုတ်ထွက်မည်

အထက်ဖော်ပြပါ while၊ do while နှင့် for ဝါကျများဖြင့် အကြိမ်ကြိမ် အလုပ်လုပ်စေနိုင်သည်ကို သိရှိခဲ့ပြီဖြစ်သည်။ သို့ရာတွင် ကိန်းစဉ်တစ်ခုအတွင်းမှ ကိန်းတစ်ခုကို ရှာဖွေသည်ကို စဉ်းစားကြည့်ပါ။ လမ်းခုလတ်တွင် အဖြေတွေ့ရှိသွားပြီဆိုပါက မပြီးမချင်း ဆက်လုပ်ရမည်မှာ သိပ်မနိပ်လှပေ။ အဖြေရသွားလျှင် ဆက်ရှာလည်းထူးမှာမဟုတ်တော့တဲ့အတွက် လမ်းခုလပ်တွင် နှုတ်ထွက်နိုင်ရန် လိုအပ်ပါသည်။ ဤအခါမျိုးတွင် break ကို အသုံးပြု၍ နှုတ်ထွက်နိုင်ပါသည်။
public String search(String [] array, String searchStr) {
    String result;
    for (String s : array) {
        if (searchStr.equals(s)) {
            result=s;
            break;
        }
    }
    return result;
}
စာကြောင်း ၄တွင် ရှာဖွေလိုသည့် searchStr သည် loop လုပ်နေသည့် s နှင့် တူညီပါက၊ စာကြောင်း ၅တွင် အဖြေဖြစ်သော result အား s ဖြင့် အစားထိုးပြီး၊ စာကြောင်း ၆တွင် break ဖြင့် for ဝါကျအတွင်းမှ နှုတ်ထွက်ပါသည်။ နောက်ဆုံး စာကြောင်း ၉ တွင် ရှာဖွေထားသော resultအား return ဖြင့် ဤလုပ်ဆောင်ချက်အား ခေါ်ဆိုနေသည့် နေရာကို ပြန်ပို့ပေးစေပါသည်။

အထက်ပါလုပ်ဆောင်ချက်ကဲ့သို့ ရိုးရှင်းသော လုပ်ဆောင်ချက်များဆိုလျှင် ခပ်ကြမ်းကြမ်း return လုပ်၍လည်းရပါသည်။
public String search(String [] array, String searchStr) {
    for (String s : array) {
        if (searchStr.equals(s)) {
            return s;
        }
    }
    return null;
}
စာကြောင်း ၃တွင် ရှာဖွေလိုသော အဖြေကို တွေ့ပါက စာကြောင်း၄ဖြင့်ထိုအဖြေကို return လုပ်ပါမည်။ နောက်ဆုံး အဖြေကိုရှာမတွေ့ပါက စာကြောင်း ၆ဖြင့် null ကို return လုပ်ရုံပင် ဖြစ်၏။ ရေးသားလိုသည့်လော့ဂျစ်အပေါ်မှုတည်၍ သင့်တော်သလို အသုံးပြုသွားစေလိုပါသည်။ while ဝါကျတွင်လည်း break ကို အသုံးပြု၍ နှုတ်ထွက်နိုင်ပါသည်။


continueဖြင့် ကျော်လုပ်ပါမည်

အောက်ပါအခါမျိုးဆိုလျှင် မည်သို့ပြုလုပ်မည်နည်း။ ကျွှန်တော်တို့ Loop ဝါကျအတွင်းတွင် လုပ်ဆောင်ချက်အမျိုးမျိုးရှိပြီး၊ အနေအထားတစ်ခုခုရောက်လျှင် အောက်ပါ လုပ်ဆောင်ချက်များကို ဆက်မလုပ်ချင်တော့ပါ။ သို့ရာတွင် ဤ loop အတွင်းမှလည်း နှုတ်မထွက်ချင်ဘူး။ အဲ့ဒီလိုအခါမျိုးမှာ continue ကို အသုံးပြုပြီး၊ နောက်အကြိမ်ကို ကျော်လုပ်၍ရပါသည်။ ဤကဲ့သို့အနေအထားမျိုးတွင် if else ကို သုံးပြီး လမ်းများကို ခွဲခြားနိုင်ပေမယ့်၊ for ဝါကျအတွင်းတွင် if else တွေများလာလျှင် nest တွေ နက်နဲလာပြီး၊ စပါဂတ်တီကုဒ်များ (ရှုပ်ထွေးသောကုဒ်များ) ကို ဖြစ်ပွားစေလေ့ရှိသောကြောင့်၊ ရိုးရှင်းစွာ continue ကို အသုံးပြု၍ skip လုပ်နိုင်ပါသည်။ while နှင့် do while တို့တွင်လည်း continue ကို အသုံးပြု၍ Skip လုပ်နိုင်ပါသည်။
public String search(String [] array, String searchStr) {
    for (String s : array) {
        // ရှာဖွေလိုသည့် စာလုံး၏ ပဋ္ဌမစာလုံးဖြင့် မစလျှင်
        if (!s.startsWith(searchStr.subString(0,1))) {
            continue;
        }

        if (searchStr.equals(s)) {
            return s;
        }
    }
    return null;
}
အထက်ပါ ဖော်ပြပါ ကုဒ်များအတိုင်း စာကြောင်း ၄တွင် loop လုပ်နေသော စကားလုံးသည် ရှာဖွေလိုသောစကားလုံး၏ ပဋ္ဌမစာလုံးဖြင့်မစခဲ့ပါက နောက်လော့ဂျစ်ကို မလုပ်ဆောင်တော့ပဲ Skip လုပ်ပြီး၊ နောက်အကြိမ်ကို ဆက်လုပ်မည် ဖြစ်ပါသည်။ ဤနေရာတွင် if ဘလော့အတွင်းသို့ နောက်ဆက်တွဲ လော့ဂျစ်ကို ထည့်သွင်းနိုင်ပါသော်လည်း၊ for အတွင်းရှိ၊ if အတွင်းရှိ if သည် အဆင့်ဆင့်များလာပြီး၊ ပိုမိုရှုပ်ထွေးလာသောအခါ၊ ပရိုဂရမ်မှာ ဖတ်ရခက်ခဲပြီး၊ မှာယွင်းလွယ်ကူသော ပရိုဂရမ်များ ဖြစ်လာတတ်ပါသည်။ ထို့ကြောင့် ပရိုဂရမ်များကို ရေးသားရာတွင် တတ်နိုင်သ၍ တိုရှင်းသော ပရိုဂရမ်များကို ရေးသားရန် အားထုတ်သင့်ပါသည်။


နောက်ဆုံးတွင်


ကျွှန်တော်တို့ Basic Programming ခေါင်းစဉ်ဖြင့်၊ ပရိုဂရမ်ဆိုသည်မှာအဘယ်နည်း၊ ပရိုဂရမ်တွင် အသုံးပြုသော ကိန်းများ၊ သင်္ကေတများနှင့် ကွန်တရိုးများကို လေ့လာခဲ့ပါသည်။ ကျွှန်တော်တို့ ရေးသားလိုသော အစီအစဉ်များကို စဉ်းစား၍ နည်းနည်းချင်း ရေးသားနိုင်ပြီ ဖြစ်သည်။ အကယ်၍ စကရစ်ဘာသာရပ်ဖြစ်ပါက လော့ဂျစ်များကို ရေးပြီး ပရိုဂရမ်များကို အလုပ်လုပ်စေနိုင်ပြီဖြစ်သည်။

သို့ရာတွင် ကျွှန်တော်တို့ ရေးသားလိုသည်မှာ Java ဖြစ်၏။ Java သည် ကလပ်စ်ကို အခြေခံသော ဝတ္တစက္ခုဗေဒ ပရိုဂရမ်မင်း (OOP) တစ်ခုဖြစ်၏။ ကျွှန်တော်တို့ ပရိုဂရမ်ကို ရေးသားနိုင်ရန် ကလပ်စ် နှင့် မက်သတ်များအကြောင်းကို ဆက်ပါဦးမည်။ ပြီးလျှင် Interface , Abstract Class နှင့် Exception Control များ အကြောင်းကို ဖော်ပြပြီး၊ Basic Programming ကို ပြီးဆုံးပါမည်။

Basic Java ကို လေ့လာပြီးသောအခါ Easy Java ကို တစ်ခေါက်ပြန်ဖတ်စေလိုပါသည်။ ပြီးပါမှ Easy Java API ခေါင်းစဉ်ဖြင့် Java တွင်အသုံးများသော အခြေခံ လိုင်ဘရီများကို ဆက်လက် ဖော်ပြသွားပါမည်။ လောလောဆယ်တော့ အခြေခံ ပရိုဂရမ်မင်းကို ပြီးအောင် အားစိုက်ပြီး ရေးသားပါဦးမည်။

ကိုးကား
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/flow.html


လေးစားစွာဖြင့်
မင်းလွင်

10 comments:

  1. Hi there, I believe your web site could
    be having browser compatibility issues. Whenever I take a look
    at your website in Safari, it looks fine however,
    when opening in Internet Explorer, it has some overlapping issues.
    I simply wanted to give you a quick heads up! Aside from that,
    fantastic blog!

    ReplyDelete
  2. hi!,I really like your writing very a lot!

    proportion we communicate more approximately your article on AOL?
    I require an expert in this area to unravel my
    problem. May be that is you! Taking a look ahead to look you.

    ReplyDelete
  3. Tremendous things here. I am very happy to see your article.
    Thanks a lot and I am looking forward to contact you. Will you kindly drop me
    a e-mail?

    ReplyDelete
  4. This paragraph will help the internet visitors for setting up new webpage or even a blog from start to end.

    ReplyDelete
  5. This website was... how do I say it? Relevant!! Finally I've found something that
    helped me. Kudos!

    ReplyDelete
  6. Howdy, I think your web site could be having browser compatibility problems.
    Whenever I look at your website in Safari,
    it looks fine but when opening in I.E.,
    it's got some overlapping issues. I just wanted to provide you with a quick heads up!
    Aside from that, fantastic blog!

    ReplyDelete
  7. Very great post. I just stumbled upon your blog and wanted to mention that I've truly loved browsing your blog posts.
    In any case I will be subscribing for your feed and I hope you write once more very soon!

    ReplyDelete
  8. Hi there! I just wanted to ask if you ever have any issues with hackers?
    My last blog (wordpress) was hacked and I ended up
    losing a few months of hard work due to no data backup.

    Do you have any solutions to stop hackers?

    ReplyDelete
  9. Hey I know this is off topic but I was wondering if you knew of any
    widgets I could add to my blog that automatically tweet my newest twitter updates.
    I've been looking for a plug-in like this for quite some time and was hoping maybe you would have some experience with something like this.
    Please let me know if you run into anything. I truly enjoy
    reading your blog and I look forward to your new updates.

    ReplyDelete
  10. Nice post. I was checking continuously this blog and I'm impressed!
    Extremely helpful info particularly the remaining phase :) I take care of such information much.
    I used to be seeking this certain info for a long time. Thanks and best of luck.

    ReplyDelete