Operator Spread Dart

Operator Spread Spread operators ... dan ...?

Mengevaluasi ekspresi koleksi, membongkar semua elemen di dalam koleksi lalu mengeluarkannya untuk dimasukkan ke literal koleksi lain (List, Set, Map)

Bukan termasuk ekspresi operator, ... dan ...? bukanlah operator dalam pengertian tradisional, melainkan gula sintaksis

Terdapat dua jenis

...collection: Spread biasa. Koleksi wajib tidak bernilai null; jika mengirimkan null akan langsung muncul error

...?collection: Spread aman null. Apabila koleksi bernilai null, akan diabaikan tanpa memunculkan exception

Lihat contoh resmi agar mudah dipahami

void main() {
  final list1 = [1, 2, 3];
  final list2 = [0, ...list1, 4, 5];
  print(list2); // [0, 1, 2, 3, 4, 5]

  // Spread aman null
  List<int>? maybeList;
  final safeList = [10, ...?maybeList, 20];
  print(safeList); // [10, 20], tidak ada error meskipun maybeList bernilai null
}Code language: Dart (dart)

Contoh di atas menggunakan dua koleksi, koleksi pertama berisi tiga elemen 1, 2, 3. Koleksi kedua memasukkan koleksi pertama setelah angka 0, kemudian menambahkan 4 dan 5 sehingga hasil akhir menjadi [0, 1, 2, 3, 4, 5]

Contoh kedua juga melakukan penyisipan, namun karena maybeList bernilai null dan menggunakan spread aman null, tidak ada elemen yang dimasukkan, hasil tidak berubah dan tidak muncul error sama sekali

Contoh Set

void main() {
	final set1 = {1, 2};
	final set2 = {3, ...set1, 4};
	print(set2); // {3, 1, 2, 4}
}Code language: PHP (php)

Contoh Map

void main() {
	final map1 = {'a': 1, 'b': 2};
	final map2 = {'c': 3, ...map1, 'd': 4};
	print(map2); // {c: 3, a: 1, b: 2, d: 4}
}Code language: PHP (php)

Catatan Penting

Tidak bisa menggunakan ... secara terpisah di luar tanda kurung [] dan kurung kurawal {}

void main() {
    final list1 = [1, 2, 3];
	var arr = ...list; // Error sintaksis, hanya boleh ditulis di dalam literal koleksi
}Code language: PHP (php)
D:\dartdemo\firstdart>dart run
Building package executable...
Failed to build firstdart:firstdart:
bin/firstdart.dart:3:12: Error: Expected an identifier, but got '...'.
Try inserting an identifier before '...'.
        var arr = ...list; // Error sintaksis, hanya boleh ditulis di dalam literal koleksi
                  ^^^
bin/firstdart.dart:3:12: Error: Expected ';' after this.
        var arr = ...list; // Error sintaksis, hanya boleh ditulis di dalam literal koleksi
                  ^^^
bin/firstdart.dart:3:15: Error: Undefined name 'list'.
        var arr = ...list; // Error sintaksis, hanya boleh ditulis di dalam literal koleksiCode language: PHP (php)

Menggunakan ... langsung pada nilai null akan menimbulkan error saat runtime. Jika variabel berpotensi bernilai null, wajib pakai ...?

void main() {
	List<int>? list = null;
	var res = [...list]; // Akan muncul error
	var resSafe = [...?list]; // Berjalan normal
}Code language: PHP (php)
D:\dartdemo\firstdart>dart run
Building package executable...
Failed to build firstdart:firstdart:
bin/firstdart.dart:3:16: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
        var res = [...list]; // Akan muncul errorCode language: PHP (php)

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *