DEV Community

Cover image for Dart Spread Operator 💫 🌌 ✨
Gülsen Keskin
Gülsen Keskin

Posted on • Edited on

Dart Spread Operator 💫 🌌 ✨

Spread(...) ve null-aware spread operatörü (...?) bir koleksiyona birden çok değer eklemek için kısa bir yol sağlar.

Örneğin, bir listenin tüm değerlerini başka bir listeye eklemek için spread operatörünü (...) kullanabilirsiniz:

var list = [1, 2, 3];
var list2 = [0, ...list];
assert(list2.length == 4);
Enter fullscreen mode Exit fullscreen mode

Spread operatörünün sağındaki ifade null olabilirse, null alana duyarlı bir spread operatörü (...?) kullanarak istisnalardan kaçınabilirsiniz:

var list2 = [0, ...?list];
assert(list2.length == 1);
Enter fullscreen mode Exit fullscreen mode

Tek tek öğelerden yeni bir koleksiyon oluşturmak istediğinizde koleksiyon değişmezleri mükemmeldir. Ancak, genellikle bu mevcut öğelerden bazıları zaten başka bir koleksiyonda depolanır.

... map veren bir ifade alır ve bu map'in tüm verilerini yeni map'e ekler.

var items = [2, 3, 4];
var set = { 1, 2, ...items };

Enter fullscreen mode Exit fullscreen mode

çıktı: {1, 2, 3, 4}

Null-aware spread

var oops;
var list = [...oops];
print(list);
Enter fullscreen mode Exit fullscreen mode

çıktı: Uncaught Error: TypeError: null: type 'JSNull' is not a subtype of type 'Iterable'

var oops;
var list = [...?oops];
print(list);
Enter fullscreen mode Exit fullscreen mode

çıktı: []

var things = [2, null, 3];
var more = [1, ...things, 4]; // [1, 2, null, 3, 4].
var also = [1, ...?things, 4]; // [1, 2, null, 3, 4].
Enter fullscreen mode Exit fullscreen mode

Bir dizideki boş öğeleri atlamak istiyorsanız:

var things = [2, null, 3];
var more = [1, ...things.where((thing) => thing != null), 4];
// [1, 2, 3, 4].
Enter fullscreen mode Exit fullscreen mode

sabitler

const list = [2, 3];
const another = [1, ...list, 4]; // [1, 2, 3, 4].
Enter fullscreen mode Exit fullscreen mode

Resources :)
https://github.com/dart-lang/language/blob/master/accepted/2.3/spread-collections/feature-specification.md
https://dart.dev/guides/language/language-tour#spread-operator

Top comments (0)