dartoop

🚀 Home đŸ’» github 🌐 Profile

Dart object oriented programming in Myanmar

မာတိကာ

Introduction

Dart ကို Lars Bak နဟင့á€ș Kasper Lund မဟ ဒြဇိုငá€șှထုတá€șá€‘á€Źá€žá€á€Źá€–á€Œá€…á€șá€•á€Œá€źá€ž Google က ဖနá€șတြှထာှတá€Č့ ပရိုဂရမá€șဘာသာစကာှတစá€șá€á€Żá€–á€Œá€…á€șပါတယá€ș။ Dart ကို á€Ąá€žá€Żá€¶á€žá€•á€Œá€Żá€•á€Œá€źá€ž ဝဘá€șနဟင့á€ș မိုဘိုငá€șှအကá€șပá€șá€™á€»á€Źá€žá€Ąá€•á€Œá€„á€ș á€†á€Źá€—á€Źá€”á€Ÿá€„á€·á€ș ဒကá€șစá€șတေဏ့ဥကá€șပá€șá€œá€źá€€á€±á€žá€›á€Ÿá€„á€șသမျဏသ ကိုဖနá€șတြှ နိုငá€șပါတယá€ș။ လကá€șရဟိ cross platform á€á€œá€±á€Ąá€á€œá€€á€ș မိုဘိုငá€șှအကá€șပá€șတလေ ကို flutter á€€á€­á€Żá€Ąá€žá€Żá€¶á€žá€•á€Œá€Żá€•á€Œá€źá€ž မဌနá€șမဌနá€șဆနá€șဆနá€ș ရေသသဏသနိုငá€șá€á€Źá€€á€Œá€±á€Źá€„á€ș့ လကá€șရဟိ dart က popular ဖဌစá€șတá€Č့ programing language တစá€șá€á€Żá€–á€Œá€…á€șá€œá€Źá€•á€«á€•á€Œá€źá‹ Flutter ကို တိုကá€șရိုကá€șá€žá€œá€Źá€žá€™á€‘á€­á€á€„á€ș Dart OOP ကို á€žá€­á€‘á€Źá€žá€•á€Œá€źá€žá€™á€Ÿ flutter ကို á€žá€œá€Źá€žá€‘á€­á€…á€±á€á€»á€„á€șပါတယá€ș။ လုပá€șငနá€șသခလငá€ș အငá€șá€á€Źá€—á€»á€°á€žá€•á€Œá€źá€†á€­á€Żá€›á€„á€ș flutter ကို မမေသဘá€Č dart oop knowledge ဘယá€șá€œá€±á€Źá€€á€șá€›á€Ÿá€­á€™á€›á€Ÿá€­á€€á€­á€Żá€…á€…á€șဆေသပါတယá€ș။ ယခု ဒြ dart oop á€Ąá€á€Œá€±á€á€¶á€žá€±á€˜á€Źá€á€›á€Źá€žá€á€œá€±á€€á€­á€Ż ကျနေဏá€șá€žá€­á€žá€œá€±á€Źá€€á€șမဌနá€șá€™á€Źá€™á€°á€•á€Œá€Żá€€á€Ź ဖေဏá€șá€•á€Œá€‘á€Źá€žá€á€Źá€–á€Œá€…á€șá€•á€Œá€źá€ž လိုအပá€șချကá€șá€™á€»á€Źá€žá€›á€Ÿá€­á€•á€«á€€ ဝငá€șရေဏကá€ș ဖဌညá€ș့ဆလကá€șနိုငá€șပါတယá€ș။

Dart OOP

Object-oriented programming (OOP) သညá€ș (objects) မဌနá€șမာလိုဆိုရငá€ș (အရာဝတá€čတုမျဏသ ) ၏ á€žá€˜á€±á€Źá€á€›á€Źá€žá€€á€­á€Ż á€Ąá€á€Œá€±á€á€¶á ပရိုဂရမá€șရေသဆလá€Čခဌငá€șသပုံစံတစá€șá€á€Żá€–á€Œá€…á€șပါတယá€ș။ အရာဝတá€čတု (Object) ထá€Čá€™á€Ÿá€Ź attributes or properties တလေ á€Ąá€•á€Œá€„á€ș procedures စနစá€șဖဌငá€ș့ ကုဒá€ș á€á€œá€±á€€á€­á€Ż စနစá€șတကျ ဖလá€Č့စညá€șှတညá€șဆေဏကá€șထာှတá€Č့ Methods á€œá€­á€Żá€Ąá€›á€Źá€á€œá€± ပါဝငá€șပါတယá€ș။

sequential စနစá€șလို ကုဒá€șá€á€œá€±á€€á€­á€Ż တစá€șá€€á€Œá€±á€Źá€„á€șá€žá€•á€Œá€źá€žá€”á€±á€Źá€€á€ș တစá€șá€€á€Œá€±á€Źá€„á€șှ top to bottom run á€žá€œá€Źá€žá€á€Č့ စနစá€ș ကိုက program á€€á€€á€Œá€źá€žá€œá€Źá€œá€±á€œá€± ထိနá€șှသိမá€șှရတာခကá€șá€œá€Źá€•á€Œá€źá€ž á€•á€­á€Żá€•á€Œá€źá€žá€›á€°á€•á€șá€‘á€œá€±á€žá€œá€Źá€•á€«á€á€šá€ș။ ဒြနညá€șကို Procedures နညá€șသဖဌငá€ș့ á€Ąá€…á€Źá€žá€‘á€­á€Żá€žá€›á€±á€žá€žá€Źá€žá€á€Œá€„á€șသဖဌစá€șပါတယá€ș။

Sequential Code Style

Sequential ဆိုတာက ဒြ ကုဒá€șတစá€șá€á€Żá€•á€Œá€źá€žá€›á€„á€ș နေဏကá€ș ကုဒá€șတစá€șခုကို Program က တနá€șá€žá€…á€źá€•á€Œá€źá€ž အလုပá€șလုပá€șá€žá€œá€Źá€žá€á€Œá€„á€șသဖဌစá€șပါတယá€ș။ ငပမဏ

void main() {
  int a = 1;
  int b = 1;
  int result = a + b;
  print(result);
}

Procedures Code Style

ဥပေါá€șá€™á€Ÿá€Ź á€•á€Œá€±á€Źá€á€Čá€·á€žá€œá€­á€Żá€˜á€Č Procedures ကုဒá€șပုစံဆိုတဏ Functions တလေ Methods တလေ နá€Č့ ကုဒá€șá€á€œá€±á€€á€­á€Ż စနစá€șတကျ ဖလá€Č့စညá€șá€žá€•á€Œá€źá€žá€›á€±á€žá€žá€Źá€žá€”á€Šá€șသဖဌစá€șပါတယá€ș။ ငပမဏ

void main() {
  // ၁. ဒြကုဒá€șကို လာ run ပါတယá€ș
  int sum = addNumbers(5, 3);

  //၂. addNumbers ဆိုတá€Č့ function ဥေဏကá€șက print ဆိုတá€Č့ လိုငá€șှကို ကျေဏá€șá€•á€Œá€źá€žá€žá€œá€Źá€žá€á€±á€«á€șပါတယá€ș။


//၄. ရလဒá€șကို နေဏကá€șá€†á€Żá€¶á€žá€’á€źá€™á€Ÿá€Ź á€žá€œá€Źá€žá€‘á€Żá€á€șá€•á€Œá€–á€­á€Żá€·á€•á€Œá€±á€Źá€•á€«á€á€šá€ș။
  print("The sum is: $sum");
}



// Procedure to add two numbers
//၃. ပရိုဂမá€șက ဒြလိုငá€șှကို ကိုရေဏကá€șá€œá€Źá€•á€«á€á€šá€ș

int addNumbers(int a, int b) {
  return a + b;
}

Class and Object

OOP á€™á€Ÿá€Ź Class ဆိုတာက blueprint လို ဥရဏမျိုသကို á€†á€­á€Żá€œá€­á€Żá€á€Źá€•á€«á‹ class တစá€șခုက object တစá€șá€á€Żá€™á€Ÿá€Ź ရဟိမညá€ș့ properties နဟင့á€ș method ကို သတá€șမဟတá€șပေသပါတယá€ș။ ငပမဏ Car ဆို တá€Č့ Class တစá€șခု တနညá€șá€žá€Ąá€Źá€žá€–á€Œá€„á€ș့ သူ့ရá€Č့ Blueprint ကို ကျနေဏá€șတို့ တညá€șဆေဏကá€șထာှတယá€șဆိုရငá€ș အá€Č့ Car Class (Blueprint ) á€€á€­á€Żá€žá€Żá€¶á€žá€•á€Œá€źá€ž နေဏကá€șထပá€ș Toyota | Honda| Ford ကာှ Object တလေတညá€șဆေဏကá€șနိုငá€șပါတယá€ș။ ငမဏ

//ကာှ ဆိုတá€Č့ Class တစá€șခုကို ယခုလိုတညá€ș class ဆိုတá€Č့ keyword á€€á€­á€Żá€žá€Żá€¶á€žá€•á€Œá€źá€žá€–á€”á€șတဟသရပါမယá€ș။
class Car {
  //properties တလေသတá€șမဟတá€șá€•á€±á€žá€‘á€Źá€žá€á€Œá€„á€șသဖဌစá€șပါတယá€ș။
  String ?make;
  String? model;
  int ?year;
  double ?price;
  //  ကာှ details á€á€œá€±á€€á€­á€Żá€•á€Œá€–á€­á€Żá€· display Method တစá€șခုတညá€șဆေဏကá€șထဏသပါတယá€ș
  void displayDetails() {
    print('Make: $make, Model: $model, Year: $year, Price: \$${price}');
  }
}



အထကá€șပါ ကုဒá€șá€”á€™á€°á€”á€Źá€™á€Ÿá€Źá€†á€­á€Żá€›á€„á€ș ကာှ ဆိုတá€Č့ Class ထá€Čá€™á€Ÿá€Ź သူ့ကို á€šá€°á€žá€Żá€¶á€žá€•á€Œá€źá€ž á€•á€Œá€Żá€œá€Żá€•á€șမညá€ș့ Object á€á€œá€±á€™á€Ÿá€Ź ပါသငá€ș့တá€Č့ Properties (make, model, year , price) á€á€œá€±á€€á€­á€Ż ထညá€șá€·á€‘á€Źá€žá€á€Źá€á€œá€±á€·á€›á€•á€«á€á€šá€ș။

String make;
String model;
int year;
double price;

နေဏကá€șá€•á€Œá€źá€ž displayDetails() Method တစá€șခု ပါဝငá€șပါတယá€ș။

 void displayDetails() {
    print('Make: $make, Model: $model, Year: $year, Price: \$${price}');
  }

အထကá€șပါဖနá€șတြှခá€Č့ တá€Č့ Car class á€€á€­á€Żá€žá€Żá€¶á€žá€•á€Œá€źá€ž Object တစá€șခုဖနá€șá€á€źá€žá€€á€Œá€Šá€ș့ပါမယá€ș။

//create car class
class Car {
  String ?make;
  String? model;
  int ?year;
  double ?price;
  // Method to display car details
  void displayDetails() {
    print('Make: $make, Model: $model, Year: $year, Price: \$${price}');
  }
}


void main() {
  //  car instance objects တစá€șခုကို ဖနá€șတဟသပါတယá€ș။
  Car car1 = Car();

  car1.make = "Toyota";
  car1.model = "Camry";
  car1.year = 2022;
  car1.price = 250000.020;

  //  car details ကို ထုတá€șကဌညá€ș့ဖို့ Car Class ထá€Čက displayDetails method ကို ယခုလို လဟမá€șသယူကဌညá€ș့နိုငá€șပါတယá€ș။
  car1.displayDetails();
}


ဒြ Car class ထá€Čက properties တလေနá€Č့ method တစá€șကို á€Ąá€žá€Żá€¶á€žá€•á€Œá€Żá€–á€­á€Żá€· car1 á€†á€­á€Żá€•á€Œá€źá€ž Object တစá€șခုတညá€șဆေဏကá€șလိုကá€șပါတယá€ș။ အထကá€șပါ ကုဒá€șá€”á€™á€°á€”á€Źá€™á€Ÿá€Źá€†á€­á€Żá€œá€»á€Ÿá€„á€ș Toyota ကာှကို ဖနá€șá€á€źá€žá€žá€œá€Źá€žá€á€Œá€„á€șသဖဌစá€șပါတယá€ș။ 2022 Camry ကဏသမေဏá€șဒယá€ș ကို စျေသနူနá€șှက 250000.020 ဆိုတá€Č့ ကာှတစá€șá€…á€źá€žá€›á€•á€«á€•á€Œá€źá‹

အလာှတူ ဒြ Car Blueprint (Class) ကို á€žá€Żá€¶á€žá€•á€Œá€­á€ž နေဏကá€șထပá€șကာှ á€Ąá€œá€œá€šá€șတကူတစá€șစြှ တညá€șဆေဏကá€șကဌညá€ș့မယá€ș။


//create car class
class Car {
  String ?make;
  String? model;
  int ?year;
  double ?price;
  // Method to display car details
  void displayDetails() {
    print('Make: $make, Model: $model, Year: $year, Price: \$${price}');
  }
}


