Showing posts with label Advanced Java. Show all posts
Showing posts with label Advanced Java. Show all posts

Monday, December 19, 2011

Boxing Conversion

Boxing Conversion


Boxing ဆိုတာနဲ႕ လက္ေ၀ွ႕ထုိးတယ္မ်ားထင္မလားမသိဘူး။ primitive type ေတြကို သူတို႕အတြက္လုပ္ထားတဲ႔ refernce type ေတြဆီကို ေျပာင္းတာကို Boxing လုိ႕ေခၚတာပါ။ ေသတၱာထဲထည္႕တာေပါ႔ခမ်ာ။ ေအာက္မွာရွစ္ခုရိွတယ္တဲ႔ခင္ဗ်။
  • From type boolean to type Boolean
  • From type byte to type Byte
  • From type char to type Character
  • From type short to type Short
  • From type int to type Integer
  • From type long to type Long
  • From type float to type Float
  • From type double to type Double
Double ဆိုတာေတြ႕ရင္ မေနႏုိင္မထိုင္ႏိုင္ 1 cent issue ကိုသတိရမိတယ္ဗ်။ double ေတြဟာ သိမ္းစရာရိွတာကို အတည္႕မသိမ္းဘူးခင္ဗ်။ ဘာနဲ႕တူသလဲဆိုရင္ ဟာထဲကလို ႏြားေတြျဖတ္ေျပးတာကို ေျခေထာက္ေတြလုိက္ေရၾကည္႕ျပီး ေလးနဲ႕စားသလိုမ်ိဳးေပါ႔။ လြယ္တာကို ခက္ေအာင္လုပ္တယ္။ 60 ကို ၅၉.၉၉၉၉၉၉၉၉၉၉၉၉၉၉၉၉၉၉၉၉ ဆိုျပီးသိမ္းတဲ႔အတြက္ အတြက္အခ်က္ေတြ လုပ္ရင္း လုပ္ရင္း လုပ္ရင္း လုပ္ရင္း ေနာက္ဆံုး တစ္ျပားကြာကုန္တယ္ေပါ႔ဗ်ာ။ အဲဒါေၾကာင္႔လည္း BigDecimal ပဲေနာက္ပိုင္းေျပာင္းသံုးၾကတယ္။


Run time ၾကရင္ Boxing conversion ေတြက ဒီလိုေျပာင္းလဲသတဲ႔။
  • If p is a value of type boolean, then boxing conversion converts p into a reference r of class and type Boolean, such that r.booleanValue() == p
p က boolean ဆိုပါေတာ႔။ လြယ္ေအာင္ေရးလိုက္ရင္ boolean p=true;
ဆိုပါေတာ႔။ run time ေရာက္ရင္ primitive type boolean ေလးကို Reference Type အျဖစ္ေျပာင္းပစ္လုိက္တယ္။ ေျပာင္းပစ္လုိက္တယ္ဆိုတာမွာ Reference Type Boolean r ထဲကို boolean တန္ဖိုးေရာက္သြားတယ္။ B အၾကီးေတြ အေသးေတြ ရွဳပ္ေနတယ္လို႕မထင္ပါနဲ႕။ Java ရဲ႕ၾကီးက်ယ္ေသာ boxing ေျပာင္းလဲမႈၾကီးပါ။ 


