Dart adalah bahasa pemrograman yang dioptimalkan untuk klien (client-optimized), yaitu aplikasi yang berjalan langsung di perangkat pengguna, mulai dari ponsel dan desktop hingga browser. Topik ini membahas karakter utama bahasanya, cara kode Dart dikompilasi dan dijalankan, serta ranah penggunaannya pada aplikasi klien, program baris perintah, dan server. Setelah membaca topik ini, keputusan memilih Dart untuk sebuah proyek dapat diambil dengan dasar yang jelas.
Karakter utama bahasa Dart#
Dart menggunakan pemeriksaan tipe statis (static type checking) untuk memastikan nilai sebuah variabel selalu cocok dengan tipe statis variabel tersebut, sifat yang dalam dokumentasinya disebut sound typing. Meskipun setiap nilai wajib bertipe, penulisan anotasi tipe bersifat opsional karena Dart menyimpulkan tipe dari nilainya (inference). Deklarasi var total = 0; cukup tanpa anotasi karena total langsung disimpulkan bertipe int. Tipe dynamic tetap tersedia untuk eksperimen yang membutuhkan fleksibilitas tinggi, tetapi pemeriksaannya berpindah ke saat program berjalan.
Karakter kedua adalah null safety bawaan, yaitu jaminan bahwa sebuah nilai tidak bisa null kecuali tipenya dinyatakan nullable secara eksplisit. Kode Dart yang lolos pemeriksaan statis tidak mengalami error null saat program berjalan karena kasus semacam itu sudah tersaring sebelum kode dieksekusi. Tanda tanya pada tipe seperti String? menandai variabel yang boleh bernilai null, sedangkan String tanpa tanda tanya menandai variabel yang tidak boleh null. Aturan null safety dibahas menyeluruh pada modul khusus di jalur ini.
Karakter ketiga adalah dukungan asinkron yang melekat pada bahasa. Konstruksi async dan await beserta tipe Future dan Stream tersedia dalam core library, yaitu kumpulan pustaka bawaan yang menyertai setiap program Dart, sehingga kode yang menunggu hasil operasi jaringan atau berkas dapat ditulis berurutan seolah-olah kode sinkron. Sintaks Dart mengikuti keluarga bahasa C dengan kurung kurawal dan deklarasi yang diakhiri titik koma, sehingga bentuknya mirip bahasa seperti Java atau JavaScript.
Program kecil sebagai gambaran#
Cara yang cepat untuk mengamati karakter tersebut adalah membaca program utuh yang benar-benar berjalan. Program berikut menghitung statistik nilai ujian, yaitu banyaknya nilai, total, dan rata-ratanya, kemudian menampilkannya melalui print. Program ini ditulis sebagai satu berkas utuh dan dapat dijalankan dengan dart run statistik-nilai.dart setelah Dart SDK terpasang.
void main() {
final nilai = <int>[78, 92, 85, 60, 100];
var total = 0;
for (var n in nilai) {
total += n;
}
final rataRata = total / nilai.length;
print('Banyak nilai: ${nilai.length}');
print('Total: $total');
print('Rata-rata: ${rataRata.toStringAsFixed(1)}');
}Banyak nilai: 5
Total: 415
Rata-rata: 83.0Beberapa baris pada program ini mencerminkan karakter bahasanya. Deklarasi var total = 0; berdiri tanpa anotasi tipe karena tipe int disimpulkan dari nilainya, sedangkan final menandai nilai yang tidak diubah lagi setelah diinisialisasi. Pernyataan print menggunakan interpolasi string (string interpolation), yaitu penyisipan nilai langsung ke dalam teks dengan tanda $. Pembagian total / nilai.length menghasilkan tipe double, dan toStringAsFixed(1) memformatnya menjadi satu angka di belakang koma. Konstruksi lainnya dibahas mendetail di sepanjang jalur ini, mulai dari tipe bawaan hingga koleksi.
Dua mesin eksekusi: JIT dan AOT#
Kode Dart yang sama dapat dijalankan melalui mesin eksekusi yang berbeda sesuai tahap pengembangannya. Pada platform native, yaitu aplikasi mobile dan desktop, Dart VM menyediakan kompilasi just-in-time (JIT) yang mengompilasi kode saat program berjalan. Mode JIT mendukung kompilasi ulang bertahap, pengumpulan metrik langsung yang menggerakkan DevTools, serta dukungan debug yang kaya, sehingga siklus pengembangan berjalan cepat. Kemampuan inilah yang menopang hot reload, yaitu pembaruan kode pada aplikasi yang sedang berjalan tanpa memulainya ulang.
Apabila aplikasi siap didistribusikan, kompilasi ahead-of-time (AOT) mengubah kode menjadi kode mesin ARM atau x64 sebelum aplikasi dipasang. Aplikasi hasil AOT berjalan pada runtime Dart yang efisien dengan waktu mulai yang singkat dan konsisten. Runtime ini mengelola memori melalui garbage collector, yaitu mekanisme yang mengembalikan memori tak terpakai secara otomatis, sekaligus menegakkan sistem tipe Dart yang sound. Untuk web, Dart dikompilasi ke JavaScript untuk fase pengembangan maupun produksi, atau ke WebAssembly melalui kompilator WasmGC.
| Mesin eksekusi | Digunakan pada | Bentuk keluaran |
|---|---|---|
| JIT | fase pengembangan aplikasi native | kode yang berjalan pada Dart VM |
| AOT | distribusi aplikasi native | kode mesin ARM atau x64 |
| Web | aplikasi web | JavaScript atau WebAssembly |
Ranah penggunaan Dart#
Flutter adalah framework UI multi-platform yang digerakkan oleh Dart, dan inilah ranah penggunaan Dart yang paling dikenal. Satu basis kode Flutter berjalan pada iOS, Android, macOS, Windows, Linux, dan web. Dart menyediakan bahasa dan runtime di balik aplikasi Flutter, sementara Flutter SDK menyertakan Dart SDK secara utuh di dalamnya.
Di luar aplikasi klien, Dart digunakan untuk membangun program baris perintah dan layanan server. Core library dart:io menyediakan akses berkas, socket, dan HTTP untuk kebutuhan non-web, sehingga alat seperti penghitung kata, konverter satuan, atau pembaca log sensor suhu dapat dibangun hanya dengan SDK. Untuk layanan server, package dari pub.dev menyediakan routing serta penanganan permintaan (request) dan respons (response).
Untuk aplikasi web, Dart dikompilasi ke JavaScript atau WebAssembly sebagaimana dijelaskan pada bagian sebelumnya. Sementara itu, ekosistem package berkumpul di pub.dev, dengan ribuan package yang diterbitkan tim Dart dan komunitas. Package melengkapi core library untuk kebutuhan seperti pemrosesan JSON, kriptografi, dan akses HTTP, sehingga kode yang sudah ada dapat digunakan ulang alih-alih ditulis dari awal.
Ringkasan#
- Dart adalah bahasa yang dioptimalkan untuk klien dengan pemeriksaan tipe statis yang sound, inferensi tipe, dan null safety bawaan.
- Kode Dart berjalan melalui JIT pada fase pengembangan dan dikompilasi AOT untuk distribusi, sedangkan aplikasi web dikompilasi ke JavaScript atau WebAssembly.
- Dart digunakan pada aplikasi Flutter, program baris perintah, layanan server, dan aplikasi web, dengan package pendukung dari pub.dev.
Referensi#
- Dart overview — Dart — Gambaran resmi karakter bahasa Dart, core library, dan platform eksekusinya.
- The Dart language — Dart — Peta fitur bahasa Dart dari variabel hingga pattern dan pemrograman asinkron.
- Dart on the server — Dart — Gambaran resmi pemakaian Dart untuk aplikasi sisi server.