Episode ini menguasai fondasi syntax Dart: deklarasi variabel dengan var, final, dan const, control flow lengkap, fungsi dengan parameter opsional dan lambda, serta koleksi List, Set, dan Map beserta collection-for.

Setelah project kalian berjalan, saatnya mengisi kode dengan bahasa yang sebenarnya. Episode 4 membahas syntax dan fitur bahasa dasar yang akan kalian pakai setiap hari: cara mendeklarasikan variabel, mengendalikan alur program, mendefinisikan fungsi, dan bekerja dengan koleksi.
Dart dirancang agar mudah dibaca dan diekspresif. Banyak konsep di sini akan terasa familiar bagi kalian yang pernah menulis JavaScript atau C#, tapi ada detail khas Dart yang membedakannya — seperti final versus const, parameter bernama, dan collection-for.
Akhir episode ini, kalian akan bisa menulis program kecil yang utuh: dari membaca input, memproses data, sampai menampilkan hasil.
Deklarasikan variabel dengan var dan biarkan kompiler menyimpulkan tipenya:
void main() {
var nama = 'Dart';
var versi = 3;
var harga = 19.99;
print('$nama $versi $harga');
}Tipe nama adalah String, versi adalah int, dan harga adalah double — semua disimpulkan otomatis. Setelah terikat, tipe tidak bisa berubah.
Gunakan final untuk nilai yang hanya di-assign sekali, dan const untuk nilai konstan waktu kompilasi:
void main() {
final nama = 'Dart'; // assign sekali
const pi = 3.14; // konstanta kompilasi
print('$nama $pi');
}Perbedaan kuncinya: const dipakai saat nilai sudah diketahui sebelum program berjalan, sedangkan final dipakai saat nilai baru diketahui saat runtime tapi tidak boleh berubah setelahnya. Perintah dart run pada file ini tetap menghasilkan output yang sama karena keduanya sama-sama tidak bisa di-reassign.
if dan switch mengendalikan percabangan. Mulai Dart 3, switch bisa memakai pola dan expression:
void main() {
var nilai = 85;
if (nilai >= 80) {
print('Lulus dengan predikat baik');
} else {
print('Perlu belajar lagi');
}
}Dart mendukung for, while, do-while, dan for-in. Ada juga collection-for yang memungkinkan kalian membangun koleksi di dalam literal koleksi:
void main() {
for (var i = 1; i <= 3; i++) {
print('Iterasi $i');
}
var angka = [1, 2, 3];
var ganda = [for (var a in angka) a * 2];
print(ganda);
}for (var a in angka) a * 2 menghasilkan list [2, 4, 6] dalam satu ekspresi — pola yang sangat berguna untuk transformasi data.
Dart membedakan parameter opsional posisional yang dibungkus kurung siku dan opsional bernama yang dibungkus kurung kurawal. Named parameter wajib diberi tanda required jika tidak memiliki default:
void sapa(String nama, [String sapaan = 'Halo']) {
print('$sapaan, $nama!');
}
void profil({required String nama, int umur = 0}) {
print('$nama berumur $umur');
}
void main() {
sapa('Arman');
profil(nama: 'Arman', umur: 30);
}Panggilan profil(nama: 'Arman') memakai default umur 0 karena parameter umur bersifat opsional bernama. Perhatikan: saat memanggil named parameter, urutan tidak penting.
Fungsi adalah objek kelas satu di Dart. Kalian bisa menulis fungsi anonim dan arrow function dengan =>:
void main() {
var lipatGanda = (int x) => x * 2;
var daftar = [1, 2, 3];
var hasil = daftar.map(lipatGanda).toList();
print(hasil);
}daftar.map(lipatGanda) menerapkan fungsi ke setiap elemen dan mengembalikan hasil. Arrow function (int x) => x * 2 adalah singkatan dari blok yang langsung mengembalikan ekspresi.
Tiga koleksi utama Dart memakai literal yang mirip:
void main() {
var list = [1, 2, 3];
var set = {1, 2, 2, 3}; // duplikat otomatis dibuang
var map = {'nama': 'Dart', 'versi': 3};
print(list[0]);
print(set);
print(map['nama']);
}Set menjamin elemen unik — nilai 2 kedua otomatis dibuang. Map adalah pasangan kunci-nilai dan diakses dengan map['nama']. Ketiganya bisa dikombinasikan dengan collection-for dan collection-if untuk membangun data secara deklaratif.
Inti yang harus dibawa pulang:
var untuk inferensi tipe, final untuk assign sekali, const untuk nilai kompilasi.switch di Dart 3 mendukung pola; gunakan sesuai kebutuhan percabangan.required.=>.Di episode 5 selanjutnya kita akan masuk ke object-oriented Dart — class dan constructor, inheritance dan mixin, abstract class dan enum, extension method dan operator overloading, serta pembuatan data model yang immutable. Ini adalah fondasi untuk menulis aplikasi Dart yang terstruktur.