void main() {
  // Creating car objects
  Car car1 = Car();
  car1.make = "Toyota";
  car1.model = "Camry";
  car1.year = 2022;
  car1.price = 250000.020;
  // Displaying car details
  car1.displayDetails();


// Creating another car objects
  Car car2 = Car();
  car2.make = "Honda";
  car2.model = "Civic";
  car2.year = 2023;
  car2.price = 22000.0;
  // Displaying car details
  car2.displayDetails();
}


နေဏကá€ș Honda ဆိုတá€Č့ ကာှတစá€șစြှ ကို á€Ąá€œá€œá€šá€șတကူ တညá€șဆေဏကá€șá€•á€Œá€źá€žá€•á€«á€•á€Œá€źá‹ á€’á€źá€™á€Ÿá€Ź ပဌနá€șကဌညá€ș့ရငá€ș တပá€șခါ ထပá€șခါ ရေသနေရမညá€ș့ properties တလေနá€Č့ methods ကို á€œá€»á€Ÿá€±á€Źá€·á€á€»á€žá€œá€Źá€žá€á€Źá€á€œá€±á€·á€›á€•á€«á€á€šá€ș။ ဒါက OOP ရá€Č့ ရေသထုံသထá€Čက တစá€șစိတá€șတစá€șပိုငá€șှ ဖဌစá€șပါတယá€ș။

Constructor In Dart

constructor ဆိုတာက object တစá€șခုကို စတငá€șဖို့ á€Ąá€žá€Żá€¶á€žá€•á€Œá€Żá€žá€Šá€·á€ș အထူှနညá€șှလမá€șှတစá€șá€á€Żá€–á€Œá€…á€șပါတယá€ș။

ကျနေဏá€șတို့ အထကá€șá€™á€Ÿá€Ź ပဌတá€Č့ ကုဒá€șá€™á€Ÿá€Ź Car Object အရာဝတá€čထုတစá€șခုကို ဖနá€șတြှတá€Č့ဥခါ Car Object á€™á€Ÿá€Ź ပါရမညá€ș့ make, model , year , price ဆိုတá€Č့ properties (ဂုဏá€șသတá€čá€á€­á€™á€»á€Źá€žá€Ąá€á€œá€€á€ș) ကနဩှတနá€șဖိုသမျဏသကို Car class ထá€Čá€™á€Ÿá€Ź သတá€șမဟတá€șပေသဖို့ constructor Calss ထá€Čá€™á€Ÿá€Ź တညá€șဆေဏကá€șá€•á€Œá€źá€ž á€Ąá€žá€Żá€¶á€žá€•á€Œá€Żá€”á€­á€Żá€„á€șပါတယá€ș။ ငပမဏ


class Car {
  String ?make;
  String? model;
  int ?year;
  double ?price;

    //Constructor
    Car(this.make,  this.model, this.year,  this.price );

    // Method to display car details
    void displayDetails() {
    print('Make: $make, Model: $model, Year: $year, Price: \$${price}');
    }
}


void main() {
  // Creating car objects
  Car car1 = Car('Toyota', 'Camry', 2022, 250000.020);
  car1.displayDetails();

}

အထပá€șá€™á€Ÿá€Ź ပဌခá€Č့တá€Č့ code နá€Č့ ယခု ကုဒá€ș á€˜á€Źá€€á€œá€Źá€žá€žá€œá€Źá€žá€žá€œá€Č ဆိုရငá€ș ယခု code á€™á€Ÿá€Ź make, model, year, price ဆိုတá€Č့ object value á€á€œá€±á€€á€­á€Ż object တညá€șဆေဏကá€șá€•á€Œá€źá€ž နေဏကá€ș define လုပá€șá€”á€±á€…á€›á€Źá€™á€œá€­á€Żá€˜á€Č Object တညá€șဆေဏကá€șရငá€șှ Arguments á€á€œá€±á€Ąá€”á€–á€Œá€„á€ș့ ထညá€ș့သလငá€șá€žá€•á€±á€žá€œá€­á€Żá€€á€șခဌငá€șသဖဌစá€șပါတယá€ș။

မဟတá€șသာှရနá€ș

##

constructor á€œá€±á€žá€™á€»á€­á€Żá€žá€›á€Ÿá€­á€•á€«á€á€šá€ș

  1. Default Constructor
  2. Parameterized Constructor
  3. Named Constructor
  4. Constant Constructor

1. Default Constructor

Default Constructor ဆိုတာ Dart compiler က á€Ąá€œá€­á€Żá€Ąá€œá€»á€Ÿá€±á€Źá€€á€șတညá€șဆေဏကá€șထဏသပေသထဏသတá€Č့ Constructor ကို ေခါá€șတဏပါ။ Default Constructor á€™á€Ÿá€Ź parameters တလေမပါဝငá€șဘá€Č Class နာမညá€ș အတိုငá€șှ á€€á€Œá€±á€Źá€„á€Œá€Źá€‘á€Źá€žá€á€Œá€„á€șသဖဌစá€șပါတယá€ș။ ငပမဏ

class Phone {
  String? name;
  int? brand;

  // Default Constructor
  Phone() {
    print("This is a default constructor");
  }
}

void main() {
  // ဖုနá€șှဆိုတá€Č့ Class á€€á€­á€Żá€žá€Żá€¶á€žá€•á€Œá€źá€ž  samsung ဆိုတá€Č့ phone object တစá€șခုဖနá€șတြှလိုကá€șခဌငá€șသဖဌစá€șပါတယá€ș။
  Phone samsung = Phone();
}


2. Parameterized Constructor

Parameterized constructor ဆိုတာက class တစá€șခုတညá€șဆေဏကá€șတá€Č့ဥခါ အá€Č့ Class instance variable မျဏသကို စတငá€șသတá€șမဟတá€șá€–á€­á€Żá€·á€Ąá€á€œá€€á€ș á€Ąá€žá€Żá€¶á€žá€•á€Œá€Żá€á€Źá€–á€Œá€…á€șပါတယá€ș။တနညá€șှ á€Ąá€Źá€žá€–á€Œá€„á€ș့ Parameterized constructor ဆိုတာ object instance ကနေထညá€șá€·á€•á€±á€žá€œá€­á€Żá€€á€șတá€Č့ parameter á€™á€»á€Źá€žá တနá€șဖိုှ á€€á€­á€Żá€šá€°á€•á€Œá€źá€ž Class á€€á€­á€Żá€œá€Źá€á€±á€«á€șတာနá€Č့ á€Ąá€œá€­á€Żá€œá€»á€±á€Źá€€á€ș properties á€á€œá€±á€–á€­á€Żá€žá€á€œá€±á€€á€­á€Ż သတá€șမဟတá€șá€•á€±á€žá€œá€­á€Żá€€á€șတာကို Parameterized Constructor á€œá€­á€Żá€·á€á€±á€«á€șပါတယá€ș။ အထပá€șá€™á€Ÿá€Ź Car Object တစá€șခု ဖနá€șá€á€źá€žá€•á€Œá€źá€ž ထညá€șá€·á€•á€±á€žá€œá€­á€Żá€€á€ș တá€Č့ Arguments (make,model,year,price) တလေရá€Č့ တနá€șဖိုှကို á€Ąá€œá€­á€Żá€œá€»á€Ÿá€±á€Źá€€á€șသတá€șမဟတá€șဖို့ပါ။ ငပမဏ ဒြ ကုဒá€șကို ပဌနá€șကဌညá€ș့ပါ။


class Car {
  String ?make;
  String? model;
  int ?year;
  double ?price;

    //Parameterized Constructor တစá€șခုဖနá€șတြှလိုကá€șပါတယá€ș။
    Car(this.make,  this.model, this.year,  this.price );
}


void main() {
  // car1 object တညá€șဆေဏကá€șရငá€șှ Car  class ထá€Č ကို argument တလေထညá€ș့သလငá€șá€žá€•á€Œá€źá€žá€á€±á€«á€șလိုကá€șပါတယá€ș။
  Car car1 = Car('Toyota', 'Camry', 2022, 250000.020);


}

3. Named Constructor

Java, C++, C#, စသညá€ș့ ပရိုဂမá€șမငá€șှဘာသာရပá€șá€á€œá€±á€™á€Ÿá€Ź အမညá€șတူ Constructor တလေဖနá€șá€á€źá€žá€œá€­á€Żá€žá€›á€•á€«á€á€šá€ș။ သို့ပေမá€Č့ dart á€™á€Ÿá€Ź မရပါဘူသ။ ဒါပေမá€Č့ အá€Č့ဒါကို လုပá€șဆေဏငá€șá€œá€­á€Żá€·á€›á€á€Č့ နညá€șှလမá€șှက Name Constructor á€€á€­á€Żá€žá€Żá€¶á€žá€•á€Œá€źá€žá€á€±á€Źá€· လုပá€șဆေဏငá€șနိုငá€șခဌငá€șသဖဌစá€șပါတယá€ș။ Named Constructor ကို á€Ąá€žá€Żá€¶á€žá€•á€Œá€Żá€á€Œá€„á€șှက code readability ကို တိုှတတá€șစေပါတယá€ș။ နေဏကá€șတစá€șခုက နာမညá€șတူ constructor တလေဖနá€șá€á€źá€žá€á€Œá€„á€șတá€Čá€·á€Ąá€á€«á€™á€Ÿá€Ź á€Ąá€žá€Żá€¶á€žá€á€„á€șပါတယá€ș။ ငမမဏ

class Car {
  String ?make;
  String? model;
  int ?year;
  double ?price;

    Car(this.make,  this.model, this.year,  this.price );

  // here Car() is a named constructor
  Car.namedConstructor(this.make,  this.model, this.year,[this.price = 0]);

  void displayCarDetails() {
    print("car name: $make.");
    print("car model: $model.");
    print("car model: $year.");
    print("car price: $price");
  }
}

void main() {
  var car1 = Car("Toyota", "Camry", 2022, 20000.00);
  car1.displayCarDetails();
  var car2 = Car.namedConstructor("Honda", "Civic", 2023);
  car2.displayCarDetails();
}

ယခုဖေဏá€șပဌပါ ငပမဏ á€€á€­á€Żá€€á€Œá€Šá€ș့ရငá€ș Car class ထá€Čá€™á€Ÿá€Ź properties တလေထá€Čá€™á€Ÿá€Ź Car Parameterized Constructor တစá€șခု á€Ąá€•á€Œá€„á€ș Car.namedConstructor á€†á€­á€Żá€•á€Œá€źá€ž Name Constructor နေဏကá€șတစá€șခုကို တညá€șဆေဏကá€șá€•á€Œá€źá€ž price ကို default á€Ąá€”á€±á€–á€Œá€„á€ș့ optional ပုံစံနá€Č့သတá€șမဟတá€șá€•á€Œá€źá€žá€›á€±á€žá€žá€Źá€žá€”á€­á€Żá€„á€șပါတယá€ș။

လကá€șတလေ့ လုပá€șငနá€șသခလငá€șသုံသ ပရိုဂမá€șတလေနá€Č့ á€›á€±á€žá€žá€Źá€žá€•á€Œá€źá€ž á€„á€•á€™á€Źá€€á€Œá€Šá€ș့ကဌညá€ș့ပါမယá€ș။


import 'dart:convert';

class Car {
  String ?make;
  String? model;
  Car(this.make,  this.model );

  // here Car() is a named constructor
  Car.fromJson(Map<String, dynamic>json){
    make = json['make'];
    model = json['model'];
  }
}

void main() {
    String carJsonData = '{"make":"Toyota","model":"Carma"}';
  Car car1 = Car.fromJson(jsonDecode(carJsonData));
  print("Car 1 model: ${car1.make}");

}


အထပá€șပါ ကုဒá€șကို ကဌညá€ș့မယá€șဆိုရငá€ș carJsonData ကို ကျနေဏá€șတို့ api request ကနေရတယá€șá€œá€­á€Żá€·á€žá€˜á€±á€Źá€‘á€Źá€žá€€á€Œá€Šá€ș့ပါမယá€ș။ ဒြ jsonDecode လုပá€șထာှတá€Č့ json data ကို Car Object ကနေ argument တစá€șá€á€Żá€Ąá€”á€±á€–á€Œá€„á€ș့ ထညá€șá€·á€•á€±á€žá€œá€­á€Żá€€á€șပါမယá€ș။

Car class ထá€Čá€™á€Ÿá€Ź Name Constructor ဖဌစá€șတá€Č့ Car.fromJson á€™á€Ÿá€Ź parameter ဥနေနá€Č့ လကá€șá€á€¶á€•á€Œá€źá€žá€á€±á€Źá€· porperties တလေဖဌစá€șတá€Č့ make နá€Č့ model တလေရá€Č့ တနá€șá€–á€­á€Żá€žá€á€œá€±á€€á€­á€Ż á€•á€Œá€±á€Źá€„á€șá€žá€•á€±á€žá€œá€­á€Żá€€á€șပါတယá€ș။ á€’á€źá€œá€­á€Żá€•á€Żá€¶á€…á€¶á€™á€»á€­á€Żá€žá€”á€Ÿá€„á€ș့ Flutter á€™á€Ÿá€Ź api က data á€á€œá€±á€€á€­á€Ż ကျနေဏá€șတို့ fetch ခဌငá€șသဖဌစá€șပါတယá€ș။

