Dart Constructors

Constructor adalah method kudus yang akan di eksekusi saat pembuatan object dari sebuah class. Biasanya constructor digunakan untuk insialisasi atau memperispakn data yang object butuhkan. Cara membuat constructor yaitu dengan membuat function dengan nama yang sama pengan nama class .

class Person{
  String name;
  int age;

  Person(String name,int age){
    this.name =name;
    this.age = age;
 }
}

Pola penugasan argumen constructor ke variabel instan sangat umum, Dart memiliki sugar sintaksis untuk membuatnya mudah:

class Person{
  String name;
  int age;

  Person(this.name,this.age);
}

Default Constructors

Jiak kita tidak membuat contsructor pada sebua class, maka secara default cobstructors akan disediakan. Default constructors tidak memiliki arguments dan memanggil constructors tanpa argumen di superclass.

Constructors aren’t inherited

Subclass tidak mewarisi konstruktor dari superclass mereka. Subclass yang mendeklarasikan tidak ada konstruktor hanya memiliki konstruktor default (tanpa argumen, tanpa nama).

Names Constructors

Untuk membuat sebuah class yang memiliki contructors lebin dari satu ( Multiple Constructors), Maka kita bisa memberi nama pada contractos yang kita buat:

class Person{
  String name;
  int age;

  Person(this.name,this.age);
  // named contractor
  Person.getName(String name){
    this.name =name;
 }
}

Ingat bahwa konstruktor tidak diwariskan, yang berarti konstruktor bernama superclass tidak diwarisi oleh subclass. Jika kita ingin subclass dibuat dengan konstruktor bernama yang ditentukan di superclass, Anda harus mengimplementasikan konstruktor itu di subclass.

Invoking a non-default superclass constructor

Secara default, konstruktor dalam subclass memanggil konstruktor tanpa argumen kelas super tersebut. Konstruktor superclass dipanggil di awal badan konstruktor. Jika daftar penginisialisasi juga digunakan, itu dijalankan sebelum superclass dipanggil. Singkatnya, urutan eksekusi adalah sebagai berikut:

  • initializer list
  • superclass’s no-arg constructor
  • main class’s no-arg constructor
class Employee extends Person {
  Employee() : super.fromJson(defaultData);
  // ···
}

Initializer list

Selain memanggil konstruktor superclass, kita juga bisa menginisialisasi variabel instan sebelum badan konstruktor dijalankan. Pisahkan penginisialisasi dengan koma.

Point.fromJson(Map<String, double> json)
    : x = json['x'],
      y = json['y'] {
  print('In Point.fromJson(): ($x, $y)');
}

Redirecting constructors

Terkadang satu-satunya tujuan konstruktor adalah mengarahkan ke konstruktor lain di class yang sama. Badan konstruktor is empty, dengan panggilan konstruktor muncul setelah titik dua (:).

class Point {
  double x, y;

  // The main constructor for this class.
  Point(this.x, this.y);

  // Delegates to the main constructor.
  Point.alongXAxis(double x) : this(x, 0);
}

Constant constructors

Jika kelas yang kita buat menghasilkan objek yang tidak pernah berubah, kita dapat membuat objek ini menjadi konstanta (const) waktu kompilasi. Untuk melakukan ini, tentukan konstruktor const dan pastikan bahwa semua variabel instan sudah final.

class ImmutablePoint {
  static final ImmutablePoint origin =
      const ImmutablePoint(0, 0);

  final double x, y;

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

Factory Constructors

Gunakan factory keyword ketika melakukan implementasi constructor tanpa harus membuat instance baru dari sebuah class. factory mungkin mengembalikan instance dari cache atau mengembalikan instance dari subtype, Kasus penggunaan lain untuk konstruktor factory adalah menginisialisasi variabel final menggunakan logika yang tidak dapat ditangani dalam daftar penginisialisasi.

class Logger {
  final String name;
  bool mute = false;

  // _cache is library-private, thanks to
  // the _ in front of its name.
  static final Map<String, Logger> _cache =
      <String, Logger>{};

  factory Logger(String name) {
    return _cache.putIfAbsent(
        name, () => Logger._internal(name));
  }

  factory Logger.fromJson(Map<String, Object> json) {
    return Logger(json['name'].toString());
  }

  Logger._internal(this.name);

  void log(String msg) {
    if (!mute) print(msg);
  }
}

Sample source code can be downloaded on github at the following link     dart-tutorial

hyvercode

Leave a Reply

Your email address will not be published. Required fields are marked *