Masukkan Password
01 What is dart programming language | Dart Tutorial
Teks tersebut menjelaskan apa itu Dart, sejarah singkatnya, kegunaannya, dan fitur-fitur utama Dart, terutama kaitannya dengan Flutter. Saya jelaskan ulang dari dasar dengan bahasa yang lebih mudah dipahami.
1. Apa itu Dart?
Dart adalah bahasa pemrograman general-purpose dan berorientasi objek (Object-Oriented Programming/OOP) yang dikembangkan oleh Google.
“General-purpose” artinya Dart tidak hanya digunakan untuk satu jenis aplikasi. Dart dapat digunakan untuk membuat berbagai macam aplikasi, seperti:
- π± Aplikasi Android
- π Aplikasi iOS
- π Aplikasi Web
- π₯οΈ Aplikasi Desktop
- βοΈ Aplikasi/server-side
Secara sintaks, Dart memiliki kemiripan dengan bahasa seperti Java, C#, C++, dan JavaScript, sehingga orang yang sudah pernah belajar bahasa tersebut biasanya lebih mudah mempelajari Dart.
Contoh sederhana Dart:
void main() {
String nama = "Budi";
print("Halo, $nama!");
}
Hasilnya:
Halo, Budi!
2. Siapa yang membuat Dart?
Dart dikembangkan oleh Google.
Dart pertama kali diperkenalkan pada 10 Oktober 2011 dalam konferensi GOTO di Denmark.
Perkembangannya secara sederhana:
- 2011 β Dart diperkenalkan oleh Google
- 2013 β Dart versi pertama dirilis
- 2018 β Dart 2.0 dirilis
- Setelah itu β Dart terus berkembang dan menjadi bahasa utama untuk pengembangan Flutter
Jadi, kalau sekarang kita banyak mendengar Dart, salah satu alasan terbesarnya adalah karena Flutter menggunakan Dart sebagai bahasa pemrogramannya.
3. Apa hubungan Dart dengan Flutter?
Ini bagian yang sangat penting.
Dart dan Flutter bukanlah hal yang sama.
Bayangkan seperti ini:
Dart = bahasa pemrograman Flutter = framework untuk membuat aplikasi
Contohnya:
Jika kita ingin membuat aplikasi Flutter, kita menulis kode menggunakan bahasa Dart.
Dart
β
digunakan oleh
β
Flutter
β
membuat aplikasi
β
Android / iOS / Web / Desktop
Jadi ketika belajar Flutter, kita juga perlu memahami Dart.
4. Mengapa Dart menjadi populer?
Awalnya Dart memang dirancang oleh Google terutama untuk kebutuhan pengembangan web.
Namun kemudian Google mengembangkan Flutter dan memilih Dart sebagai bahasa pemrograman Flutter.
Akibatnya, popularitas Dart ikut meningkat.
Misalnya kita ingin membuat aplikasi:
Aplikasi Flutter
β
Dart
β
βββββββΌββββββ¬βββββββ
β β β β
Android iOS Web Desktop
Salah satu konsep menarik dari Flutter adalah kita dapat menggunakan satu codebase untuk menargetkan berbagai platform.
Misalnya kita mempunyai kode:
void main() {
print("Hello World");
}
Dalam pengembangan Flutter, kita bisa membuat aplikasi yang ditargetkan ke:
- Android
- iOS
- Web
- Windows
- macOS
- Linux
Namun perlu dipahami: “satu codebase” tidak selalu berarti 100% kode pasti sama untuk semua platform. Fitur tertentu, seperti integrasi dengan hardware atau API khusus platform, terkadang membutuhkan kode/platform-specific.
5. Dart adalah Object-Oriented Programming (OOP)
Dart merupakan bahasa yang mendukung konsep Object-Oriented Programming (OOP).
OOP adalah cara membuat program dengan menggunakan konsep object/objek.
Dart mendukung konsep seperti:
Class
Class dapat dianggap sebagai cetakan/template untuk membuat object.
Contoh:
class Mobil {
String warna = "Merah";
void jalan() {
print("Mobil sedang berjalan");
}
}
Kita kemudian dapat membuat objek:
void main() {
Mobil mobilSaya = Mobil();
print(mobilSaya.warna);
mobilSaya.jalan();
}
Output:
Merah
Mobil sedang berjalan
6. Inheritance
Dart juga mendukung inheritance/pewarisan.
Sederhananya, sebuah class dapat mewarisi kemampuan dari class lainnya.
Contoh:
class Hewan {
void makan() {
print("Hewan sedang makan");
}
}
class Kucing extends Hewan {
void mengeong() {
print("Meong");
}
}
Sekarang Kucing mendapatkan kemampuan dari Hewan.
void main() {
Kucing kucing = Kucing();
kucing.makan();
kucing.mengeong();
}
Output:
Hewan sedang makan
Meong
7. Polymorphism
Polymorphism secara sederhana berarti satu interface/konsep dapat memiliki berbagai bentuk perilaku.
Contohnya:
class Hewan {
void suara() {
print("Suara hewan");
}
}
class Kucing extends Hewan {
@override
void suara() {
print("Meong");
}
}
class Anjing extends Hewan {
@override
void suara() {
print("Guk guk");
}
}
Walaupun sama-sama mempunyai method suara(), perilakunya berbeda.
Hewan
βββ Kucing β Meong
βββ Anjing β Guk guk
8. Encapsulation
Encapsulation adalah konsep membungkus data dan fungsi yang berkaitan dalam sebuah class serta mengontrol bagaimana data tersebut diakses.
Contoh sederhana:
class Rekening {
double _saldo = 0;
void deposit(double jumlah) {
_saldo += jumlah;
}
double getSaldo() {
return _saldo;
}
}
Di sini _saldo dibuat sebagai bagian internal class.
Pengguna class tidak harus mengubah saldo secara langsung, tetapi menggunakan method:
rekening.deposit(100000);
Hal ini membantu menjaga data agar tidak sembarangan dimodifikasi.
9. Abstraction
Abstraction berarti menyembunyikan detail implementasi yang tidak perlu diketahui pengguna.
Contoh kehidupan sehari-hari:
Ketika menggunakan mobil, kita cukup tahu:
tekan pedal gas β mobil berjalan
Kita tidak perlu mengetahui seluruh proses pembakaran bahan bakar atau kerja mesin.
Dalam pemrograman juga demikian.
Kita menggunakan fungsi:
print("Hello");
Tanpa harus mengetahui seluruh proses internal bagaimana print() bekerja.
10. Exception Handling
Dart juga memiliki mekanisme untuk menangani error yang terjadi ketika program berjalan.
Contohnya:
void main() {
try {
int hasil = 10 ~/ 0;
print(hasil);
} catch (e) {
print("Terjadi error: $e");
}
}
Program dapat menangkap error tersebut sehingga aplikasi tidak langsung berhenti secara tidak terkendali.
Konsep ini biasanya menggunakan:
try
catch
finally
throw
11. Multi-platform
Salah satu keunggulan Dart dalam ekosistem Flutter adalah kemampuannya digunakan untuk pengembangan aplikasi lintas platform.
Misalnya kita membuat:
project Flutter
β
βββ Android
βββ iOS
βββ Web
βββ Windows
βββ macOS
βββ Linux
Jadi developer tidak perlu membuat aplikasi Android menggunakan satu bahasa, iOS menggunakan bahasa lain, dan Web menggunakan bahasa lain untuk keseluruhan aplikasinya.
Kita dapat menggunakan Dart + Flutter sebagai basis utama.
12. Apakah Dart menggunakan Multi-threading?
Di bagian ini ada sedikit hal yang perlu diluruskan dari materi video.
Video mengatakan bahwa Dart adalah single-threaded dan tidak mempunyai multithreading.
Untuk pemahaman dasar, ini bisa dianggap benar untuk alur eksekusi utama Dart isolate. Namun secara teknis Dart mempunyai konsep isolate, dan beberapa isolate dapat berjalan secara paralel.
Jadi lebih tepatnya:
Dart menggunakan model isolate, bukan model shared-memory multithreading seperti yang biasa kita bayangkan pada Java.
Setiap isolate mempunyai memory sendiri dan berkomunikasi melalui message.
Untuk pemula, bayangkan:
Isolate Utama
β
βββ menjalankan UI
β
βββ mengerjakan tugas utama
Kemudian pekerjaan tertentu bisa dijalankan menggunakan isolate lain jika memang diperlukan.
13. Apa itu Asynchronous Programming?
Ini adalah konsep yang sangat penting dalam Dart dan Flutter.
Asynchronous programming memungkinkan program mengerjakan operasi yang membutuhkan waktu tanpa membuat aplikasi terasa “beku”.
Contohnya kita meminta data dari server:
Aplikasi
β
Request ke server
β
"Menunggu..."
β
Server mengirim data
β
Aplikasi melanjutkan proses
Misalnya:
Future<void> ambilData() async {
print("Mulai");
await Future.delayed(
Duration(seconds: 2),
);
print("Data selesai diambil");
}
Kita akan banyak bertemu dengan:
FutureasyncawaitStream
Dalam Flutter, asynchronous programming sangat penting karena aplikasi sering berkomunikasi dengan:
- API
- database
- internet
- file
- Bluetooth
- dan layanan lainnya.
14. Future
Future dapat dipahami sebagai:
Sebuah nilai yang akan tersedia di masa depan.
Misalnya kita meminta data dari API.
Saat kita meminta:
GET /users
data tidak selalu langsung tersedia.
Maka kita mendapatkan semacam “janji”:
Future<Data>
Nanti ketika selesai, hasilnya tersedia.
Contoh sederhana:
Future<String> getNama() async {
return "Budi";
}
Kemudian:
void main() async {
String nama = await getNama();
print(nama);
}
15. async dan await
async dan await digunakan untuk membuat kode asynchronous lebih mudah dibaca.
Contohnya:
Future<void> proses() async {
print("Proses 1");
await Future.delayed(
Duration(seconds: 2),
);
print("Proses 2");
}
await dapat dipahami secara sederhana sebagai:
“Tunggu operasi asynchronous ini selesai sebelum melanjutkan bagian berikutnya.”
Tetapi penting: await tidak berarti seluruh aplikasi berhenti total. Event loop tetap dapat menangani pekerjaan lain yang tidak bergantung pada Future tersebut.
16. Dart memiliki banyak library
Dart menyediakan berbagai library bawaan.
Contohnya:
dart:async
dart:convert
dart:io
dart:math
dart:html
Masing-masing memiliki kegunaan berbeda.
Contohnya:
dart:math
Digunakan untuk operasi matematika.
import 'dart:math';
void main() {
print(sqrt(25));
}
Output:
5.0
dart:io
Digunakan untuk kebutuhan input/output tertentu, terutama pada aplikasi non-web seperti command-line dan server.
17. Package/library dari luar
Selain library bawaan, Dart juga memiliki ekosistem package yang sangat besar.
Untuk Flutter, developer dapat menggunakan package untuk menambahkan berbagai kemampuan tanpa harus membuat semuanya dari awal.
Contohnya:
Project Flutter
β
βββ Package HTTP
βββ Package database
βββ Package authentication
βββ Package state management
βββ Package lainnya
Package Dart/Flutter umumnya dikelola melalui pub.dev.
Misalnya kita ingin melakukan HTTP request. Kita dapat menggunakan package daripada menulis seluruh implementasinya sendiri.
18. Platform Independent
Dart dirancang agar dapat digunakan di berbagai platform.
Artinya, kode Dart dapat dijalankan dalam berbagai environment, tergantung target dan runtime/compiler yang digunakan.
Contohnya:
Dart
β
βββββββββΌβββββββββ
β β β
Mobile Web Desktop
Namun sekali lagi, jangan memahami “platform independent” sebagai:
“Semua kode pasti berjalan tanpa perubahan di semua platform.”
Fitur yang berhubungan langsung dengan sistem operasi terkadang memerlukan penyesuaian.
19. Type Safety
Ini salah satu fitur penting Dart.
Type safety berarti tipe data diperhatikan oleh bahasa sehingga kita dapat mencegah banyak kesalahan sejak proses pengembangan.
Contoh:
String nama = "Budi";
Variabel nama bertipe String.
Kita tidak seharusnya memberikan integer:
nama = 100;
Ini akan menghasilkan error karena:
String β int
Contoh lain:
int umur = 20;
umur harus berisi nilai bertipe int.
20. Null Safety
Ini juga sangat penting ketika belajar Dart modern.
Null dapat kita pahami sebagai:
“Tidak ada nilai.”
Misalnya kita mempunyai:
String? nama;
Tanda ? menunjukkan bahwa nama boleh memiliki nilai null.
Sebaliknya:
String nama;
menunjukkan bahwa variabel tersebut secara normal harus memiliki nilai String yang valid sebelum digunakan.
Contoh:
String? nama = null;
print(nama);
Karena nama nullable, kita harus mempertimbangkan kemungkinan bahwa nilainya null.
Misalnya:
print(nama?.length);
atau kita memberikan nilai default:
print(nama ?? "Tidak diketahui");
?? dapat dibaca:
“Kalau nilai di sebelah kiri null, gunakan nilai di sebelah kanan.”
Jadi:
String? nama;
print(nama ?? "Tidak diketahui");
menghasilkan:
Tidak diketahui
21. Mengapa Null Safety penting?
Bayangkan sebuah aplikasi mengambil data pengguna:
Server
β
Data user
β
Nama?
β
Apakah nama tersedia?
Tanpa penanganan null yang baik, aplikasi dapat mengalami error ketika kita mencoba menggunakan nilai yang ternyata tidak ada.
Dengan null safety, Dart membantu developer menyadari:
“Hati-hati, nilai ini mungkin null.”
Ini sangat membantu mengurangi berbagai jenis bug.
22. Dart bersifat Open Source
Dart merupakan teknologi open source, sehingga source code dan perkembangannya dapat diakses publik.
Ini juga membantu perkembangan ekosistem karena developer dapat:
- mempelajari teknologi
- berkontribusi
- membuat package
- melaporkan bug
- melihat perkembangan bahasa
23. Apakah Dart mudah dipelajari?
Untuk pemula, Dart relatif mudah dipelajari jika dibandingkan dengan beberapa bahasa pemrograman lain, terutama karena sintaksnya familiar.
Contohnya:
if (umur >= 18) {
print("Dewasa");
} else {
print("Belum dewasa");
}
Bagi orang yang pernah belajar Java, C#, C++, atau JavaScript, bentuk seperti ini terasa cukup familiar.
Dart juga mendukung konsep pemrograman modern seperti:
Variable
Data Type
Function
Class
Object
Inheritance
Interface
Generics
Exception
Async/Await
Future
Stream
Null Safety
24. Gambaran keseluruhan Dart
Kalau diringkas, materi video tersebut dapat kita gambarkan seperti ini:
DART
β
βββββββββββββββΌββββββββββββββ
β β β
Bahasa OOP Asynchronous
Pemrograman β Programming
β β β
β ββββββΌβββββ Future
β β β β async
β Class Inheritance await
β Object Polymorphism
β Encapsulation
β Abstraction
β
βββ Type Safety
βββ Null Safety
βββ Libraries
βββ Packages
βββ Cross-platform
β
β
FLUTTER
β
βββββββββββββββΌββββββββββββββ
β β β
Android iOS Web
β
Desktop
Kesimpulan sederhana
Kalau kamu baru mulai belajar Flutter, jangan menganggap Dart sebagai sesuatu yang terpisah dari Flutter.
Urutan pemahamannya sebaiknya:
1. Pelajari dasar Dart
β variable, tipe data, operator, if, for, function.
2. Pelajari OOP Dart β class, object, constructor, inheritance, abstraction, interface.
3. Pelajari Dart modern β null safety, collection, generics, extension, dan lainnya.
4. Pelajari asynchronous Dart
β Future, async, await, Stream.
5. Baru masuk lebih dalam ke Flutter
β Widget, StatelessWidget, StatefulWidget, layout, navigation, state management, API, database, dan sebagainya.
Dengan memahami Dart terlebih dahulu, saat masuk ke Flutter kamu tidak akan terlalu bingung ketika melihat kode seperti:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: Text("Hello Flutter"),
),
),
);
}
}
Karena kamu sudah memahami bahwa di balik kode tersebut ada konsep class, object, method, type, inheritance, dan berbagai fitur Dart lainnya.
Saya juga bisa membuatkan diagram/gambar alur βDart β Flutter β Android/iOS/Web/Desktopβ agar materi ini lebih mudah diingat.