Boolean b;
boolean a=true;
b = new Boolean(a);
System.out.println(b.booleanValue());
Boolean ၾကီးဟာ reference type ၾကီးပါ။ သူက class လည္းျဖစ္တဲ႔အတြက္ သံုးခ်င္ရင္ new လုပ္ေပးရပါမယ္။ Boolean b= new Boolean("true") ဆိုျပီး တစ္ခါတည္း create လုပ္လုိက္တာကိုၾကေတာ႔ auto boxing လို႕ေခၚတယ္ဗ်။ Class ေတြကို compare လုပ္ေနတာလို႕ ခင္ဗ်ားတို႕သတိထားမိရင္ == operator ကို သံုးရင္လြဲမယ္ဆိုတာကိုလည္း ေျပာစရာမလုိပါဘူး။ Boolean ၾကီးကို == နဲ႕သြားျပီးတုိက္ဆုိင္ရင္ လြဲမွာပဲ။ သူ႕ရဲ႕ value က .booleanValue() နဲ႕ရွာမွထြက္လာမယ္။ .equals () operator နဲ႕လည္း နည္းနည္းစမ္းျပီးေရးၾကည္႕ပါ။ က်န္တာေတြလည္း အလားတူပါပဲ။


 အဲဒီရွစ္မ်ိဳးကို ေျပာင္းျပန္လွည္႕ေျပာရင္ တနည္းအားျဖင္႔ Reference Type ကေန primitive ကိုေျပာင္းတာကို unboxing ေသတၱာထဲက ထုတ္တယ္လို႕ဆိုတာပါပဲ။ လူမ်ားေတြ boxing/unboxing လုပ္တယ္ဘာညာဆိုတာေတြကို အၾကီးၾကီးထင္မွာစိုးလုိ႕ပါ။ သိေအာင္လုပ္ထားတာေကာင္းပါတယ္။

Boxing was introduced in JDK 1.5 to eliminate trivial conversions between primitives (intboolean, etc) and corresponding wrapper objects (IntegerBoolean, etc). Boxing allows some code to be a bit more concise and legible. It's also useful when using collections (which only take objects, not primitives).

Integer, Boolean စတဲ႔ Reference Type Objects ေတြကို wrapper objects လို႕လည္းေခၚတယ္ဆိုတာကို ေျပာခ်င္လုိ႕ကူးလာတာပါ။ JDK 1.5 ရဲ႕ သိသာထင္ရွားတဲ႔အမွတ္အသားတစ္ခုပါပဲ။

အဆင္ေျပၾကမယ္လို႕ထင္ပါတယ္။
နားမလည္ဘူးလား။ နားလည္လားေတာ႔မသိပါဘူး။ ၾကိဳးစားျပီး ရွာဖတ္ၾကည္႕ပါ။ ေရးေတးေတးျဖစ္ေနရင္လည္း မ်ားမ်ားေလးေလ႔လာၾကည္႕ပါ။ အဆင္ေျပသြားမွာပါ။ တကယ္တမ္း အလုပ္မွာ ဒီေလာက္သိစရာမလိုဘူး။ ေရးေနတာၾကာျပီ။ ကြ်န္ေတာ္ဆို ဒါကို Boxing လား၊ ၀ူရွဴးလားမသိဘဲ တစ္ႏွစ္ခြဲေလာက္ေရးေနတာပဲ။ ေရးလို႕ျဖစ္ပါတယ္။ ကိုယ္သိေနတာေတြကို ဘယ္လုိေခၚလဲျပန္ျပီးေလ႔လာရတာလည္း ေပ်ာ္စရာေကာင္းပါရဲ႕ဗ်ာ။

ကဲ Boxing သင္ခန္းစာ ဆံုးေလ၏။            ။

Regards,
Zero.

Ref:

Wednesday, April 20, 2011

Java Idioms

ဒီေန႕ပဲရံုးက သူငယ္ခ်င္းက Java Idioms ေတြဖတ္ၾကည္႕ပါဆိုလုိ႕ Link ယူထားလို္က္တယ္။ ဖတ္ေတာ႔မဖတ္ၾကည္႕ရေသးပါဘူူး။


Language တစ္ခုခုကို hello world ေရးတတ္ရံုနဲ႕ေတာ႔ ဘာမွမျဖစ္လာပါဘူး။ ဘယ္ Language ကို ဘယ္ေလာက္အထိ ေရးတတ္သလဲ၊ ဘယ္ေလာက္အဆင္႔ျမင္႔ျမင္႔ေရးႏိုင္သလဲဆိုတာက ပိုျပီး အဓိပၸာယ္ရိွပါတယ္။ ဟိုတေလာက PHP ေရးၾကည္႕ေနပါတယ္။ ေပ်ာ္စရာေကာင္းပါတယ္။ Language အမ်ားစုရဲ႕ တူညီမႈေတြကို နားလည္ရင္ ေလ႔လာရတာလြယ္ပါတယ္။