4. Constant Constructor

const keyword ကို á€žá€Żá€¶á€žá€•á€Œá€źá€ž constant constructor á€á€œá€±á€€á€­á€Ż ရေသသဏသရပါတယá€ș။ const ကို á€žá€Żá€¶á€žá€•á€Œá€źá€ž ဖနá€șတြှထာှတá€Č့ object တလေရá€Č့ တနá€șဖိုှဟာ သတá€șမဟတá€șá€•á€Œá€źá€žá€á€Č့ဥခါ ထပá€șချိနá€șá€žá€œá€­á€Żá€·á€™á€›á€•á€«á€˜á€°á€žá‹

const constructor á€€á€­á€Żá€žá€Żá€¶á€žá€•á€Œá€Żá€á€Œá€„á€șှက ပရိုဂမá€șရá€Č့ စလမá€șသဆေဏငá€șရညá€ș ကို á€•á€­á€Żá€•á€Œá€źá€ž ကေဏငá€șသမလနá€șစေပါတယá€ș။

Constant Constructor ဖနá€șှတြှရနá€ș စညá€șသမျငá€șသမျဏသ

class á€Ąá€á€œá€„á€șá€žá€™á€Ÿá€Ź ရဟိတá€Č့ properites á€á€œá€±á€€á€­á€Ż final ဆိုတá€Č့ keyword á€€á€­á€Żá€žá€Żá€¶á€žá€•á€Œá€źá€žá€€á€Œá€±á€Źá€„á€Œá€Źá€›á€”á€ș
Constant Constructor á€™á€Ÿá€Ź body မရဟိပါ

ငပမဏ


class Point {
  final int x;
  final int y;

  const Point(this.x, this.y);
}

void main() {
  // p1 and p2 has the same hash code.
  Point p1 = const Point(1, 2);
  print("The p1 hash code is: ${p1.hashCode}");

  Point p2 = const Point(1, 2);
  print("The p2 hash code is: ${p2.hashCode}");
  // without using const
  // this has different hash code.
  Point p3 = Point(2, 2);
  print("The p3 hash code is: ${p3.hashCode}");

  Point p4 = Point(2, 2);
  print("The p4 hash code is: ${p4.hashCode}");
}

မဟတá€șသာှရနá€ș

အထပá€șပါ code ကို run ကဌညá€ș့ပါ။ Output á€™á€Ÿá€Ź p1 နဟငá€ș့ p2 ရá€Č့ code တနá€șဖိုှက တူညဟနေတဏကို á€á€œá€±á€·á€›á€™á€Ÿá€Źá€•á€«á‹ သို့ပေမá€Č့ const နá€Č့ မဖနá€șတြှထာှတá€Č့ p3 နá€Č့ p4 တို့ရá€Č့ Object တလေရá€Č့ တနá€șá€–á€­á€Żá€žá€á€œá€±á€€á€á€±á€Źá€· á€á€°á€Šá€źá€”á€±á€™á€Ÿá€Źá€™á€Ÿá€Żá€á€șပါဘူသ။ á€˜á€Źá€€á€Œá€±á€Źá€„á€ș့လá€Čဆိုရငá€ș hash code တလေရá€Č့ constant object တလေက ပရိုဂမá€șက compile လုပá€șတá€Č့ဥချိနá€șá€™á€Ÿá€Ź generate ထုတá€șá€á€Źá€€á€Œá€±á€Źá€„á€ș့ဖဌစá€șပါတယá€ș။ non-constant မဟုတá€șတá€Č့ p3 နá€Č့ p4 object á€á€œá€±á€€á€á€±á€Źá€· ပရိုဂမá€ș run time á€™á€Ÿá€Ź generate á€á€Źá€€á€Œá€±á€Źá€„á€ș့ တနá€șá€–á€­á€Żá€žá€™á€á€°á€Šá€źá€á€Œá€„á€șသဖဌစá€șပါတယá€ș။

Compile Time: ဆိုတာက ကျနေဏá€șတို့ ရေသထဏသတá€Č့ code á€á€œá€±á€€á€­á€Ż computer ကနာှလညá€șဥေဏငá€ș translate လုပá€șတá€Č့ဥချိနá€șကို á€•á€Œá€±á€Źá€á€Źá€•á€«á‹ အá€Č့ဒဟချိနá€șá€™á€Ÿá€Ź ဖဌစá€șပေါá€șတá€Č့ errors á€á€œá€±á€€á€­á€Ż compile-time errors, ငပမဏ typos á€žá€­á€Żá€·á€™á€Ÿá€Żá€á€ș syntax á€Ąá€™á€Ÿá€Źá€žá€á€œá€±á€›á€±á€žá€žá€Źá€žá€™á€­á€á€Œá€„á€șှ။

Run Time: ဆိုတာက ကျနေဏá€șတို့ ရေသထဏသတá€Č့ ကုဒá€ș á€á€œá€±á€€á€­á€Ż စတငá€șá€•á€Œá€źá€ž execute လုပá€șတá€Č့ဥချိနá€șကို á€•á€Œá€±á€Źá€†á€­á€Żá€á€Œá€„á€șသဖဌစá€șပါတယá€ș။ အá€Č့ဒဟချိနá€șá€™á€Ÿá€Ź တလေ့တá€Č့ error á€á€œá€±á€€á€­á€Żá€á€±á€Źá€· run-time errors, ငပမဏ á€žá€Żá€Šá€–á€Œá€„á€·á€ș စာှရနá€ș လုပá€șဆေဏငá€șမိတဏတို့ á€žá€­á€Żá€·á€™á€Ÿá€Żá€á€ș မရဟိတá€Č့ ဒေတဏကို accessing လုပá€șတဏတို့။

#

Encapsulation In Dart

á€Ąá€›á€­á€Żá€žá€›á€Ÿá€„á€șသဆုံသနညá€șှလမá€șှနá€Č့ á€•á€Œá€±á€Źá€›á€›á€„á€ș Encapsulation ဆိုတာ library(ဆိုတဏကျနေဏá€șထပá€șရဟငá€șသပဌပါမယá€ș) á€Ąá€á€œá€„á€șှက ဒေတဏကို ပဌငá€șပ နေရဏကနေ လဟမá€șသယူခေါá€șá€žá€Żá€¶á€žá€á€œá€„á€șá€·á€™á€›á€Ÿá€­á€Ąá€±á€Źá€„á€ș á€–á€Żá€¶á€žá€€á€œá€šá€șá€‘á€Źá€žá€á€Œá€„á€șှကို á€†á€­á€Żá€œá€­á€Żá€á€Źá€•á€«á‹ အá€Čá€·á€œá€­á€Żá€”á€Šá€șှစနစá€șá€€á€­á€Żá€Ąá€žá€Żá€¶á€žá€•á€Œá€Żá€•á€Œá€źá€žá€›á€±á€žá€žá€Źá€žá€á€Œá€„á€șှက မိမိရေသတá€Č့ ပရိုဂမá€șကို အရမá€șှရူပá€șá€‘á€œá€±á€žá€™á€Ÿá€Żá€™á€–á€Œá€…á€șစေဘá€Čá€›á€­á€Żá€žá€›á€Ÿá€„á€șá€žá€•á€Œá€źá€ž ကုဒá€șစဟမံထိမá€șသချုပá€șရ လလယá€șကူစေချငá€șသဖဌစá€șပါတယá€ș။

á€•á€Żá€¶á€™á€Ÿá€”á€șá€Ąá€Źá€žá€–á€Œá€„á€ș့ .dart နá€Č့ file ကို library á€œá€­á€Żá€žá€Żá€¶á€žá€”á€°á€”á€șှလိုကá€șခဌငá€șသဖဌစá€șပါတယá€ș။ library ဆိုတာက functions တလေ နဟငá€ș့ classess တလေ ပါဝငá€șဖလá€Č့စညá€șှထာှတá€Č့ .dart file တစá€șဖိုငá€șကို ရညá€șရလယá€șပါတယá€ș။ import keyword ကို á€Ąá€žá€Żá€¶á€žá€•á€Œá€Żá€•á€Œá€źá€ž library တစá€șခုနá€Č့ တစá€șခု ချိတá€șဆကá€șအလုပá€șလုပá€șနိုငá€șပါတယá€ș။ အá€Čá€·á€œá€­á€Ż ချိတá€șဆကá€șအလုပá€șလုပá€șရငá€șှ library တစá€șခု၏ á€Ąá€á€œá€„á€șသမဟ နေဏကá€ș library တစá€șခုက á€œá€Źá€á€±á€«á€șá€šá€°á€žá€Żá€¶á€žá€…á€œá€Čခလငá€șá€·á€™á€›á€Ÿá€­á€Ąá€±á€Źá€„á€ș data á€á€œá€±á€€á€­á€Ż á€–á€Żá€¶á€žá€€á€œá€šá€șထာှ ခဌငá€șှကို encapsulation á€œá€­á€Żá€á€±á€«á€șခဌငá€șသဖဌစá€șပါတယá€ș။

encapsulation လုပá€șဆေဏငá€șနိုငá€șရနá€ș

  1. calss á€Ąá€á€œá€„á€șသမဟ properties á€á€œá€±á€€á€­á€Ż private (_) underscore á€€á€­á€Żá€Ąá€žá€Żá€¶á€žá€•á€Œá€Żá€•á€Œá€źá€ž á€€á€Œá€±á€Źá€„á€Œá€Źá€•á€±á€žá€›á€™á€Ÿá€Ź ဖဌစá€șပါတယá€ș။
  2. အထပá€șပါ private ဥနေနá€Č့ ဖနá€șတြှလိုကá€șတá€Č့ properties တလေ၏ တနá€șဖိုှကို á€•á€Œá€Żá€•á€Œá€„á€șဖို့ သို့ ခေါá€șယူဖို့ ဆိုရငá€ș public getter နá€Č့ setter methods တလေတညá€șဆေဏကá€șá€•á€Œá€źá€ž ခေါá€șá€šá€°á€•á€Œá€Żá€•á€Œá€„á€șရပါမယá€ș။

မဟတá€șသာှရနá€ș

Dart á€™á€Ÿá€Ź php á€œá€­á€Żá€€á€»á€”á€±á€Źá€șတို့ရေသ နေကျ Access Modifiers ဖဌစá€șတá€Č့ public, private နá€Č့ protected á€á€­á€Żá€·á€†á€­á€Żá€á€Źá€™á€›á€Ÿá€­á€•á€«á€˜á€°á€žá‹ Dart á€™á€Ÿá€Ź က _ (undersore) á€€á€­á€Żá€žá€Żá€¶á€žá€•á€Œá€źá€ž private property သို့ method á€á€œá€±á€€á€­á€Ż ရေသသဏသရတဏပါ။ Encapsulation ဆိုတာနá€Č့ class level á€™á€Ÿá€Ź မဟုတá€șဘá€Č library level á€™á€Ÿá€Źá€–á€Œá€…á€șတဏဆိုတဏသတိချပá€șစေချငá€șပါတယá€ș။

ငပမဏ : Encapsulation

Hero ဆိုတá€Č့ class တစá€șခုကို ဖနá€șတြှလိုကá€șမယá€ș။ အá€Č့ class á€™á€Ÿá€Ź privagte properties _id နá€Č့ _name နဟစá€șခု ရဟိပါမယá€ș။ ကျနေဏá€șတို့ နေဏကá€ș ထပá€ș public methods setId() နá€Č့ setName() á€†á€­á€Żá€•á€Œá€źá€ž private properties ကို á€•á€Œá€Żá€•á€Œá€„á€șဖို့ ထပá€șá€•á€Œá€źá€žá€á€Šá€șဆေဏကá€șကဌညá€ș့ပါမယá€ș။ á€’á€źá€”á€±á€›á€Źá€™á€Ÿá€Ź getter တလေ setter á€á€œá€±á€žá€Żá€¶á€žá€žá€œá€Źá€žá€á€Ź ကို ဥေဏကá€șá€™á€Ÿá€Ź getter တလေ setter တလေထပá€șမံရဟငá€șှလငá€șá€žá€žá€œá€Źá€žá€•á€«á€™á€šá€ș။

class Hero {
  // Private properties တလေတညá€șဆေဏကá€șထဏသတဏပါ
  int? _id;
  String? _name;

// Getter method ကိုတညá€șဆေဏကá€șá€•á€Œá€źá€ž  private property _id ကို access ယူဖို့ပါ။
  int getId() {
    return _id!;
  }
// Getter method ကိုတညá€șဆေဏကá€șá€•á€Œá€źá€ž  private property _name ကို access ယူဖို့ပါ။
  String getName() {
    return _name!;
  }
// Setter method တညá€șဆေဏကá€șá€•á€Œá€źá€ž private property _id ၏တနá€șဖိုှ ကို á€•á€Œá€Żá€•á€Œá€„á€șဖို့ပါ။
  void setId(int id) {
    this._id = id;
  }
// Setter method တညá€șဆေဏကá€șá€•á€Œá€źá€ž private property _name ၏တနá€șဖိုှ ကို á€•á€Œá€Żá€•á€Œá€„á€șဖို့ပါ။
  void setName(String name) {
    this._name = name;
  }

}

