Modul Dart
Modul Dart
FLUTTERIAN
1. Pengertian Dart
Dart adalah bahasa pemrograman yang open source dan general purpose. Dart
dikembangkan oleh Google dan ditujukan untuk membuat aplikasi multiplatform seperti
mobile, desktop, dan web.
Jauh sebelum ada Flutter, Dart awalnya digunakan untuk membuat web yang ada di
Google. Tujuan awal pembuatan Dart adalah untuk menggantikan JavaScript yang dinilai
memiliki banyak kelemahan. Sejak saat itu, rilisnya Flutter SDK untuk pengembangan
iOS, Android, dan web menjadi sorotan baru pada bahasa Dart.
- Dart adalah bahasa pemrograman yang fleksibel. Dart bisa berjalan di mana pun baik
itu Android, iOS, maupun web. Sebagai developer, tentunya sebuah keuntungan jika
bisa menuliskan kode dan bisa berjalan di mana saja.
- Dart adalah project open-source. Dart dibuat oleh Google, lalu bersama dengan
komunitas developer Dart mengembangkan teknologi dan fitur-fitur menarik yang bisa
ditambahkan pada Dart. Jika Anda menemukan bug atau masalah pada Dart, Anda
dapat melaporkannya atau bahkan memperbaikinya sendiri. Selain itu Anda tidak perlu
khawatir dalam masalah lisensi ketika menggunakan bahasa Dart. Anda dapat ikut
berkontribusi pada bahasa Dart pada repositori berikut: https://github.com/dart-lang.
- Dart digunakan oleh Flutter. Sejak kemunculan Flutter, Dart kembali menjadi
perhatian. Saat ini ada banyak perusahaan yang menggunakan Flutter pada aplikasinya.
Flutter bisa dibilang merupakan proyek yang revolusioner dari Google untuk
mengembangkan aplikasi multiplatform dengan tampilan UI yang menarik. Untuk itu,
jika Anda tertarik mengembangkan aplikasi dengan Flutter, maka menguasai Dart
adalah hal yang fundamental.
- Dart memiliki dukungan tools yang lengkap. Hampir setiap teks editor atau IDE
memiliki dukungan besar untuk Dart. Anda dapat menggunakan IDE seperti IntelliJ
IDEA, Webstorm, Android Studio maupun editor sederhana seperti VS Code, Sublime
text, Atom, atau yang lainnya sesuai kenyamanan Anda.
2. Variabel
Variabel adalah tempat untuk menyimpan sebuah nilai. Di dalam komputer variabel ini
disimpan di dalam memori komputer. Setiap variabel memiliki nama yang dapat kita
panggil dan gunakan. Pada Dart kita mendefinisikan sebuah variabel dengan keyword var.
Lalu bagaimana jika kita ingin membuat variabel namun tidak ingin langsung
menginisialisasinya? Misalnya Anda ingin menunggu beberapa operasi selesai lalu
menginisialisasinya ke dalam variabel.
var salam;
salam = 'Hello World!';
3. Tipe Data
Dart memiliki banyak tipe data yang mewakili jenis data yang dapat kita gunakan dan
bagaimana data tersebut dioperasikan. Dengan tipe data, komputer dapat menghindari
operasi yang tidak mungkin serta bisa menghasilkan bug, misalnya seperti perkalian
karakter alfabet atau mengubah angka menjadi kapital.
Tipe Deskripsi
String Teks
Operator Deskripsi
+ Penjumlahan
- Pengurangan
* Perkalian
/ Pembagian
4.2. Perbandingan
Operator Deskripsi
== Sama dengan
5. Function
Functions adalah blok kode atau prosedur yang dapat digunakan kembali.
Fungsi yang tidak menghasilkan nilai kembalian;
Kita bisa menggunakan default value parameter. Kita akan memberikan nilai default
pada parameter lalu nilai ini akan digunakan jika kita tidak memasukkan parameternya.
7. Variabel Scope
Setiap variabel memiliki scope atau lingkupnya masing-masing. Sebuah variabel dianggap
satu lingkup selama masih berada di satu blok kurung kurawal yang sama. Lingkup ini
menentukan bagian kode mana yang dapat membaca dan menggunakan variabel tersebut.
8. Control Flow
Sebuah program juga perlu membuat keputusan. Pada modul ini kita akan belajar
bagaimana memberikan instruksi bagi komputer untuk mengambil keputusan dari kondisi
yang diberikan serta bagaimana melakukan instruksi yang berulang.
8.1. If Else
Ekspresi if akan menguji suatu kondisi. Jika hasil ekspresi tersebut bernilai
true, maka blok kode di dalamnya akan dijalankan. Sebaliknya, jika bernilai
false maka proses yang ditentukan akan dilewatkan.
if (5 > 10){
print(“Jika pernyataannya benar”)
} else {
print(“Jika pernyataannya salah”)
}
Anda juga dapat mengecek beberapa kondisi sekaligus dengan
menggabungkan else dan if. Contohnya seperti program konversi nilai
berikut:
if (kondis1){
print(“Jika kondisi1 benar”)
} else if(kondis1) {
print(“Jika kondisi1 benar”)
} else {
print(“Jika semuanya salah”)
}
switch (variable/expression) {
break;
break;
9. Looping
Ketika menulis program komputer, akan ada situasi di mana kita perlu melakukan hal sama
berkali-kali. Misalnya kita ingin menampilkan semua nama pengguna yang terdaftar di
aplikasi kita. Tentunya tidak praktis jika kita menulis semuanya.
9.1. For
For cocok digunakan pada kondisi perulangan di mana kita membutuhkan
variabel indeks dan tahu berapa kali perulangan yang kita butuhkan. Sebagai
contoh jika kita ingin menampilkan angka 1 sampai 100, kita bisa menuliskan
seperti berikut:
for (int i = 1; i <= 50; i++) {
print(i);
}
9.2. While dan do-while
Metode lain untuk melakukan perulangan adalah dengan while. Sama
seperti for, instruksi while mengevaluasi ekspresi boolean dan menjalankan
kode di dalam blok while ketika bernilai true.
var i = 1;
while (i <= 50) {
print(i);
i++;
}
Bentuk lain dari while adalah perulangan do-while.
do {
print(i);
i++;
} while (i <= 100);
String? nama;
nama = null;
print(nama);
11. Collection
Selain string, number, dan boolean, Dart masih memiliki tipe data lain yang dapat
menyimpan banyak data sekaligus yang dalam istilah pemrograman dikenal sebagai
collections. Collections merupakan sebuah objek yang bisa menyimpan kumpulan objek
lain. Contoh collections pada Dart antara lain List, Set, dan Map.
11.1. List
List sesuai namanya dapat menampung banyak data ke dalam satu objek.
print(numberList[2]); // 3
Kenapa hasilnya 3? karena index dimulai dari 0, dan angka 3 berada di urutan index
ke 2.
“Bagaimana kita memanipulasi data pada List tersebut?” Nah, untuk menambahkan
data ke dalam list, kita bisa menggunakan fungsi add().
numberList.add(6);
Fungsi add ini akan menambahkan data di akhir list. Sehingga is dari variabel
NumberListadalah:
[1, 2, 3, 4, 5, 6]
Lalu bagaimana jika kita ingin menambahkan data namun tidak di akhir List?
Jawabannya adalah dengan fungsi insert. Di dalam fungsi insert kita perlu
memasukkan 2 parameter, yaitu indeks list dan data yang akan dimasukkan.
numberList.insert(3, 20);
// numberList = [1,2,3,20,4,5,6]
Sedangkan untuk menghapus data terdapat beberapa fungsi remove yang bisa kita
gunakan, antara lain:
For-in
For-in mengeksekusi dalam setiap iterasi, satu properti dari objek ditetapkan ke nama
variabel dan perulangan ini berlanjut hingga semua properti objek habis.
for(var i in makanan){
print(i);
}
forEach
11.2. Set
Selanjutnya kita akan membahas jenis collection yang kedua, yaitu Set. Set
merupakan sebuah collection yang hanya dapat menyimpan nilai yang unik.
Ini akan berguna ketika Anda tidak ingin ada data yang sama alias duplikasi
dalam sebuah collection.
Set<int> numberSet = {1, 1, 3, 3, 5};
Secara otomatis Set akan membuang angka yang sama, sehingga hasilnya
adalah {1, 4, 6}.
Kemudian untuk menampilkan data pada indeks tertentu, gunakanlah fungsi
elementAt().
11.3. Map
Map, yakni sebuah collection yang dapat menyimpan data dengan format key-
value.
Map mahasiswa = {
'nama': 'Muji',
'jurusan': 'Informatika',
'semester': 8
};
String yang berada pada sebelah kiri titik dua (:) adalah sebuah key,
sedangkan yang di sebelah kanan merupakan value-nya. Lalu untuk
mengakses nilai dari Map tersebut, kita bisa menggunakan key yang sudah
dimasukkan. Misalnya, kita bisa menggunakan key “nama” untuk
mendapatkan value “Muji”.
print(mahasiswa[‘nama’]);
12. OOP
OOP adalah paradigma pemrograman yang banyak digunakan saat ini untuk
mengembangkan aplikasi. Paradigma OOP berdasarkan pada konsep objek yang
memiliki atribut serta dapat melakukan operasi atau prosedur tertentu. Dengan OOP, kita
bisa dengan mudah memvisualisasikan objek yang ada di dunia nyata ke dalam program
komputer.
12.1. Class
Class merupakan sebuah blueprint/template untuk membuat objek. Di dalam
kelas ini kita mendefinisikan sifat (attribute) dan perilaku (behaviour) dari
objek yang akan dibuat. Sebagai contoh kita akan merancang kelas yang
berkaitan dengan hero Mobile Legend. Buatlah kelas Hero yang memiliki
atribut berupa name, health, dan damage. Kemudian perilakunya adalah
attack hit, dan walk.
Untuk mendefinisikan kelas dalam Dart, cukup gunakan keyword class
diikuti dengan nama kelas yang akan dibuat.
class Hero {
}
}
void hit(){
}
}
Kali ini kita mendefinisikan default value property health dan membuat code
untuk masing - masing method
class Hero {
//property
String name;
int healthy = 100;
int damage;
//method
void attack(){
print(“$name menyerang musuh”);
}
void hit(){
print(“$name diserang musuh”);
healthy = healthy – 10;
}
}
12.3. Constructor
Ketika suatu objek dibuat, semua properti pada kelas tersebut harus memiliki
nilai. Kita dapat langsung menginisialisasi pada properti tertentu atau
menginisialisasinya melalui constructor. Constructor adalah fungsi spesial
dari sebuah kelas yang digunakan untuk membuat objek. Mari kita tambahkan
constructor di kelas Hero.
class Hero {
//constructor
Hero(this.name, this.damage);
//property
String name;
int healthy = 100;
int damage;
//method
void attack(){
print(“$name menyerang musuh”);
}
void hit(){
print(“$name diserang musuh”);
healthy = healthy – 10;
}
}
Kita hanya membutuhkan name dan damage untuk dijadikan parameter,
karena healthy sudah mempunyai nilai default. Tetapi health bisa di
masukkan kedalam constructor dengan memasukkan nilai defaultnya.
Dengan adanya constructor kita bisa membuat banyak object yang berbeda,
mari kita instansiasikan.
Hero zilong = Hero(“Zilong”, 10);
Hero miya = Hero(“Miya”, 12);
Setelah membuat objek kita bisa memanipulasi objek tersebut.
12.4. Inheritance
Inheritance adalah kemampuan suatu program untuk membuat kelas baru
dari kelas yang ada. Konsep inheritance ini bisa dibayangkan layaknya
seorang anak mewarisi sifat dari orang tuanya. Di dalam OOP kelas yang
menurunkan sifat disebut sebagai kelas induk. Kita akan membuat kelas anak
dari Hero.
class Mage extends Hero {
String skill;
Mage(String name, int damage, String skill) : super(name,
damage){
this.skill = skill;
}
}
12.5. Abstract
Sesuai namanya, abstract merupakan gambaran umum dari sebuah kelas. Ia
tidak dapat direalisasikan dalam sebuah objek.
abstract class Hero{ }
Dengan begitu kelas hero tidak dapat di instansiasikan menjadi objek.
12.6. Interface
Interface atau antarmuka merupakan set instruksi yang bisa diimplementasi
oleh objek. Secara umum, interface berfungsi sebagai penghubung antara
sesuatu yang abstrak dengan sesuatu yang nyata.
Setelah kelas mengimplementasikan interface, maka kelas tersebut wajib
mengimplementasikan semua metode yang ada di dalam interface.
Buat kelas baru untuk interface.
class Flyable{
void fly(){}
}
Kita dapat membiarkan body dari method fly() tetap kosong karena fungsi
implementasinya akan dilakukan oleh class. Selanjutnya buat kelas Mage
mengimplementasi interface Flyable
class Mage extends Hero implements Flyable{
.... code
@override
void fly(){
print(‘$name terbang!!’);
}
}
13. Synchronous vs Asynchronous
Sejauh ini kita telah menuliskan kode secara synchronous. Lebih lanjut, pada modul ini
kita akan mempelajari kode yang bekerja secara asynchronous. Sebelum
membahas asynchronous lebih dalam, kita akan bahas dahulu apa
perbedaan synchronous dan asynchronous.
Dalam synchronous program, kode program dijalankan secara berurutan dari atas ke
bawah. Artinya jika kita menuliskan dua baris kode maka baris kode kedua tidak bisa
dieksekusi sebelum kode baris pertama selesai dieksekusi. Kita bisa bayangkan ketika
sedang berada dalam antrian kasir. Kita tidak akan dilayani sebelum semua antrian di depan
kita selesai dilayani, begitu pula orang di belakang kita pun harus menunggu gilirannya.
Dalam asynchronous program, jika kita menuliskan dua baris kode, kita dapat membuat
baris kode kedua dieksekusi tanpa harus menunggu kode pada baris pertama selesai
dieksekusi. Dalam dunia nyata bisa kita bayangkan dengan memesan kopi melalui pelayan,
di mana sembari menunggu pesanan kita datang, kita dapat melakukan aktivitas lain seperti
membuka laptop atau menulis.
Program asynchronous memungkinkan suatu operasi bisa berjalan sembari menunggu
operasi lainnya selesai. Umumnya kita memanfaatkan asynchronous pada operasi yang
besar dan membutuhkan waktu lama, seperti mengambil data dari internet atau API,
menyimpan data ke database, dan membaca data dari sebuah berkas.