Dart Language

ကျွန်တော်နှင့် Dart Programming Language Part (1)

Flutter သုံးမယ်ဆိုတော့ သေချာပေါက် Dart Programming Language ကို ကိုင်ရပါပြီ။ Dart Programming Language ကို လေ့လာမိတော့ ကျွန်တော် သတိထားမိတာလေးတွေ ဝေမျှချင်ပါတယ်။ 

Mixins 

Mixins ဆိုတာကတော့ multiple inheritance ပုံစံ class တွေကို ပြန်သုံးချင်တဲ့အခါ သုံးပါတယ်။ inheritance နဲ့ မတူတာကတော့ constructor တွေ ပါနေရင် သုံးလို့မရပါဘူး။ PHP သမားတွေအနေနဲ့တော့ Trait Pattern ကို နားလည်ရင် Dart က Mixins ကို နားလည်ပါလိမ့်မယ်။ ကျွန်တော်တို့ နမူနာလေး ရေးကြည့်ရအောင်

void main() {
  print("Hello World!");
  var dog = Dog("Aung Net", "red");
  dog.eat();
  dog.bark();
  print(dog.legs);
  dog.runWithFourLegs();
}

class Canis {
  int legs = 4;
  void runWithFourLegs() {
    print("Run with 4 Legs");
  }

}

class Animal {
  String name;
  String color;
  Animal(this.name, this.color);

  void eat() {
    print("EAT!");
  }
}

class Dog extends Animal with Canis {
  Dog(String name, String color) : super(name, color);

  void bark() {
    print("WOOF!");
  }
}

Dog Class မှာ with Canis လို့ သုံးတာ Mixins ပါပဲ။ အဲဒီလို with နဲ့ သုံးလိုက်တဲ့အတွက် legs ဆိုတဲ့ properties ရော runWithFourLegs() ဆိုတဲ့ method ပါ သုံးလို့ရသွားပါတယ်။

Async and Await

နောက်တစ်ခု ချက်ချင်း သတိထားမိတာကတော့ Async နဲ့ Await ပါ။ Kotlin မှာဆိုရင်တော့ Coroutine ကို ထည့်လိုက်မှ သုံးလို့ရတဲ့ Feature ကို Dart မှာ တစ်ခါတည်း ထည့်ထားတာ တွေ့ရပါတယ်။ Coroutine မှာတော့ Deferred<> လို့ သုံးပေမယ့် Dart မှာတော့ Future<> လို့ သုံးပါတယ်။ ကျွန်တော်တို့ နမူနာလေး ရေးကြည့်ရအောင်

void main() {
    var testAsync = TestAsync();
    testAsync.printWithDelay("Hello Async Dart!");
}

class TestAsync {
  static const fiveSecond = Duration(seconds: 5);

  Future<void> printWithDelay(String message) async {
    await Future.delayed(fiveSecond);
    print(message);
  }  
}

Pure Object Oriented Programming Language

Dart ဟာ class-based, single-inheritance, pure object-oriented programming language ဖြစ်ပါတယ်။ ရှိသမျှ Variable တိုင်းဟာ Object တွေ ဖြစ်ပါတယ်။ ကျွန်တော်တို့ Variable တစ်ခုကို ကြေငြာလိုက်ပြီ ဆိုတာနဲ့ Object ဆိုတဲ့ class ကနေ inheritance လုပ်ထားတယ်ဆိုတာ နားလည်ဖို့ လိုပါတယ်။ ကျွန်တော်တို့ Kotlin မှာဆိုရင် Any ဆိုတဲ့ class ကို extends လုပ်ရသလိုပေါ့။ ကျွန်တော်တို့ နမူနာလေးနဲ့ စမ်းကြည့်ရအောင်

void main() {
  int count = 5;
  if(count is Object) {
    print("Count is an object");
  } else {
    print("Count is not an object");
  }
}

count က object အမြဲတမ်း ဖြစ်နေပါလိမ့်မယ်။ Kotlin မှာတော့ Android ရေးမယ်ဆိုရင်  Java မှာ Primitive Data Type တွေကို Object လို သုံးလို့ရပေမယ့် Java ကို ရောက်သွားတဲ့အခါမှာတော့ Primitive Data Type တွေပဲ ဖြစ်နေမှာပါ။