void main() {
  // Hero class ၏ Object တစá€șခုကို ဖနá€șတြှမယá€ș
  Hero hero = new Hero();
  //public setter á€€á€­á€Żá€žá€Żá€¶á€žá€•á€Œá€źá€ž private properties တလေ၏ တနá€șဖိုှကို á€•á€Œá€±á€Źá€„á€șှမယá€ș။
  hero.setId(1);
  hero.setName("ကျနá€șစစá€șသာှ");

  // getter ကို á€žá€Żá€¶á€žá€•á€Œá€źá€ž object ၏ တနá€șဖိုှ á€á€œá€±á€€á€­á€Ż ပဌနá€șထုတá€șကဌညá€ș့မယá€ș။
  print("Id: ${hero.getId()}");
  print("Name: ${hero.getName()}");
}

အထပá€șá€™á€Ÿá€Źá€•á€Œá€á€Č့ example ကိုဘá€Č private properties တလေရá€Č့ တနá€șဖိုှကို နေဏကá€șတနညá€șှနá€Č့ တိုကá€șရိုကá€ș á€žá€œá€Źá€žá€‘á€­á€€á€Œá€Šá€ș့ပါမယá€ș။

class Hero {
//  အထပá€șပါကုဒá€șá€™á€»á€Źá€žá€’á€źá€™á€Ÿá€Ź အရငá€șတိုငá€șသရဟိတယá€șá€žá€˜á€±á€Źá€‘á€Źá€žá€•á€«
  ....
}
void main() {
  // Hero class ၏ Object တစá€șခုကို ဖနá€șတြှမယá€ș
  Hero hero = new Hero();
  //public setter á€€á€­á€Żá€žá€Żá€¶á€žá€•á€Œá€źá€ž private properties တလေ၏ တနá€șဖိုှကို á€•á€Œá€±á€Źá€„á€șှမယá€ș။
  hero.setId(1);
  hero.setName("ကျနá€șစစá€șသာှ");

  //á€’á€źá€”á€±á€›á€Źá€™á€Ÿá€Ź _name ကို တိုကá€șရိုကá€șá€žá€œá€Źá€žá€á€±á€«á€șá€•á€Œá€źá€ž တနá€șဖိုသချိနá€șှလိုကá€șတဏပါ။ အá€Čá€·á€’á€«á€†á€­á€Żá€œá€Č အလုပá€șလုပá€șá€”á€±á€™á€Ÿá€Ź á€˜á€Źá€œá€­á€Żá€· private á€†á€­á€Żá€•á€Œá€źá€ž private မဖဌစá€șတာလá€Č?
  hero._name = "á€„á€œá€Żá€¶á€žá€œá€–á€šá€ș";

  // getter ကို á€žá€Żá€¶á€žá€•á€Œá€źá€ž object ၏ တနá€șဖိုှ á€á€œá€±á€€á€­á€Ż ပဌနá€șထုတá€șကဌညá€ș့မယá€ș။
  print("Id: ${hero.getId()}");
  print("Name: ${hero.getName()}");
}

ဥပေါá€șá€™á€Ÿá€Ź á€•á€Œá€±á€Źá€á€Čá€·á€žá€œá€­á€Żá€˜á€Č သူက class level မဟုတá€șပါ library level ဖဌစá€șá€œá€­á€Żá€·á€•á€«á‹ အကယá€șလို void main() function ကို နေဏကá€ș .dart file နá€Č့ library တစá€șခုသြှသနá€ș့ဆေဏကá€șá€•á€Œá€źá€žá€šá€á€Żá€œá€­á€Żá€á€±á€«á€șကဌညá€șတá€Č့ဥခါ error တတá€șပါလိမá€ș့မယá€ș။

main.dart file ကနေ hero.dart file á€†á€­á€Żá€•á€Œá€źá€ž library နဟစá€șခု ခလá€Čá€·á€•á€Œá€źá€ž ဒြနညá€șှအတိုငá€șသရေသကဌညá€ș့တá€Č့ဥခါ ယခုလို error ကို á€á€œá€±á€·á€›á€™á€Ÿá€Źá€–á€Œá€…á€șပါတယá€ș။

```The setter ‘_name’ isn’t defined for the type ‘Hero’. Try importing the library that defines ‘_name’, correcting the name to the name of an existing setter, or defining a setter or field named ‘_name’.dartundefined_setter


#### Read-only Properties á€†á€­á€Żá€•á€Œá€źá€ž သတá€șမဟတá€șá€œá€­á€Żá€·á€›á€•á€«á€žá€±á€žá€á€šá€ș။ ငပမဏ

```dart
class Hero {
  int? _id;
 final String _name = "ကျနá€șစစá€șသာှ";
//  အထပá€șပါကုဒá€șá€™á€»á€Źá€žá€’á€źá€™á€Ÿá€Ź အရငá€șတိုငá€șသရဟိတယá€șá€žá€˜á€±á€Źá€‘á€Źá€žá€•á€«
  ....
}
void main() {
  ...
  // ဒါဆိုရငá€șတေဏ့ error တတá€șá€•á€«á€•á€Œá€ź
  hero._name = "á€„á€œá€Żá€¶á€žá€œá€–á€šá€ș";
  ....
}

final keyword ကို á€žá€Żá€¶á€žá€•á€Œá€źá€ž properties တလေရá€Č့ တနá€șဖိုှကို read only ပုံစံ နá€Č့ dart á€™á€Ÿá€Ź á€Ąá€žá€Żá€¶á€žá€•á€Œá€Żá€”á€­á€Żá€„á€șပါတယá€ș။ ဒြလို final နá€Č့ property တနá€șဖိုှကို သတá€șမဟတá€șá€•á€Œá€źá€žá€•á€Œá€źá€†á€­á€Żá€›á€„á€ș library á€Ąá€á€œá€„á€șသကနေ တနá€șဖိုှကို ချိနá€șှပိုငá€șခလငá€ș့လá€Č á€™á€›á€Ÿá€­á€á€±á€Źá€·á€•á€«á€˜á€°á€žá‹

##

Encapsulation á€€á€˜á€Źá€€á€Œá€±á€Źá€„á€ș့ á€Ąá€›á€±á€žá€€á€Œá€źá€žá€žá€œá€Č?

##

Getter And Setter

  1. Getter ဆိုတာ ဘာလá€Č? class á€Ąá€á€œá€„á€șသမဟ property တလေ၏ တနá€șဖိုှကို ယူဖို့ á€Ąá€á€œá€€á€ș getter á€á€œá€±á€žá€Żá€¶á€žá€á€Źá€•á€«á‹ တနညá€șá€žá€Ąá€Źá€žá€–á€Œá€„á€ș့ object တစá€șခုဖနá€șတြှတá€Č့ဥခါ class á€Ąá€á€œá€„á€șá€žá€™á€Ÿá€Źá€›á€Ÿá€­á€á€Č့ properties တလေရá€Č့ တနá€șဖိုှကို ယူဖို့ getter á€á€œá€±á€€á€­á€Ż သုံသပါတယá€ș။

ငပမဏ

class Person {
  // Properties
  String? firstName;
  String? lastName;

  // Parameterized constructor ကနေ firstName နá€Č့ lastName တနá€șဖိုသမျဏသဥဏသ သတá€șမဟတá€șလိုကá€șပါတယá€ș။
  Person(this.firstName, this.lastName);

  // Getter က á€’á€źá€”á€±á€›á€Źá€™á€Ÿá€Ź properties တနá€șá€–á€­á€Żá€žá€á€œá€±á€€á€­á€Ż runturn ပဌနá€șá€•á€±á€žá€œá€­á€Żá€€á€șပါတယá€ș။
  String get fullName => "$firstName $lastName";
}

void main() {
  Person p = Person("John", "Doe");
  // á€’á€źá€”á€±á€›á€Źá€™á€Ÿá€Ź object p ကို ဖနá€șá€á€źá€žá€•á€Œá€źá€žá€”á€±á€Źá€€á€ș p.fullName ဆိုတá€Č့ get (getter) ကို လမá€șသခေါá€șá€•á€Œá€źá€ž properties တလေရá€Č့တနá€șဖိုှကို ထုတá€șကဌညá€șá€·á€žá€œá€Źá€žá€á€Źá€€á€­á€Ż á€á€œá€±á€·á€›á€™á€Ÿá€Źá€•á€«
  print(p.fullName);
}

မဟတá€șသာှရနá€ș :

getter ကို ရေသတá€Č့ပုံစံ နဟစá€șမျိုသရေသနိုငá€șပါတယá€ș။ ဥပေါá€șက ငပမဏက ဒြ => (fat arrow) á€€á€­á€Żá€žá€Żá€¶á€žá€•á€Œá€źá€ž ရေသသဏသထဏသတဏပါ။

  String get fullName => "$firstName $lastName";

နေဏကá€ș တစá€șနညá€șှက { } á€šá€á€Żá€œá€­á€Żá€›á€±á€žá€žá€Źá€žá€”á€­á€Żá€„á€șပါတယá€ș။

 String get fullName {
    return "$firstName $lastName";
  }
  1. Setter ဆိုတာ ဘာလá€Č? Setter ဆိုတာက proterty တလေရá€Č့ တနá€șဖိုှကို သတá€șမဟတá€ș သို့ á€•á€Œá€Żá€•á€Œá€„á€ș လိုကá€șတဏပါ။ တနညá€șá€žá€Ąá€Źá€žá€–á€Œá€„á€ș့ object တစá€șခုဖနá€șတြှတá€Č့ဥခါ class á€Ąá€á€œá€„á€șá€žá€™á€Ÿá€Ź ရဟိတá€Č့ properties တလေရá€Č့ တနá€șဖိုှကို á€•á€Œá€Żá€•á€Œá€„á€șá€–á€­á€Żá€·á€Ąá€á€œá€€á€ș write လုပá€șလိုကá€șခဌငá€șသဖဌစá€șပါတယá€ș။ á€™á€»á€Źá€žá€žá€±á€Źá€Ąá€Źá€žá€–á€Œá€„á€ș့ private property တလေ၏ တနá€șဖိုှကို á€•á€Œá€Żá€•á€Œá€„á€șဖို့သုံသတဏမျဏသပါတယá€ș။

ငပမဏ

class Person {
  int _age;

  Person(this._age);
//getter
  int get age => _age;
//setter ကို set ဆိုတာနá€Č့ ဖနá€șတြှလိုကá€șပါတယá€ș။ age ဆိုတá€Č့ properties ကို á€•á€Œá€Żá€•á€Œá€„á€șá€–á€­á€Żá€·á€Ąá€á€œá€€á€ș set age ထá€Čá€™á€Ÿá€Ź newAge parameter တစá€șခုကို လကá€șခံထဏသပါတယá€ș
  set age(int newAge) {
    // ရလာတá€Č့ newAge ရá€Č့တနá€șဖိုှကို if condition နá€Č့ စစá€șဆေသထဏသပါတယá€ș။
    if (newAge >= 0 && newAge <= 120) {
      //newAge က 0 နá€Čညြမယá€ș သူ့ထကá€șá€€á€Œá€źá€žá€™á€šá€ș á€•á€Œá€źá€žá€á€±á€Źá€· ၁၂၀ နá€Čá€·á€Šá€źá€•á€Œá€źá€ž ၁၂၀ ထကá€șငယá€șမယá€șဆိုရငá€ș private property _age တနá€șဖိုှကို á€œá€Źá€•á€Œá€±á€Źá€„á€șá€žá€žá€œá€Źá€žá€•á€«á€™á€šá€ș။
      _age = newAge;
      print("Age updated successfully!");

    } else {
      //if condition နá€Č့ မညြတá€Čá€·á€Ąá€›á€Źá€á€œá€±á€€á€­á€Ż á€’á€źá€™á€Ÿá€Ź á€œá€Źá€•á€Œá€źá€ž အလုပá€șလုပá€șá€žá€œá€Źá€žá€™á€Ÿá€Źá€•á€«á‹
      print("Invalid age. Please provide a valid age between 0 and 120.");
    }
  }
}

void main() {
  //person object တစá€șခု ဖနá€șတá€Č့ဥခါ argument 25 ဆိုတá€Č့ age ကိုထညá€șá€·á€•á€±á€žá€œá€­á€Żá€€á€șပါတယá€ș။
  var person = Person(25);
  //လကá€șá€›á€Ÿá€­á€Ąá€žá€€á€ș 25 ကို ထုတá€șပေသပါလိမá€ș့မယá€ș
  print("Current age: ${person.age}");

  //ဒြကုဒá€șက setter age ကိုခေါá€șá€•á€Œá€źá€ž တနá€șဖိုှ 30 ထညá€șá€·á€•á€Œá€źá€ž _age value ကို ပဌငá€șလိုကá€șပါတယá€ș။
  person.age = 30;
  print("Updated age: ${person.age}");

  //á€’á€źá€™á€Ÿá€Ź လá€Čဘá€Č setter age ကို တနá€șဖိုှ ၁၅၀ ထညá€șá€·á€•á€Œá€źá€ž _age value ကို ပဌငá€șá€–á€­á€Żá€·á€€á€Œá€­á€Żá€žá€…á€Źá€žá€•á€±á€™á€Č့ error message ဘá€Čရပါလိမá€ș့မယá€ș။
  person.age = 150; // Error message will be printed
  print("Age after invalid update: ${person.age}");

}

အထကá€șပါ ငပမဏ á€€á€­á€Żá€€á€Œá€Šá€ș့ရငá€ș setter တလေ dart á€™á€Ÿá€Ź ဘယá€șလို အလုပá€șလုပá€șလá€Č နာလညá€șá€•á€Œá€źá€œá€­á€Żá€·á€šá€°á€…á€•á€«á€á€šá€ș။ အကယá€șá€œá€­á€Żá€· နာှမလညá€șရငá€ș နေဏကá€șတကဌိမá€ș ကျနေဏá€șá€•á€Œá€‘á€Źá€žá€á€Č့ code ကို သေချဏ ပဌနá€șဖတá€șá€•á€Œá€źá€ž လိုကá€șá€›á€±á€žá€•á€Œá€źá€ž result á€á€œá€±á€‘á€Żá€á€șကဌညá€ș့ပါ။

INHERITANCE IN DART

Inhertiance ဆိုတာ á€Ąá€œá€œá€šá€șá€á€€á€°á€•á€Œá€±á€Źá€›á€›á€„á€ș á€™á€­á€˜á€†á€źá€€á€”á€± သာှသမြှက á€Ąá€™á€œá€±á€†á€€á€șခံတá€Čá€·á€žá€˜á€±á€Ź á€€á€­á€Żá€•á€Œá€±á€Źá€á€šá€șá€œá€­á€Żá€·á€žá€±á€˜á€Źá€‘á€Źá€žá€€á€Œá€Šá€ș့ပါ။ မိဘပိုငá€șတá€Č့ကဏသ á€žá€°á€·á€žá€Źá€žá€žá€™á€źá€žá€á€œá€±á€€ ယူမေဏငá€șá€žá€œá€­á€Żá€·á€›á€á€šá€ș။ dart á€™á€Ÿá€Źá€†á€­á€Żá€›á€„á€șလá€Č class နဟစá€șခု á€€á€Œá€Źá€ž သူတို့ပိုငá€șဆိုငá€șတá€Č့ properties တလေ methods á€á€œá€±á€€á€­á€Ż share á€žá€Żá€¶á€žá€á€Œá€„á€șှကို inherticance á€œá€­á€Żá€·á€á€±á€«á€șပါတယá€ș။ extend keyword ကို á€žá€Żá€¶á€•á€Œá€źá€ž Parent class က နေ Inheritance ကို လုပá€șဆေဏငá€șရပါတယá€ș။

မဟတá€șသာှရနá€ș :

Inherticance ကို ဖနá€șတြှလိုကá€șတာနá€Č့ မိဘ နဟငá€ș့ သာှသမြှ á€€á€Œá€Źá€žá€€ is-a relation တစá€șခုဖနá€șတြှ လိုကá€șတယá€șá€œá€­á€Żá€·á€™á€Œá€„á€șကဌညá€ș့ပါ။ ငပမဏ Student is a Person, Car is a Vehicle, Dog is a Animal, School is a building စသညá€șá€·á€á€­á€Żá€·á€–á€Œá€…á€șပါတယá€ș။

Dart á€™á€Ÿá€Źá€€ single inheritance ကိုဘá€Čလုပá€șဆေဏငá€șနိုငá€șပါတယá€ș။ ဆိုလိုတာက class တစá€șခုက နေဏကá€șထပá€ș class တစá€șခုဆြကဘá€Č inheritance လုပá€șá€šá€°á€œá€­á€Żá€·á€›á€™á€Ÿá€Źá€•á€«á‹ multiple inheritance လုပá€șá€œá€­á€Żá€·á€™á€›á€•á€«á€˜á€°á€žá‹ class တစá€șခုက classes á€Ąá€™á€»á€Źá€žá€€á€Œá€źá€žá€†á€źá€€á€”á€± inheritance ယူခလငá€ș့မရဟိပါ။ ဥဖေက တစá€șယေဏကá€șထá€Čဘá€Čá€›á€Ÿá€­á€á€Źá€€á€­á€Żá€ž á€Ąá€–á€±á€”á€Ÿá€…á€șယေဏကá€șသုံသယေဏကá€șဆဟကနေ á€Ąá€™á€œá€±á€†á€€á€șá€á€¶á€œá€­á€Żá€·á€™á€›á€”á€­á€Żá€„á€șá€žá€œá€­á€Żá€•á€±á€«á€· :D


###

Syntax
// á€žá€°á€·á€Ąá€á€œá€„á€șá€žá€™á€Ÿá€Ź ရဟိတá€Č့ properties တလေ methods á€á€œá€±á€€á€­á€Ż á€œá€Źá€•á€Œá€źá€ž á€šá€°á€žá€Żá€¶á€žá€™á€Ÿá€Źá€–á€Œá€…á€șတá€Čá€·á€Ąá€á€œá€€á€ș သူ့ကို Base class သို့ super class ကို ခေါá€șပါတယá€ș။
class ParentClass {

  // Parent class code
}

//Base class ကနေ properties တလေ methods á€á€œá€±á€€á€­á€Ż ခေါá€șá€šá€°á€žá€Żá€¶á€žá€™á€Ÿá€Źá€™á€­á€Żá€· သူကို derived class သို့ sub class á€œá€­á€Żá€·á€á€±á€«á€șပါတယá€ș။
class ChildClass extends ParentClass {
  // Child class code
}

ငပမဏ Character ဆိုတá€Č့ class တစá€șခု ကိုဖနá€șတဟသပါမယá€ș။ နေဏကá€ș ကျနေဏá€șတို့ hero class တစá€șခုဆေဏကá€șá€•á€Œá€źá€ž Character ထá€Čက properties တလေနá€Č့ methods á€á€œá€±á€€á€­á€Ż á€Ąá€™á€œá€±á€†á€€á€șခံကဌညá€ș့ပါမယá€ș။

class Character {
  // Properties
  String? name;
  int? age;

  // Method
  void display() {
    print("Name: $name");
    print("Age: $age");
  }
}
//hero class တစá€șခုဆေဏကá€șá€•á€Œá€źá€ž Character ထá€Čက properties တလေနá€Č့ methods á€á€œá€±á€€á€­á€Ż extends နá€Č့ á€Ąá€™á€œá€±á€†á€€á€șခံထဏသပါတယá€ș

class Hero extends Character {
  // Fields
  String? wapon;

  // Method
  void displaySchoolInfo() {
    print("$name á€™á€Ÿá€Ź: $wapon ရဟိသညá€ș");
  }
}

void main() {
  // Creating an object of the Hero class
  var hero = Hero();
  hero.name = "ကျနá€șစစá€șသာှ";
  hero.age = 45;
  hero.wapon = "လဟံ";
  hero.display();
  hero.displaySchoolInfo();
}


Inheritance ၏ ကေဏငá€șသကျိုသမျဏသ

Inheritance ဥမျိုသဥစဏသမျဏသ

Multilevel Inheritance ငပမဏ တစá€șခု လုပá€șကဌညá€ș့ပါမယá€ș။


class Vehical {
String? name;
double? prize;
}

class Tesla extends Vehical {
void display() {
  print("Name: ${name}");
  print("Prize: ${prize}");
}
}

class Model3 extends Tesla {
String? color;

void display() {
    // á€’á€źá€”á€±á€›á€Źá€™á€Ÿá€Ź suber ကိုသုံသထဏသတဏ သတိချပá€șစေချငá€șပါတယá€ș။ Base class Vehical ကနေ display method ကို á€šá€°á€žá€Żá€¶á€žá€žá€œá€Źá€žá€á€Źá€•á€«
  super.display();
  print("Color: ${color}");
}
}

void main() {
Model3 m = new Model3();
m.name = "Tesla Model 3";
m.prize = 50000.00;
m.color = "Red";
m.display();
}

Hierarchical Inheritance ငပမဏ တစá€șခု လုပá€șကဌညá€ș့ပါမယá€ș။ အထပá€șá€™á€Ÿá€Ź ပဌခá€Č့တá€Č့ Character ကိုဘá€Č နေဏကá€șထပá€ș Hero တစá€șယေဏကá€șထပá€șဆေဏကá€șလိုကá€șပါ။

class Character {
  // Properties
  String? name;
  int? age;

  // Method
  void display() {
    print("Name: $name");
    print("Age: $age");
  }
}
// Here In hero class, we are extending the
// properties and methods of the Character class
class Hero extends Character {
  // Fields
  String? wapon;

  // Method
  void displaySchoolInfo() {
    print("$name á€™á€Ÿá€Ź: $wapon ရဟိသညá€ș");
  }
}
class Hero2 extends Character {
  // Fields
  String? wapon;

  // Method
  void displaySchoolInfo() {
    print("$name á€™á€Ÿá€Ź: $wapon ရဟိသညá€ș");
  }
}

void main() {
  // Creating an object of the Hero class
  var hero = Hero();
  hero.name = "ကျနá€șစစá€șသာှ";
  hero.age = 45;
  hero.wapon = "လဟံ";
  hero.display();
  hero.displaySchoolInfo();

   // Creating an object of the Hero class
  var hero2 = Hero2();
  hero2.name = "ဥနေဏá€șရထာ";
  hero2.age = 50;
  hero2.wapon = "á€™á€Œá€Źá€ž";
  hero2.display();
  hero2.displaySchoolInfo();
}


မဟတá€șသာှရနá€ș

Dart á€™á€Ÿá€Ź á€˜á€Źá€œá€­á€Żá€· Multiple Inheritance ကို ခလငá€șá€·á€™á€•á€Œá€Żá€á€Źá€œá€Č?

á€˜á€Źá€œá€­á€Żá€·á€œá€Čဆိုရငá€ș ambiguity (ကုဒá€ș ရူတá€șá€‘á€œá€±á€žá€™á€Ÿá€Ż) ကို ဖဌစá€șá€…á€±á€œá€­á€Żá€•á€«á‹ ငပမဏ Apple ဆိုတá€Č့ sub class က Base class Fruit နá€Č့ Vegetable နဟစá€șခုကနေ extend နá€Č့ á€Ąá€™á€œá€±á€†á€€á€șခံထဏသတဆိုပါဆို့။ အá€Č့ဒဟ့ Base Classes နဟစá€șá€á€Żá€™á€Ÿá€Ź eat ဆိုတá€Č့ နာမညá€șတူ Method နဟစá€șá€á€Żá€›á€Ÿá€­á€”á€±á€”á€­á€Żá€„á€șပါတယá€ș။ အá€Čá€·á€œá€­á€Żá€†á€­á€Żá€›á€„á€ș eat ဆိုတá€Č့ method ကို Apple က á€žá€œá€Źá€žá€á€±á€«á€șတá€Č့ဥခါ ဘယá€ș Fruit နဟငá€ș့ Vegetable Base class ၏ eat method နဟစá€șခုထá€Čက ဘယá€ș Method ကို ခေါá€șá€™á€Ÿá€Źá€œá€Čဆိုတာ ?။ အá€Čá€·á€œá€­á€Ż ရူပá€șá€‘á€œá€±á€žá€™á€Ÿá€Żá€€á€Œá€±á€Źá€„á€ș့ Dart က Support á€™á€•á€±á€žá€á€Źá€–á€Œá€…á€șပါတယá€ș။

INHERITANCE OF CONSTRUCTOR IN DART

ကျနေဏá€șတို့ ဥပေါá€șá€™á€Ÿá€Ź á€œá€±á€·á€œá€Źá€á€Č့တá€Č့ Constructor နá€Č့ Inhertiance ကို ပေါငá€șá€žá€•á€Œá€źá€ž á€žá€Żá€¶á€žá€…á€œá€Čခဌငá€șသပါ။ á€’á€«á€€á€Œá€±á€Źá€„á€ș့ Constructor နá€Č့ Inhertiance ကို နာှလညá€șမဟ ဒြကိစá€čစကို ဆကá€șလကá€șá€œá€±á€·á€œá€Źá€•á€«á‹

Constructor Inheritance ဆိုတာဘာလá€Č ?

Base Class (Parent Class ) ထá€Čက Constructor ကို sub class ကနေ á€Ąá€™á€œá€±á€†á€€á€șခံ သို့ ခေါá€șá€šá€°á€žá€Żá€¶á€žá€…á€œá€Čတာကို á€†á€­á€Żá€œá€­á€Żá€á€Źá€•á€«á‹

ငပမဏ ဥပါá€șá€™á€Ÿá€Ź á€œá€±á€·á€œá€Źá€á€Č့ တá€Č့ constructor á€œá€±á€žá€™á€»á€­á€Żá€žá€‘á€Čက Parameterize constructor နá€Č့ Inheritance ပေါငá€șှစပá€șရေသကဌညá€ș့ပါမယá€ș။

class Character {
  String name;
  int health;

  Character(this.name, this.health);

  void takeDamage(int damage) {
    health -= damage;
    print('$name took $damage damage. Remaining health: $health');
  }

  void attack(Character target, int damage) {
    print('$name performs an attack on ${target.name}.');
    target.takeDamage(damage);
  }

  void showInfo() {
    print('$name - Health: $health');
  }
}

class Hero extends Character {
  String superpower;

//á€’á€źá€”á€±á€›á€Źá€™á€Ÿá€Ź Hero Constructor က : super(name,150)  á€†á€­á€Żá€•á€Œá€źá€ž Base Class Character ထá€Čက constructor ကို Inheritance လုပá€șá€žá€œá€Źá€žá€á€Œá€„á€șသဖဌစá€șပါတယá€ș။
  Hero(String name, this.superpower) : super(name, 150);

  void useSuperpower() {
    print('$name uses superpower: $superpower');
  }

  @override
  void attack(Character target, int damage) {
    print('$name performs a heroic attack on ${target.name}.');
    target.takeDamage(damage);
  }
}

void main() {
  var enemy = Character('Evil Enemy', 100);
  var hero = Hero('Superhero', 'Flight');

  enemy.showInfo();
  hero.showInfo();

  hero.attack(enemy, 20);
  hero.useSuperpower();

  enemy.showInfo();
  hero.showInfo();
}


Polymorphism In Dart

အရငá€șဆုံá€Čှ polymorphism á€…á€€á€Źá€žá€œá€Żá€¶á€žá€€á€­á€Ż အဓပá€čပါယá€șဖလငá€ș့ကဌညá€ș့ပါမယá€ș။ Poly ဆိုတာ Many (á€Ąá€™á€»á€Źá€žá€Ąá€•á€Œá€Źá€ž) morphism ဆိုတာ (ပုံစံ) á€•á€Żá€¶á€…á€¶á€Ąá€™á€»á€Źá€žá€Ąá€•á€Œá€Źá€ž ဆိုတá€Č့ အဓပá€čပါယá€șသပá€șရေဏကá€șတယá€ș။ ငပမဏ á€œá€°á€žá€Źá€žá€á€œá€±á€™á€Ÿá€Źá€†á€­á€Żá€›á€„á€ș á€á€á€»á€­á€Żá€·á€œá€°á€á€œá€±á€€ ကျေဏငá€șá€žá€žá€Źá€žá€á€œá€±áŠ á€á€á€»á€­á€Żá€·á€œá€°á€á€œá€±á€€ á€†á€›á€Źá€á€œá€± ၊ á€á€á€»á€­á€Żá€·á€œá€°á€á€œá€±á€€ ဥဂျá€șá€”á€źá€šá€Źá€á€œá€± စသညá€ș့ဖဌစá€șပေါ့ဗျဏ။​ ဟို ဂျပု မအလ မပါဘူ ကျနေဏá€șá€•á€Œá€±á€Źá€á€Č့လူထá€Čá€™á€Ÿá€Ź :p ။ အá€Čá€·á€œá€­á€Żá€˜á€Č object-oriented programming ဆိုရငá€ș object တစá€șခုက ပုံစံမျိုသစုံ á€Ąá€žá€œá€„á€șဖနá€șတြှနိုငá€șတá€Č့ စလမá€șှရညá€ș ရဟိပါတယá€ș။

မဟတá€șသာှရနá€ș :

  1. Polymorphism By Method Overriding

Child Class (Sub Class) ထá€Čကနေ Parent Class (Super Class) ထá€Čá€™á€Ÿá€Ź ရဟိတá€Č့ နာမညá€șတူ Method ကို Overriding á€žá€œá€Źá€žá€œá€Żá€•á€șခဌငá€șှကို á€•á€Œá€±á€Źá€á€Źá€•á€«á‹

ငပမဏ

//super class တစá€șခုပါ

class Animal {
  //eat ဆိုတá€Č့ method တစá€șá€á€Żá€›á€Ÿá€­á€™á€šá€ș
  void eat() {
    print("Dog is eating");
  }
}

class Dog extends Animal {
  // sub class ထá€Čá€™á€Ÿá€Źá€œá€Č eat ဆိုတá€Č့ method ကရဟိနေတယá€ș။ ဒါပေမá€Č့ ဥပေါá€șက parent ထá€Čက method တနá€șဖိုှကို á€žá€œá€Źá€žá€•á€Œá€źá€ž override လုပá€șလိုကá€șခဌငá€șသဖဌစá€șပါတယá€ș။
  @override
  void eat() {
    print("မအလ is eating");
  }
}

void main() {
  Animal animal = Animal();
  animal.eat();

  Dog dog = Dog();
  dog.eat();
}

á€žá€á€­á€•á€Œá€Żá€›á€”á€ș @override ဆိုတá€Č့ keyword မထညá€ș့ဘá€Čရေသလá€Č ပရိုဂမá€șကအလုပá€șလုပá€șá€”á€±á€™á€Ÿá€Źá€–á€Œá€…á€șပါတယá€ș။ သို့ပေမá€Č့ @override ထညá€ș့ရေသတဏက good practice ဖဌစá€șá€á€Źá€€á€Œá€±á€Źá€„á€ș့ထညá€ș့ရေသပါ။

Static In Dart

Class á€Ąá€á€œá€„á€șá€žá€™á€Ÿá€Źá€›á€Ÿá€­á€á€Č့ variable သို့ method á€á€œá€±á€€á€­á€Ż objects ဖနá€șတြှတá€Č့ဥခါ ကျနေဏá€șတို့ ယူသုံသတယá€ș။ အá€Čá€·á€œá€­á€Ż á€šá€°á€žá€Żá€¶á€žá€•á€Œá€źá€žá€–á€”á€șတြှတá€Č့ဥခါ တချို့ ယူသုံသရမညá€ș့ properties တလေရá€Č့ တနá€șဖိုှက တူညြတá€Č့ တနá€șá€–á€­á€Żá€žá€á€œá€± ကို ကျနေဏá€șတို့ ဖနá€șတြှတá€Č့ objects á€á€œá€±á€€á€­á€Ż ပဌနá€șပေသတá€Čá€·á€Ąá€á€«á€™á€»á€­á€Żá€žá€™á€Ÿá€Ź static á€€á€­á€Żá€žá€Żá€¶á€žá€•á€Œá€źá€ž ပဌနá€șá€•á€±á€žá€œá€­á€Żá€·á€›á€á€šá€ș။ method တလေလá€Č ထိုနညá€șá€žá€á€°á€…á€œá€Źá€˜á€Č တူညြတá€Č့ á€Ąá€›á€Źá€á€œá€±á€‘á€•á€șခါခါ လုပá€șဆေဏငá€șá€•á€žá€”á€±á€›á€•á€Œá€źá€†á€­á€Żá€›á€„á€ș ပုံသေ method á€á€œá€±á€Ąá€”á€±á€–á€Œá€„á€ș့သတá€șမဟတá€șလိုကá€șá€œá€­á€Żá€·á€›á€•á€«á€á€šá€ș။ ဒြ static ကို ကေဏငá€șသကေဏငá€șá€žá€žá€Żá€¶á€žá€…á€œá€Čတတá€șရငá€ș memory usage (optimize) သတá€șá€žá€Źá€•á€Œá€źá€ž ပရိုဂရမá€șက ရဟယá€șá€œá€Ÿá€•á€Œá€źá€ž သလကá€șလကá€șá€”á€±á€™á€Ÿá€Źá€•á€«á‹

  1. Dart Static Variable ကို အရငá€șရဟငá€șသကဌမယá€ș

ဥပေါá€șá€™á€Ÿá€Ź á€•á€Œá€±á€Źá€žá€œá€­á€Żá€˜á€Č Class တလငá€șှက variable á€á€œá€±á€€á€­á€Ż object instances တလေက share သုံသနေတá€Čá€·á€Ąá€á€Œá€±á€”á€±á€™á€Ÿá€Ź static keyword ကိုသုံသတယá€ș။ အá€Č့ static variable က Class ကို á€œá€Źá€á€±á€«á€șတာနá€Č့ တစá€șချိနá€șဘá€Č initialized လုပá€șတယá€ș။ နေဏကá€șထပá€șတခါ á€œá€Źá€á€±á€«á€șရငá€ș သူက ထပá€șá€•á€Œá€źá€ž တနá€șဖိုှကို သတá€șမဟတá€șá€•á€±á€žá€…á€›á€Źá€™á€œá€­á€Żá€á€Źá€€á€Œá€±á€Źá€„á€ș့ memory á€™á€Ÿá€Źá€”á€±á€›á€Źá€™á€šá€°á€á€±á€Źá€·á€˜á€°:။ á€’á€«á€€á€Œá€±á€Źá€„á€ș့ memory usage optimize ဖဌစá€șတယá€ș။


class Student {
 int id;
 String name;
 static String schoolName = "ဒဂုံ တကá€čကသိုလá€ș";
 Student(this.id, this.name);
 void display() {
   print("Id: ${this.id}");
   print("Name: ${this.name}");
   print("School Name: ${Student.schoolName}");
 }
}

void main() {
 Student s1 = new Student(1, "ကျေဏá€șမငá€șှသနá€ș့");
 s1.display();
 Student s2 = new Student(2, "မေဏငá€șဘá€Čင");
 s2.display();
}

ဥပေါá€șက á€„á€•á€™á€Źá€€á€­á€Żá€€á€Œá€Šá€ș့ရငá€ș ကျေဏငá€șá€žá€žá€Źá€žá€”á€Ÿá€…á€șá€„á€źá€žá€›á€Ÿá€­á€á€šá€ș။ နာမညá€șကတေဏ့ ဥဖေနá€Č့ဥမေ မလေသထá€Čá€€á€•á€±á€žá€á€Źá€™á€á€°á€˜á€°á€žá‹ အá€Č့တေဏ့ အá€Č့နဟစá€șကေဏငá€șက တတá€șတá€Č့ကျေဏငá€șှက ဒဂုံတကá€čကသိုလá€ș တူတယá€ș။ အá€Čá€·á€œá€­á€Żá€á€°á€á€Č့ ဒေတဏ variable တနá€șဖိုှကို Parent Class ထá€Čá€™á€Ÿá€Ź static ပုံသေသတá€șမဟတá€șá€•á€±á€žá€œá€­á€Żá€€á€șတယá€ș။ ဒါဘá€Č static ဆိုတာ။

  1. Static Method In Dart
class Circle {
  static double calculateArea(double pi, double radius ) {
    return (pi * radius * radius);
  }
}

void main() {
  print(
      "The circle area is ${Circle.calculateArea(3.14159, 2)}");
}

Circle Area တလကá€șမယá€șဆိုရငá€ș ပုံသေနညá€șှ π × r2 ဆိုတေဏ့ သူက ဘယá€șá€á€±á€Źá€·á€™á€Ÿ မချိနá€șှတá€Č့ဥရဏ ဘယá€șလိုဘá€Čတလကá€șတလကá€ș ဒြ formula ဘá€Čဆိုတေဏ့ ဘယá€ș object á€€á€œá€Źá€šá€°á€žá€Żá€¶á€žá€žá€Żá€¶á€žá€’á€«á€˜á€Č လုပá€șá€•á€±á€žá€”á€±á€™á€Ÿá€Ź အá€Čá€·á€œá€­á€Żá€á€Œá€±á€”á€±á€™á€»á€­á€Żá€žá€™á€Ÿá€Ź static method á€€á€­á€Żá€žá€Żá€¶á€žá€›á€á€Œá€„á€șသဖဌစá€șတယá€ș။

မဟတá€șသာှရနá€ș

Key Points To Remember

Enum In Dart

Dart á€™á€Ÿá€Ź keyword enum ကို á€žá€Żá€¶á€žá€•á€Œá€źá€ž ကိနá€șသသေတနá€șဖိုသမျဏသ ကို ကိုယá€șá€…á€Źá€žá€•á€Œá€Żá€–á€”á€șတြှနိုငá€șပါတယá€ș။

ရေသနညá€șသပုံစံ

enum enumName {
  constantName1,
  constantName2,
  constantName3,
  ...
  constantNameN
}

ငပမဏ


//  ကိနá€șသသေ ဥရေဏငá€șသုံသမျိုသတနá€șá€–á€­á€Żá€žá€•á€«á€á€„á€șတá€Č့ enum တစá€șခုကို ဖနá€șတြှထာှလိုကá€șပါမယá€ș
enum Color {
  red,
  green,
  blue,
}

void main() {
  // enum Class ကို á€žá€Żá€¶á€žá€•á€Œá€źá€ž instance တစá€șခုဖနá€șတြှလိုကá€șပါတယá€ș
  Color myColor = Color.blue;

  // ရလာတá€Č့ color တနá€șá€–á€­á€Żá€žá€á€œá€±á€€á€­á€Ż စစá€șá€•á€Œá€źá€ž print ပဌနá€șထုတá€șá€•á€±á€žá€œá€­á€Żá€€á€șပါတယá€ș။
  if (myColor == Color.red) {
    print("It's a red color!");
  } else if (myColor == Color.green) {
    print("It's a green color!");
  } else if (myColor == Color.blue) {
    print("It's a blue color!");
  } else {
    print("It's some other color.");
  }
}

Real World shopping cart Project တစá€șခု တညá€șဆေဏကá€șကဌညá€ș့ပါမယá€ș။

// enum product categories တစá€șခု တညá€șဆေဏကá€șလိုကá€șမယá€ș
enum ProductCategory {
  electronics,
  clothing,

}

// product calss တစá€șခု တညá€șဆေဏကá€șလိုကá€șပါမယá€ș။
class Product {
  //properties တလေသတá€șမဟတá€șမယá€ș
  String name;
  double price;
  // enum ProductCategory class á€€á€­á€Żá€’á€źá€™á€Ÿá€Ź á€œá€Źá€á€±á€«á€șသုံသထဏသပါတယá€ș
  ProductCategory category;

  Product(this.name, this.price, this.category);
}

// shopping cart တစá€șခု ဖနá€șတြှလိုကá€șမယá€ș
class ShoppingCart {
  //product class items list property တစá€șခု တညá€șဆေဏကá€șလိုကá€șပါမယá€ș။ shopping cart ဆိုတာ product တစá€șခုထကá€șမက ထညá€șá€·á€œá€­á€Żá€·á€›á€á€šá€șမဟုတá€șလာှ။
  List<Product> items = [];

  // shopping cart ထá€Čကို ထညá€ș့ဖို့ method တစá€șခု ဖနá€șတြှလိုကá€șမယá€ș။
  void addProduct(Product product) {
    items.add(product);
    print('${product.name} added to the shopping cart.');
  }

  // shopping cart ထá€Čá€™á€Ÿá€Ź ရဟိတá€Č့ item တလေရá€Č့ total price ကို တလကá€șဖို့ နေဏကá€șတá€Č့ method တစá€șခုဖနá€șတဟသထဏသပါမယá€ș။
  // Method to calculate the total price of items in the shopping cart
  double calculateTotal() {
    double total = 0;
    for (var item in items) {
      total += item.price;
    }
    return total;
  }

  // shopping cart á€’á€±á€á€Źá€á€œá€±á€€á€­á€Ż á€•á€Œá€–á€­á€Żá€· method တစá€șခုထပá€șဆေဏကá€șထဏသပါမယá€ș
  void displayCart() {
    print('Shopping Cart Contents:');
    for (var item in items) {
      print('- ${item.name} \t \$${item.price.toStringAsFixed(2)}');
    }
    print('Total: \$${calculateTotal().toStringAsFixed(2)}');
  }
}

void main() {
  //  products class ကို ခေါá€șá€•á€Œá€źá€ž laptop နá€Č့ shirt objects တလေတညá€șဆေဏကá€șလိုကá€șပါမယá€ș။
  var laptop = Product('Laptop', 899.99, ProductCategory.electronics);
  var shirt = Product('T-Shirt', 19.99, ProductCategory.clothing);

  // shopping cart  class á€€á€­á€Żá€žá€Żá€¶á€žá€•á€Œá€źá€ž cart object တစá€șခု ဆေဏကá€șပါမယá€ș
  var cart = ShoppingCart();

  // shopping cart ဥပေါá€șကဆေဏကá€șထာှတá€Č့ laptop နá€Č့ shirt object á€á€œá€±á€€á€­á€Ż cart object ၏ addProduct method ကို á€žá€Żá€¶á€žá€•á€Œá€źá€ž shopping cart ထá€Čထညá€șá€·á€œá€­á€Żá€€á€șခဌငá€șသဖဌစá€șပါတယá€ș။
  cart.addProduct(laptop);
  cart.addProduct(shirt);

  // shopping cart တလေရá€Č့တနá€șဖိုှကို á€’á€źá€™á€Ÿá€Źá€•á€Œá€”á€șထုတá€șကဌညá€ș့ပါမယá€ș
  cart.displayCart();
}


Advantages Of Enum In Dart

#

Abstract Class

Abstract classes တလေက á€•á€Żá€¶á€™á€Ÿá€”á€ș class á€á€œá€±á€œá€­á€Żá€™á€»á€­á€Żá€ž initialized လုပá€șá€œá€­á€Żá€·á€™á€›á€•á€«á€˜á€°á€žá‹ initialized လုပá€șá€œá€­á€Żá€·á€™á€›á€˜á€°á€žá€†á€­á€Żá€á€Źá€€ abstract class á€€á€­á€Żá€žá€Żá€¶á€žá€•á€Œá€źá€ž object instance တညá€șဆေဏကá€șá€œá€­á€Żá€·á€™á€›á€•á€«á€˜á€°á€žá‹ ၄ငá€șှ၏ရညá€șရလယá€șချကá€șက သူ့ကို á€á€á€Œá€Źá€ž class တလက á€œá€Źá€•á€Œá€źá€ž extends လာလုပá€șá€•á€Œá€źá€ž inherited လုပá€șယူနိုငá€șဖို့ရညá€șရလယá€șá€‘á€Źá€žá€á€Œá€„á€șသဖဌစá€șပါတယá€ș။ abstract class ကို abstract keyword á€žá€Żá€¶á€žá€•á€Œá€źá€žá€–á€”á€șတဟသရပါတယá€ș။

ငပမဏ

// Shape Abstract class တစá€șခု တညá€șဆေဏကá€șပါမယá€ș။
abstract class Shape {
  // Abstract method တစá€șခုပါ တညá€șဆေဏကá€șလိုကá€șပါမယá€ș။ body ပါခလငá€ș့မရဟိပါ။
  double calculateArea();
}

// Circle ဟာ á€’á€źá€”á€±á€›á€Źá€™á€Ÿá€Ź Concrete subclass ဖဌစá€șá€žá€œá€Źá€žá€•á€«á€á€šá€ș။ á€˜á€Źá€œá€­á€Żá€·á€œá€Čဆိုရငá€ș Shape ကို extends keyword နá€Č့ á€Ąá€™á€œá€±á€†á€€á€șá€á€¶á€œá€­á€Żá€€á€șá€œá€­á€Żá€·á€•á€«á‹
class Circle extends Shape {
  double radius;

  Circle(this.radius);

  // polimorphism method override á€€á€­á€Żá€žá€Żá€¶á€žá€•á€Œá€źá€ž abstract method တစá€șခုတညá€șဆေဏကá€șထဏသပါတယá€ș။
  @override
  double calculateArea() {
    return 3.14159 * radius * radius;
  }
}

void main() {
  // Circle concrete subclass ကို á€žá€Żá€¶á€žá€•á€Œá€źá€ž circle ဆိုတá€Č့ instance တစá€șခု တညá€șဆေဏကá€șလိုကá€șပါတယá€ș။
  var circle = Circle(5.0);

  //concrete abstract method ကို pirnt ထုတá€șကဌညá€ș့ပါမယá€ș
  print('Area of the circle: ${circle.calculateArea()}');
}


Alt text

img ref link

မဟတá€șသာှရနá€ș

Interface In Dart

Interface(အငá€șတဏဖေ့စá€șတစá€șခု) á€™á€Ÿá€Ź class တစá€șခုလိုကá€șနဏရမည့á€ș syntax တစá€șခုကို သတá€șမဟတá€șခဌငá€șသဖဌစá€șပါတယá€ș။ class တစá€șခု၏ လုပá€șဆေဏငá€șနိုငá€șတá€Č့ á€Ąá€•á€Œá€Żá€Ąá€™á€Ÿá€Żá€á€œá€±á€€á€­á€Ż သတá€șမဟတá€șá€•á€±á€žá€œá€­á€Żá€€á€șခဌငá€șသဖဌစá€șပါတယá€ș။ Interface တစá€șခုကို ဖနá€șတဟသတေဏ့မယá€șá€†á€­á€Żá€œá€»á€Ÿá€„á€ș sub class တလေ၏ methods and properties ကို ဥတိဥကျ ထညá€ș့သလငá€șှ ဖနá€șá€á€źá€žá€‘á€Źá€žá€™á€Ÿá€›á€•á€«á€™á€šá€ș။ Dart á€™á€Ÿá€Ź Interface က abstract ရá€Čá€·á€œá€Żá€•á€șဆေဏငá€șနိုငá€șစလမá€șှကို နေဏကá€șတစá€șဆငá€ș့မဌဟငá€ș့တငá€șá€•á€±á€žá€œá€­á€Żá€€á€șတá€Čá€·á€žá€˜á€±á€Źá€•á€«á€˜á€Č။

ငပမဏ


// abstract class as interface
abstract class Vehicle {
  void start();
  void stop();
}
// implements keyword ကို á€žá€Żá€¶á€žá€•á€Œá€źá€ž car interface တစá€șခုတညá€șဆေဏကá€șá€žá€œá€Źá€žá€•á€«á€™á€šá€ș
class Car implements Vehicle {
  @override
  void start() {
    print('Car started');
  }

  @override
  void stop() {
    print('Car stopped');
  }
}

void main() {
  var car = Car();
  car.start();
  car.stop();
}

Multiple Inheritance In Dart

ဥပေါá€șá€™á€Ÿá€Ź á€•á€Œá€±á€Źá€á€Č့တဏ Dart á€™á€Ÿá€Ź Multiple Inhertiance á€™á€›á€Ÿá€­á€˜á€°á€žá€†á€­á€Żá‹ ဟုတá€șပါတယá€ș Classes ဥချငá€șသချငá€șှ Multiple Inhertiance လုပá€șခလငá€ș့မရဟိပါ။ သို့ပေမá€Č့ Multiple Inheritance လုပá€șá€–á€­á€Żá€·á€œá€­á€Żá€Ąá€•á€șလာရငá€ș Interface ကို á€žá€Żá€¶á€žá€•á€Œá€źá€ž Multiple Inheritance လုပá€șနိုငá€șပါတယá€ș။

ငပမဏ

// interface abstract class
abstract class CalculateTotal {
  int total();
}
// interface abstract class
abstract class CalculateAverage {
  double average();
}
// implements multiple interfaces á€€á€­á€Żá€’á€źá€™á€Ÿá€Ź á€žá€Żá€¶á€žá€žá€œá€Źá€žá€•á€«á€á€šá€ș
class Student implements CalculateTotal, CalculateAverage {
// properties
  int marks1, marks2, marks3;
// constructor
  Student(this.marks1, this.marks2, this.marks3);
// implementation of average()
  @override
  double average() {
    return total() / 3;
  }
// implementation of total()
  @override
  int total() {
    return marks1 + marks2 + marks3;
  }
}

void main() {
  Student student = Student(90, 80, 70);
  print('Total marks: ${student.total()}');
  print('Average marks: ${student.average()}');
}

Extends နဟငá€ș့ Implements á€€á€œá€Źá€á€Œá€Źá€žá€á€»á€€á€ș

Extends VS Implements
sub class သညá€ș super class ထံမဟ á€Ąá€™á€œá€±á€†á€€á€șခံဖို့သုံသတယá€ș   á€Ąá€á€Œá€Źá€ž class တစá€șá€á€Żá€á€œá€„á€ș interface တစá€șá€á€Żá€Ąá€–á€Œá€…á€ș class တစá€șခုကို á€Ąá€™á€œá€±á€†á€€á€șခံရနá€ș á€Ąá€žá€Żá€¶á€žá€•á€Œá€Żá€žá€Šá€ș။
sub class ကနေ super class ထံမဟ complete method တစá€șá€á€Żá€œá€Żá€¶á€žá€€á€­á€Ż ယူသုံသနိုငá€șတယá€ș   abstract method ကိုဘá€Č sub-class ထံလကá€șဆငá€ș့ကမá€șှနိုငá€șတယá€ș.
Muliple inheritance မရ   Multiple inheritance ရတယá€ș
method override လုပá€șချငá€șလá€Čရ မလုပá€șချငá€șလá€Čရ   method override လုပá€șကို လုပá€șမဟရ
subclass ရá€Č့ constructor က subcalss ရá€Č့ construcotr မခေါá€șခငá€ș အရငá€ș ခေါá€șရမယá€ș   subclass á€™á€Ÿá€Ź constructor မလိုဘူှ
subclass ကို suber keyword á€žá€Żá€¶á€žá€•á€Œá€ź: subclass á€™á€Ÿá€Źá€žá€Żá€¶á€žá€œá€­á€Żá€·á€›   super keyword သုံသမရ
subclass á€™á€Ÿá€Źá€›á€Ÿá€­á€á€Č့ properties တနá€șဖိုှကို လိုအပá€șရငá€ș လိုအပá€șသလို subclass ကနေ ချိနá€șသခလငá€ș့ရဟိ   superclass interface ၏ fields á€á€œá€±á€€á€­á€Ż override လုပá€șကို လုပá€șမဟရမယá€ș

မဟတá€șသာှရနá€ș ဥချကá€șမျဏသ

#

Mixin In Dart

Mixin ဆိုတာ class ဥချငá€șသချငá€șá€žá€€á€Œá€Źá€žá€™á€Ÿá€Ź ကုဒá€șá€á€œá€±á€€á€­á€Ż ပဌနá€șá€žá€Żá€¶á€žá€œá€­á€Żá€· ရတá€Č့ နညá€șှလမá€șှတစá€șá€á€Żá€–á€Œá€…á€șပါတယá€ș။ mixin keyword á€€á€­á€Żá€žá€Żá€¶á€žá€•á€Œá€źá€ž mixin class တစá€șခုတညá€șဆေဏကá€șပါတယá€ș။ mixin class ကို ခေါá€șသုံသတá€Č့ဥခါ with သို့ on keyword နá€Č့ á€žá€Żá€¶á€žá€•á€Œá€źá€ž ခေါá€șရပါမယá€ș။ class တစá€șá€á€Żá€™á€Ÿá€Ź mixin တစá€șခုထကá€șပိုတá€Č့ class á€á€œá€±á€€á€­á€Ż ခေါá€șá€šá€°á€žá€Żá€¶á€žá€…á€œá€Čနိုငá€șပါတယá€ș။

Rules For Mixin

ငပမဏ


mixin CanFly {
void fly() {
  print('I can fly');
}
}

mixin CanWalk {
void walk() {
  print('I can walk');
}
}

class Bird with CanFly, CanWalk {

}

class Dog with CanWalk {

}

void main() {
var bird = Bird();
bird.fly();
bird.walk();

var dog = Dog();
dog.walk();
}

ဥပေါá€șက example á€€á€­á€Żá€€á€Œá€Šá€ș့ရငá€ș ငဟကá€șက ပျံလá€Č ပျံနိုငá€șတယá€ș၊ လမá€șှလá€Čá€œá€»á€Ÿá€±á€Źá€€á€șနိုငá€șတယá€ș။ á€’á€«á€€á€Œá€±á€Źá€„á€ș့ Bird Class က canWalk နá€Č့ canFly mixin နဟစá€șခုကို ယခုလို multiple ခေါá€șသုံသထဏသတယá€ș။ Dog ခလေသက လမá€șှဘá€Čá€œá€»á€Ÿá€±á€Źá€€á€șနိုငá€șတယá€ș á€’á€«á€€á€Œá€±á€Źá€„á€ș့ mixin canWalk ကိုဘá€Č á€šá€°á€žá€Żá€¶á€žá€‘á€Źá€žá€á€Œá€„á€șသဖဌစá€șတယá€ș။ mixin ကို မသုံသရငá€ș canWalk ဆိုတá€Č့ method တလေ ထပá€șခါထပá€șá€á€«á€›á€±á€žá€”á€±á€›á€™á€Ÿá€Źá€•á€«á‹ Dart á€™á€Ÿá€Ź mixin က DRY (Don’t repeat yourself) á€•á€Œá€żá€”á€Źá€€á€­á€Ż ရဟငá€șá€žá€•á€±á€žá€žá€œá€Źá€žá€á€Œá€„á€șသဖဌစá€șပါတယá€ș။

Mixin စညá€șသမျငá€șသမျဏသ

Factory Constructor In Dart

အထပá€șá€™á€Ÿá€Ź ကျနေဏá€șတို့ á€œá€±á€·á€œá€Źá€á€Č့တá€Č့ Constructor တလေက Generative constructors တလေဖဌစá€șပါတယá€ș။ Generative constructors á€™á€Ÿá€Ź return type မရဟိဘူသ။ သူတို့က object တစá€șခု ဖနá€șတဟသပေသနိုငá€șတာဘá€Čရဟိပါတယá€ș။​ဒါပေမá€Č့ Factory Constructor á€™á€Ÿá€Źá€€á€»á€á€±á€Źá€· Class တစá€șá€á€Żá€Ąá€á€œá€„á€șá€žá€™á€Ÿá€Ź object တစá€șခုတညá€șဆေဏကá€șပေသနိုငá€șá€á€Źá€Ąá€•á€Œá€„á€ș object ကို ပါ return ပဌနá€șပေသနိုငá€șပါတယá€ș။

Factory Constructors စညá€șသမျငá€șသမျဏသ

ပထမဆုံသသ Factory Constructor မပါဘá€Č​ဥပေါá€șá€™á€Ÿá€Ź သငá€șခá€Č့တá€Č့ constructor ကို ငပမဏ ကဌည့á€șကဌညá€ș့ပါမယá€ș။


class Area {
  final int length;
  final int breadth;
  final int area;

  /* Dart ၏ Initializer list ပါ။ ၄ငá€șှ၏ á€žá€˜á€±á€Źá€€
  constructor body : area = length * breadth ကို á€žá€œá€Źá€žá€™á€‘á€­á€á€„á€ș Area(tthis.length နá€Č့ this.breadth) ကို တနá€șá€–á€­á€Żá€žá€á€œá€± assign လာလုပá€șá€•á€Œá€źá€žá€™á€Ÿ body ကို á€žá€œá€Źá€ž run ခဌငá€șသဖဌစá€șပါတယá€ș။
  */

 const Area(this.length, this.breadth) : area = length * breadth;
}

void main() {
  Area area = Area(10, 20);
  print("Area is: ${area.area}");

  // notice that here is a negative value
  Area area2 = Area(-10, 20);
  print("Area is: ${area2.area}");
}

အá€Č့ကုဒá€șကို ကဌညá€ș့ရငá€ș -10 တနá€șá€–á€­á€Żá€žá€•á€«á€”á€±á€œá€Č error မတတá€șဘá€Č အလုပá€șလုပá€șá€žá€œá€Źá€žá€™á€Ÿá€Źá€•á€«á‹ area တလကá€șချကá€șတá€Č့ဥဥခါ á€™á€Ÿá€Ź အနူတá€șတနá€șဖိုသမပါသငá€ș့ပါဘူသ။ ဒါကို စစá€șá€†á€±á€žá€•á€Œá€źá€ž မဟနá€șကနá€șတá€Č့ ပရိုဂမá€ș တစá€șပုဒá€șဖဌစá€șဥေဏငá€șရေသနိုငá€șဖို့ Factory ကိုသုံသရပါမယá€ș။ ဥေဏကá€șက á€„á€•á€™á€Źá€€á€­á€Żá€€á€Œá€Šá€ș့ပါ။

class Area {
  final int length;
  final int breadth;
  final int area;

  // private constructor
  const Area._internal(this.length, this.breadth) : area = length * breadth;

  /* Factory constructor á€’á€źá€™á€Ÿá€Źá€œá€Źá€†á€±á€Źá€€á€șပါတယá€ș။
  သူ့ဥထá€Čá€™á€Ÿá€Ź if နá€Č့စစá€șá€†á€±á€žá€•á€Œá€źá€ž condition ဥပေါá€șမူတညá€șá€•á€Œá€źá€ž error သို့ class instance ကို return ပဌနá€șပေသပါတယá€ș။
  */
  factory Area(int length, int breadth) {
    if (length < 0 || breadth < 0) {
      throw Exception("Length and breadth must be positive");
    }
    // redirect to private constructor
    return Area._internal(length, breadth);
  }
}

void main() {
  // This works
  Area area = Area(10, 20);
  print("Area is: ${area.area}");

  // notice that here is negative value
  Area area2 = Area(-10, 20);
  print("Area is: ${area2.area}");
}

output

Area is: 200
Unhandled exception:
Exception: Length and breadth must be positive

ယခုလို error output ကို ထုတá€șပေသပါလိမá€ș့မယá€ș။

မဟတá€șသာှရနá€ș

နေဏကá€șထပá€ș ငပမဏ တစá€șá€á€Żá€›á€±á€žá€€á€Œá€Šá€ș့ပါမယá€ș။

class Person {
  String firstName;
  String lastName;

  // constructor
  Person(this.firstName, this.lastName);

  // factory constructor Person.fromMap (fromMap ဆိုတာ name constructor ) ဆေဏကá€șလိုကá€șတဏပါ á€€á€Œá€­á€Żá€€á€șá€á€Źá€•á€±á€žá€œá€­á€Żá€·á€›á€•á€«á€á€šá€ș။ parameter ဥနေနá€Č့ Map<String, Object> map တနá€șဖိုှကို လကá€șခံထဏသပါတယá€ș။ အထá€Čá€™á€Ÿá€Ź final keyword နá€Č့ variable á€á€œá€±á€–á€­á€Żá€žá€€á€­á€Ż ပဌနá€ș á€•á€Œá€źá€ž သတá€șမဟတá€șá€•á€±á€žá€œá€­á€Żá€€á€șပါတယá€ș။ နေဏကá€șá€†á€Żá€¶á€žá€™á€Ÿá€Ź Person() instance တစá€șခုကို return ပဌနá€șá€•á€±á€žá€œá€­á€Żá€€á€șပါတယá€ș။
  factory Person.fromMap(Map<String, Object> map) {
    final firstName = map['firstName'] as String;
    final lastName = map['lastName'] as String;
    return Person(firstName, lastName);
  }
}

void main() {
  // create a person object
  final person = Person('John', 'Doe');

  // create a person object from map
  final person2 = Person.fromMap({'firstName': 'Harry', 'lastName': 'Potter'});

  // print first and last name
  print("From normal constructor: ${person.firstName} ${person.lastName}");
  print("From factory constructor: ${person2.firstName} ${person2.lastName}");
}



Key Points

Generics In Dart

object data ပုံစံဥမျိုသမျိုသနá€Č့ လကá€șá€á€¶á€•á€Œá€źá€ž အလုပá€șလုပá€șပေသနိုငá€șတá€Č့ class တလေ á€’á€«á€™á€Ÿá€Żá€á€ș functions တလေ ကို Generics á€á€œá€±á€œá€­á€Żá€·á€žá€á€șမဟတá€șတဏပါ။ ငပမဏ list class ကို သုံသမယá€șဆိုရငá€ș List ဒါမျိုသပုံစံနá€Č့ ဖနá€șတြှနိငá€șတယá€ș။ int á€™á€Ÿá€™á€Ÿá€Żá€á€șဘူှ á€á€á€Œá€Źá€ž data type တလေ String, double စသညá€ș့တလေနá€Č့လá€Čအလုပá€șလုပá€șပေသနိုငá€șတယá€ș။

ရေသသဏသပုံစံက


class ClassName<T> {
  // code
}

ဒါဆိုရငá€ș ကျနေဏá€șတို့ ရိုသရိုသဥပေါá€șá€™á€Ÿá€Źá€œá€±á€·á€œá€Źá€á€Č့တá€Č့ class တလေနá€Č့ Generics class á€á€œá€±á€€á€­á€Ż ယဟငá€șá€•á€Œá€źá€žá€›á€±á€žá€€á€Œá€Šá€ș့မယá€ș၊။

ရိုှရိုှ class


// Without Generics
// Creating a class for int
class IntData {
  int data;
  IntData(this.data);
}
// Creating a class for double
class DoubleData {
  double data;
  DoubleData(this.data);
}

void main() {
  // Create an object of IntData class
  IntData intData = IntData(10);
  DoubleData doubleData = DoubleData(10.5);
  // Print the data
  print("IntData: ${intData.data}");
  print("DoubleData: ${doubleData.data}");
}

generic class

// Using Generics ဘာ data ဘá€Č ထညá€ș့ပေသပေသ <T> နá€Č့ လကá€șá€á€¶á€‘á€Źá€žá€žá€•á€Œá€źá€ž data type တလေခလá€Čခဌမá€șá€žá€•á€Œá€źá€ž အလုပá€șပဌနá€șလုပá€șပေသတယá€ș။
class Data<T> {
  T data;
  Data(this.data);
}

void main() {
  // object တညá€șဆေဏကá€șရငá€șှ ထညá€ș့ပေသတá€Č့ data type ကိုပါသတá€șမဟတá€șá€•á€±á€žá€œá€­á€Żá€€á€șတယá€ș
  Data<int> intData = Data<int>(10);
  Data<double> doubleData = Data<double>(10.5);

  // print the data
  print("IntData: ${intData.data}");
  print("DoubleData: ${doubleData.data}");
}

ဆိုတေဏ့ generic á€žá€Żá€¶á€žá€œá€­á€Żá€€á€șတေဏ့ class တလေ á€Ąá€™á€»á€Źá€žá€€á€Œá€źá€žá€†á€±á€Źá€€á€șá€”á€±á€…á€›á€Źá€™á€œá€­á€Żá€á€±á€Źá€·á€˜á€Č တစá€șခုဘá€Čဆေဏကá€șá€›á€Żá€¶á€˜á€Č။

Generics Type Variable

Name Type
T Type
E Element
K Key
V Value

🚀 ဥပေါá€șက á€œá€±á€·á€œá€Źá€á€Č့တá€Čá€·á€Ąá€›á€Źá€á€œá€±á€€á€­á€Ż ပေါငá€șှစပá€șá€•á€Œá€źá€ž မိမိစိတá€șကူှနိုငá€șá€žá€œá€±á€Źá€€á€ș á€Ąá€†á€Żá€¶á€žá€™á€›á€Ÿá€­á€–á€”á€șတြှနိုငá€șတယá€ș။

🚀 OOP ရá€Č့ á€Ąá€”á€Ÿá€…á€șသာရက ကုဒá€șကို resuable ဖဌစá€șဖဌစá€șနá€Č့ နညá€șှနိုငá€șသမျဟ နညá€șှနá€Č့ ရေသသဏသနိုငá€șá€–á€­á€Żá€·á€•á€«á€˜á€Č။


References :

dart-tutorial.com | dart.dev

ပဌနá€șလညá€șကူသယူဖေဏá€șပဌခလငá€ș့ သို့ ရေဏငá€șသချခလငá€ș့ á€™á€•á€Œá€Żá€•á€«á‹ á€œá€±á€·á€œá€Źá€›á€”á€ș ရညá€șရလယá€șသညá€ș။

Copyright © usaiko.dev