Pengenalan
pada artikel kali ini kita akan membahas tentang set yang disediakan oleh bahasa pemrograman dart, bagaimana cara penerapannya lalu disertai dengan studi kasus sebagai pondasi pendalaman materi tentang set. Set adalah mewakili sekumpulan objek dimana setiap objek hanya dapat muncul sekali, jadi setelah kita pahami set juga salah satu dart collection item unik yang tidak berurutan. Ini berarti tidak memiliki posisi dalam satu set, oleh karena itu satu set tidak boleh memiliki duplikat dari item yang sama.
Cara Membuat Set
Ada beberapa cara untuk membuat sebuah set, cara yang lebih umumnya digunakan sebagai berikut :
Menggunakan Literals
Sama seperti halnya pada artikel sebelumnya tentang List, set juga dapat dibuat menggunakan himpunan literals. Sintaknya pun hampir sama tidak ada yang berbeda tetapi ada salah satu perbedaannya adalah pada literals List menggunakan tanda kurung siku ( [] ) sedangkan literals set menggunakan tanda kurung kurawal ( {} )
Gambaran sintaks umumnya sebagai berikut :

kita akan coba buat contoh dengan var setName setelah tanda ( = ), lalu kita menyisipkan pada kurung kurawal buka ( { ) diikuti dengan elemen yang kita inginkan di dalam set ini, dengan setiap elemen dipisahkan dengan tanda koma ( , ). Setelah kita selesai menyisipkan elemen yang ingin kita eksekusi di akhiri dengan tanda kurung kurawal tutup ( } ). Mari kita lihat contoh dibawah ini

Baris ke 2 pada contoh diatas kita telah mendeklarasikan dan menginisialisasi sebuah Set dengan variabel contohSet dengan memiliki 3 elemen di dalamnya ketika kita menggunakan statement print maka set lengkap dengan tanda kurung kurawal ditampilkan.
Seperti yang dibahas sebelumnya set tidak memiliki duplikat. Namun kita masih dapat menyisipkan value yang duplikat saat membuat sebuah set akan tetapi dengan menambahkan item atau elemen yang duplikat tidak akan berpengaruh pada saat compile. contohnya sebagai berikut:

Dalam cuplikan source code diatas, kita menambahkan angka 2 sejumlah 2 angka dalam sebuah set. Jadi ketika kita print set, maka angka 2 yang terdapat 2 angka tersebut tidak akan ditampilkan. Karena Dart mengabaikan duplikat.
Jika kita ingin menentukan tipe data selama deklarasi, kita bisa menaruh tipe data tersebut sebelum tanda kurung kurawal buka ( { ) tetapi kita tambahkan diantara tanda <>. Perhatikan contoh berikut:


Membuat Set Kosong Dengan Constructor
Kita juga bisa mendeklarasikan himpunan dengan menggunakan constructor di dalam set. Constructor set membuat sebuah objek menggunakan tanda kurung kurawal ( {} ).
perhatikan contoh sintaks umum yang biasa digunakan :

Disaat kita mendeklarasikan himpunan kosong, penting bagi kita untuk menyebutkan tipe datanya terlebih dahulu.

Ketika kita menampilkan data dengan statement print variabel setBuah dan buahLainnya dalam potongan kode di atas, kita mendapatkan set kosong (tanda kurung kurawal tanpa elemen).
Studi Kasus Menggunakan Set
Menambahkan Satu Item Ke Dalam Set
Kita dapat menambahkan satu elemen ke dalam sebuah set yang sudah ada dengan menggunakan metode add. Satu-satunya syarat adalah bahwa item yang kita tambahkan harus memiliki jenis yang sama dengan item yang lainnya dari set. Ketika kita memanggil pada sebuah set, metode add memiliki parameter yaitu item yang ingin kita tambahkan ke dalam sebuah set contohnya di bawah ini:

void main(List<String> arguments) {
var setBuah = <String>{};
setBuah.add('apel');
setBuah.add('rambutan');
setBuah.add('pisang');
print(setBuah);
}
//Output
{apel, rambutan, pisang}
Sekarang variabel setBuah telah memiliki atau mengandung tiga elemen.
Menambahkan Beberapa Item Ke Dalam Satu Set
Kita dapat menambahkan beberapa item ke set yang sudah tersedia dengan menggunakan metode addAll. Sebagai catatan untuk diingat satu satunya syarat adalah bahwa yang akan kita tambahkan semuanya harus memiliki tipe yang sama dengan item dari set.
Saat kita panggil ke dalam satu set,metode addAll juga memiliki satu parameter yang merupakan satu set. Set harus berisi item yang ingin kita tambahkan ke set yang sudah ada. Tipe parameternya adalah Set<dataType>, dimana tipe datanya bergantung pada set tempat kita memanggil metodenya. jadi dapat kita simpulkan addAll pada dasarnya menggabungkan elemen dari dua set menjadi satu set.
Sintaks Umum adalah sebagai berikut :

sebagai contoh kita akan membuat var setBuah dan var buahLain
void main(List<String> arguments) {
var setBuah = {'apel', 'pisang', 'jeruk'};
var buahLain = {'semangka', 'anggur'};
setBuah.addAll(buahLain);
print(setBuah);
}
//Output
{apel, pisang, jeruk, semangka, anggur}
Pada contoh di atas kita telah berhasil menambahkan elemen yang terdapat di variabel buahLain ke dalam variabel setBuah.
Menemukan Length Pada Set
Sama seperti halnya dengan List, set juga memiliki properti length yang dapat diakses dengan menggunakan operator titik ( . ) yang berfungsi untuk memberikan kita jumlah item yang terdapat di dalam satu set.
Sintaks umum yang digunakan :

void main(List<String> arguments) {
var setBuah = {'apel', 'pisang', 'jeruk','melon','semangka','rambutan'};
print(setBuah.length);
}
//Output
6
Saat kita menjalankan programnya maka yang akan tampil dari output source code yang diatas adalah 6, karena variabel setBuah memiliki 6 item. contoh lainnya kita akan menambahkan duplikat pada variabel setBuah apakah length pada variabel setBuah akan berubah,
void main(List<String> arguments) {
var setBuah = {'apel', 'pisang', 'jeruk','melon','semangka','rambutan','pisang'};
print(setBuah.length);
}
//Output
6
Ketika kita menjalankan potongan source code di atas output yang ditampilkan tetap menghasilkan 6, meskipun variabel setBuah memiliki 7 item. Ini memperkuat bahwa bahasa pemrograman dart sepenuhnya mengabaikan nilai duplikat.
Menghapus Item Dari Set
Untuk menghapus item dari satu set kita bisa menggunakan metode remove yang berfungsi untuk menghapus item tertentu. Metode remove ini memiliki satu parameter yaitu item yang ingin kita hapus. Jenis parameter bergantung pada set tempat methode dipanggil.
Sintaks umum yang digunakan :

Kita akan menghapus item dari contoh yang sudah ada :
void main(List<String> arguments) {
var setBuah = {'apel', 'pisang', 'jeruk','melon','semangka','rambutan'};
setBuah.remove('pisang');
print(setBuah);
}
//Output
{apel, jeruk, melon, semangka, rambutan}
Hasil akhir dari potongan source code di atas adalah kita telah menghapus item pisang, menggunakan methode remove, sehingga item pisang tidak tampil.
Memerika Set
Pembahasan berikutnya yaitu kita dapat memeriksa apakah suatu set berisi item tertentu dengan menggunakan metode contains dan menggunakan method containsAll tergantung pada apakah kita ingin memeriksa satu item atau beberapa item di dalam satu set.
sebagai contoh :
kita membuat variabel A = {‘bakwan’,’tahu gejrot’,’cakwe’};
jadi ketika cek atau kita periksa variabel A dengan statement print menggunakan method contains,
print(A.contains(‘bakwan’)); maka yang ditampilkan bernilai true. Karena bakwan terdapat di variabel A.
Sintaks umum dengan menggunakan methode contains :

Dan, sintaks umum menggunakan methode containsAll :

Mari kita terapakan pada studi kasus :
void main(List<String> arguments) {
var setGorengan = {'cireng', 'ubi', 'bakwan', 'risol'};
//Check whether a single item is in the set
print(setGorengan.contains('bakwan'));
//Check whether multiple items are in the set
print(setGorengan.containsAll(['pisang', 'risol'])); //First Method
var fruitsToCheck = {'bakwan', 'pisang'};
print(setGorengan.containsAll(fruitsToCheck));
}
Output:
true
false
false
Jadi ketika kita jalankan dari source di atas menghasilkan output yang pertama adalah true, karena bakwan adalah bagian dari setGorengan, lalu output yang kedua dan ketiga adalah false. meskipun item yang ingin kita periksa terdapat di dalam variabel setGorengan lalu ada satu item yang tidak terdapat ( pisang ) di dalam variabel setGorengan maka akan false.
Persilangan Antara Dua Set
Perpotongan atau persilangan antara dua himpunan (set1, set2) maksudnya adalah himpunan yang berisi elemen yang terdapat di dalam set1 dan juga set2.
Sintaks umum yang digunakan :

Mari kita buat studi kasusnya :
void main(List<String> arguments) {
var setGorengan = {'bakwan', 'cireng', 'ubi', 'risol'};
var setGorenganDua = {'cireng', 'cilok', 'batagor'};
var intersectionSet = setGorengan.intersection(setGorenganDua);
print(intersectionSet);
}
//Output
{cireng}
Saat kita menjalankan program kita akan melihat satu set dengan satu item, ‘cireng’. Ini karena ‘cireng’ satu satunya item yang terdapat pada variabel setGorengan dan setGorenganDua.
Menyatukan Antara Dua Set
Menyatukan atau menggambungkan setiap elemen yang terdapat di dalam set1 dan set2 sehingga output yang dihasilkan adalah gabungan dari setiap elemen set1 dengan elemen set2.
Sintaks umum yang digunakan :

contohnya sebagai berikut :
void main(List<String> arguments) {
var setGorengan = {'bakwan', 'cireng', 'ubi', 'risol'};
var setGorenganDua = {'cireng', 'cilok', 'batagor'};
var intersectionSet = setGorengan.union(setGorenganDua);
print(intersectionSet);
}
//output
{bakwan, cireng, ubi, risol, cilok, batagor}
Ketika kita menjalankan program di atas variabel setGorengan memiliki 4 item dan variabel setGorenganDua memiliki 3 item, di karenakan ada item yang sama cireng maka yang akan ditampilkan oleh program adalah {bakwan, cireng, ubi, risol, cilok, batagor}.