Programming Language ေတြက စာအုပ္ေတြနဲ႕တူပါတယ္။ ဘာသာစကားတစ္မ်ိဳးတည္းနဲ႕ေရးထားတဲ႔စာအုပ္ေတြပါ။ အဲဒီဘာသာစကားက Concept ျဖစ္ပါတယ္။ Concept ရိွတဲ႔သူ၊ တစ္နည္းအားျဖင္႔ ဘာသာစကားကို နားလည္တဲ႔သူ၊ဖတ္ႏုိင္တဲ႔သူဟာ စာအုပ္ေတြနဲ႕တူတဲ႔ language ေတြကိုသေဘာေပါက္ႏုိင္ပါတယ္။ ဘာသာစကားနဲ႕တူတဲ႔ Concept ကုိ ဘယ္ေလာက္ခုိင္ခိုင္မာမာရထားလဲဆိုတာေပၚမူတည္ျပီး Language ကို ဘယ္ေလာက္အဆင္႔ျမင္႔ျမင္႔နားလည္ႏိုင္သလဲဆိုတာျဖစ္လာပါတယ္။

အဲဒီေတာ႔ ကိုယ္ေရးေနတဲ႔ Language ကို သာ ေလးေလးနက္နက္ လုိက္စားမယ္ဆိုရင္ က်န္တာေတြကိုလည္း လြယ္လြယ္ကူကူေလ႔လာႏိုင္ဖုိ႕ အေထာက္အကူျဖစ္ပါလိမ္႔မယ္လို႕ေျပာခ်င္ပါတယ္။

ဘယ္ language ကအေကာင္းဆံုးလဲဆိုတာမ်ိဳးကို ဦးေႏွာက္နည္းတဲ႔သူေတြပဲေျပာပါတယ္။ ဘယ္ language ကမွ ျပည္႕စံုတဲ႔ language မျဖစ္ႏိုင္ပါဘူး။ အားသာခ်က္ရိွရင္၊ အားနည္းခ်က္လည္းရိွတတ္ပါတယ္။ က်က်နနေလ႔လာသင္ယူျပီး အဆင္႔ျမင္႔ျမင္႔ ေရးႏိုင္တဲ႔ developer ေကာင္းေတြ ျဖစ္ဖုိ႕ လြယ္လြယ္ေလးနဲ႕ေတာ႔ မျဖစ္ႏုိင္ပါဘူး။ The Mediocre နဲ႕ The Smart/Excellent ေတြ ၾကားမွာ ျခားနားတာတစ္ခုပဲရိွပါတယ္။

ကိုယ္႔ကိုယ္ကို မွန္မွန္ကန္ကန္အကဲျဖတ္ႏုိင္မႈပါပဲ။

အမွန္ကေတာ႔ တစ္ဆင္႔ခ်င္းေျပာသင္႔ပါတယ္။ Code Quality ကို ဘယ္လိုတိုင္းသလဲ။ ကိုယ္ေရးတာ အိုေကရံုလား၊ အဆင္႔ျမင္႔လား၊ တျခားသူအတြက္ အဆင္ေျပလား၊ OO concept ေတြကို လုိက္နာျပီးေရးသင္႔တာေတြမွာ လုိက္နာလား၊ ေနာက္လာမယ္႔ enhancement ေတြအတြက္ ဘယ္ေလာက္စဥ္းစားထားလဲ၊ Testing ကိုေရာ ဘယ္လိုလုပ္ထားသလဲဆိုတာေတြပါက်ယ္က်ယ္ျပန္႕ျပန္႕ေျပာခ်င္ပါေသးတယ္။

ကိုယ္လုပ္တဲ႔အလုပ္မွာ အေကာင္းဆံုးျဖစ္ေအာင္လုပ္ဖုိ႕ကြ်န္ေတာ္တုိ႕ၾကိဳးစားၾကရပါမယ္။
ကိုယ္႔ကိုယ္ကို ေလးစားႏုိင္ေလာက္ေအာင္ ေတာ္တဲ႔သူေတြျဖစ္ဖုိ႕ ကြ်န္ေတာ္တို႕ ဆက္လက္ၾကိဳးစားသြားရပါဦးမယ္။

ေအာ္ .. ေလာေလာဆယ္ေတာ႔ java language ကို broken ေတြေျပာေနပါတယ္။

Regards,
Zero