Boxing and Unboxing Data Types

December 14, 2018

အခုရေးထားတဲ့ Article က Android အတွက် First-class language ဖြစ်သွားတဲ့ Kotlin ရဲ့ Feature တစ်ခုကို ရှင်းပြထားတာပါ။ အဲ့အကြောင်းမရှင်းခင် JavaScript ကို အရင်ပြောရမယ်။ JavaScript မှာ Number, String, Boolean, null, undefined, Object ဆိုပြီး Data Type ၆ မျိုးရှိတယ်။ Object ကလွဲပြီး ကျန်တဲ့ Data Type တွေကို Primitive Data Type တွေလို့ခေါ်တယ်။ Primitive Data Type ဆိုတာ Programming Language မှာ Build-in ပါလာပြီးသား Data Type တွေ။ နောက်တမျိုးပြောရရင် Primitive Data Type တွေမှာ Object တွေလိုမျိုး Properties တွေ Method တွေ မရှိဘူး။

PHP မှာလဲ Primitive Data Type တွေ ရှိတယ်။ Boolean, Integer, Float, String စတာတွေပဲ။ PHP မှာ ဒီကောင်တွေကို Sub Categories ထပ်ခွဲပြီး Scalar type တွေလို့ခေါ်တယ်။ Scalar Type ဆိုတာ Single Value ပဲရှိတဲ့ Data Type တွေကိုပြောတာ။

$var = “hello”;

Array, Object စတာတွေကို Compound Data Type / Composite Data Type တွေလို့ခေါ်တယ်။ Compound Type က Scalar Type တွေနဲ့ပဲ ဖွဲ့စည်းထားတယ်။

$data = array(10, 20, 30);

JavaScript မှာကျပြန်တော့ Array က Object ဖြစ်နေပြန်တယ်။ Data Type သတ်သတ် မဟုတ်ပြန်ဘူး။

console.log( typeof new Array(10, 20, 30) ); // return Object

JavaScript ကို ပြန်ဆက်ရရင် JavaScript ရဲ့ String Data Type မှာ “hello”.length လို့ခေါ်ရင် ဘာလို့ ရနေတာလဲ? JavaScript က အဲ့လိုခေါ်သုံးတဲ့အခါကျရင် String ကို Primitive Data Type ကနေ Object အဖြစ် ခဏ Force လုပ်ပေးလိုက်တယ်။ ဒီတော့ Object အနေနဲ့ ယူသုံးလို့ရသွားတယ်။ ဒါပေမဲ့ Object လား Primitive Data Type လားဆိုတော့ String က Primitive Data Type ပဲ။ PHP တို့ ဘာတို့မှာတော့ ဒီလိုမရဘူး။ String က Primitive Data Type အစစ်ပဲ။ လိုက်ပြောင်းမပေးဘူး။

JavaScript မှာ String ကို Object လိုမျိုး သူ့ထဲက Method တွေ Properties တွေခေါ်သုံးလို့ ရအောင်လုပ်ထားပေမဲ့ ဘာ Data Type လဲ ထုတ်ကြည့်ရင်တော့ String ဆိုပြီး Primitive Data Type ဖြစ်ကြောင်းပြောလိမ့်မယ်။

console.log( “Hello World” );

ဒါပေမဲ့ String ကို Object လို Force လုပ်တဲ့အချိန်မှာ ဘယ် Object ပြောင်းတာလဲဆိုတော့ JS မှာ Primitive wrapper objects ဆိုတာလေးတွေပါတယ်။

string Data Type အတွက် String Object number Data Typeအတွက် Number Object boolean Data Typeအတွက် Boolean Object

console.log( typeof “hello world” ); // string console.log( typeof new String(“hello world”) ); // object console.log( “hello world” === new String(“hello world”) ); // false

console.log( typeof 15 ); // number console.log( typeof new Number(15) ); // object console.log( 15 === new Number(15) ); // false

console.log( typeof true ); // boolean console.log( typeof new Boolean(true) ); // object console.log( true === new Boolean(true) ); // false

အဲ့လို Primitive Data Type တွေကို Object အဖြစ် ယူသုံးလို့ရအောင် လုပ်တာကို Boxed လုပ်တယ်လို့ခေါ်တယ်။

Kotlin မှာဆိုရင် Boxed လုပ်တာကို ဒီလိုလုပ်လို့ရတယ်။

val a: Int = 10000 print(a === a) // Prints ‘true’ val boxedA: Int? = a val anotherBoxedA: Int? = a print(boxedA === anotherBoxedA) // !!!Prints ‘false’!!!

YangonTechUnion

Reference

http://php.net Ko Thet Khine https://kotlinlang.org/docs/reference/basic-types.html https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures