Java 14 : Pattern Matching instanceof(JEP:305)

instanceof keyword ကို Java သမားတော်တော်များများ ရင်းနှီးပြီးသား ဖြစ်မှာပါ။type တွေစစ်တဲ့ နေရာမှာ တော်တော်မျာများ သုံးပါတယ်။ အခုလည်း Java 14 မှာ Pattern matching ဆိုပြီး instanceof နဲ့ type စစ်ပုံစစ်နည်းနဲ့ ရေးသားပုံက ပြောင်းလဲလာပါတယ်။Java 15 မှာ ပြောင်းလဲမှု မရှိဘဲ Java 16 မှာ ထပ်မံပြောင်းလဲ

သွားပါတယ်။ထို့ကြောင့် Pattern matching ကို လေ့လာရာမှာ Java 14 and 16 ကို လေ့လာရပါမယ်။စလိုက်ကြရအောင်....

ဥပမာ ၁။။

                    if (obj instanceof String) {

        String s = (String) obj;
        // use s
      }


 တော်တော်များများ အထက်ပါ အတိုင်းရေးဖူးကြမှာပါ။ obj က String type ဖြစ်လျှင် variable String sထဲ ကို

type ပြောင်းပြီး value တန်ဖိုးကို ထည့်ပေးတာပါ။အင်မတန် ရိုးရှင်းတဲ့ logic လေးပါ။သို့သော် ဒီနေရာမှာ condition မှန်တယ်လို့ ယူဆကြရအောင်လား။ obj က String type ဖြစ်တယ် ဆိုတာ သိလျှက်နှင့်ပင် type cast လုပ်ပေးနေရပါတယ်။ ဒါက  ရိုးရှင်းတဲ့ logic  ဆိုပေမယ့် extra code လို့ပြောလို့ရပါတယ်။

ဥပမာ ၂။။

             if (obj instanceof String s) {

            // can use s here
        } else {
            // can't use s here
        }


အထက်ပါ ဥပမာ ၂ အရ variable ကြေငြာတာကို condition ထဲထည့်မရေးတော့ဘဲ obj ကသာ String type
မှန်တယ်ဆိုလျှင် obj ရဲ့ value ကို s ထဲ တစ်ခါထဲ ထည့်ပေးလိုက်တာပါ။ ဒါကြောင့် code အပိုရေးသား စရာ 
မလိုတော့ပါ။ထို s ကို pattern varibable လို့ခေါ်ပါတယ်။ s ကို if မှန်တဲ့ scope အတွင်းသာ အသုံးပြုနိုင်ပါတယ်။အကြောင်းအရင်းကတော့ obj က String type
ဖြစ်မှ value ကို s ထဲကို ထည့်ပေးတာပါ။ String type မဟုတ်ပါက အနောက် က s ကို ဆက်၍ အလုပ်မလုပ်တော့ပါ။

ဥပမာ ၃။။

            if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}


     obj က String type မှန်လျှင် value ကို s ထည့်လိုက်ပါတယ်။ ပြီးမှ && ကို ဆက်၍ အလုပ်လုပ်ပါတယ်။

ဆိုလိုချင်တာက obj က String type မမှန်လျှင် အနောက်က ကျန်code ကို ဆက်၍ အလုပ်မလုပ်တော့ပါ။ဒါကြောင့် s.length ကို ဆက်မစစ်ပါ။ String type မှန်မှသာလျှင် s.length ကို ဆက်၍ အလုပ်လုပ်ခြင်းဖြစ်ပါတယ်။

အထက်ပါ Pattern matching အတိုင်းမရေးလိုပါက အောက်ပါ အတိုင်းလည်းရေးနိုင်ပါသည်။သို့သော် over code တွေ အများကြီးရေးရပါလိမ့်မည်။


       if(obj instanceof String){

           String s = (String) obj;

            if(s.length() > 5){

                ..s.contains(..)..

            }

        }

        


Pattern mathing part - 2 (Java 16) ==> 


#khan

#learnprogrammingbykhan








Comments