Dart
Sejarah Dart
Dart adalah bahasa pemrograman berorientasi objek (OOP) yang dibuat oleh Google dan pertama kali diperkenalkan tahun 2011 oleh Lars Bak dan Kasper. Bahasa ini memiliki sintaks mirip C, Java, dan JavaScript, sehingga mudah dipelajari oleh programmer yang sudah mengenal bahasa-bahasa tersebut. Dart mendukung berbagai paradigma pemrograman, seperti fungsional, imperatif, dan reflektif. Beberapa fiturnya antara lain berbasis kelas, garbage collection otomatis, mixins, generics, dan type inference.
Keunggulan Dart ada pada kinerjanya. Saat pengembangan, Dart bisa menggunakan kompilasi Just-in-Time (JIT) agar proses coding lebih cepat. Sementara untuk aplikasi jadi, Dart menggunakan Ahead-of-Time (AOT) agar performa lebih optimal. Sejak versi 2.12, Dart sudah mendukung sound null safety untuk mencegah error null pointer. Mulai Dart 3, semua kode wajib mematuhi null safety ini.
Daya tarik utama Dart adalah perannya sebagai bahasa utama Flutter, framework buatan Google untuk membuat aplikasi lintas platform (Android, iOS, web, dan desktop) hanya dengan satu basis kode. Selain itu, Dart juga bisa digunakan untuk aplikasi web (dikompilasi ke JavaScript atau WebAssembly), aplikasi server, dan desktop. Ekosistem Dart sangat mendukung pengembang lewat manajer paket pub.dev, pustaka-pustaka bawaan, serta tooling seperti DevTools dan plugin editor, sehingga pengalaman coding menjadi lebih lancar.
Instalasi Dart
Persyaratan Minimum Dart SDK
Sebelum menginstal SDK Dart, pastikan terlebih dahulu arsitektur perangkat keras yang digunakan sudah memenuhi syarat minimum. Adapun spesifikasi minimum yang dibutuhkan untuk instalasi SDK Dart dapat dilihat pada gambar berikut.
Instalasi Dart SDK
Ada beberapa cara untuk menginstal SDK Dart. Pertama, menggunakan package manager seperti Chocolatey. Kedua, dengan mengunduh file SDK dalam format ZIP lalu mengekstraknya secara manual di perangkat. Pada panduan ini, kita akan menggunakan metode instalasi melalui Chocolatey.
Langkah pertama adalah pergi ke laman Chocolatey dan mengikuti instruksi untuk menginstal Chocolatey di sistem Anda.
masuk ke poweshell lalu run as administrator, lalu masukkan perintah berikut:
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
Ganti Path
Setelah Dart SDK terinstal, Anda perlu menambahkan path Dart ke variabel lingkungan sistem Anda. Ini memungkinkan Anda untuk menjalankan perintah Dart dari Command Prompt (CMD) di mana saja.
Untuk melakukannya, buka Control Panel dan cari "Environment Variables". Di bawah "System Properties", klik "Environment Variables".
Di bagian "System variables", cari variabel bernama "Path" dan pilih "Edit". Tambahkan path ke folder bin Dart SDK Anda (misalnya, `C:\ProgramData\chocolatey\lib\dart-sdk\tools\dart-sdk\bin`) ke dalam daftar.
Setelah menambahkan path, tutup dan buka kembali Command Prompt (CMD) untuk menerapkan perubahan.
Setelah Chocolatey terinstal, buka Command Prompt (CMD) sebagai administrator dan jalankan perintah berikut untuk menginstal Dart SDK:
choco install dart-sdk
Setelah instalasi selesai, verifikasi instalasi dengan menjalankan perintah berikut di CMD:
dart
Membuat Projek Dart di cmd
Buat projek dengan mengetik dart create (nama project) halo, untuk membuka proyek, ketik cd (nama project) halo, lalu untuk menjalankan proyek, ketik dart run.
Instalasi Ekstensi Dart di VSCode
Buka VSCode, lalu download ekstensi dart seperti dibawah.
Berikut tampilan awal dari struktur bahasa pemrograman Dart
Berikut adalah tampilan awal dari projek dart yang sudah dibuat tadi.
List
List adalah tipe data yang berisi kumpulan data atau dalam bahasa pemrograman lain disebut array, Untuk membuat list yaitu, buat file baru dengan nama dart_dasar.dart pada file bin, inputkan kode seperti berikut.
void main(List arguments) {
// list
List fruits = ['Apel', 'Alpukat', 'Nanas', 'Mangga', 'Pisang'];
print(fruits.toString());
// manipulasi list
fruits.add('Jeruk');
print(fruits.toString());
fruits.remove('Alpukat');
print(fruits.toString());
fruits[0] = 'Semangka';
print(fruits.toString());
fruits.sort();
print(fruits.toString());
fruits.shuffle();
print(fruits.toString());
print(fruits.length);
print(fruits.first);
print(fruits.last);
print(fruits.contains('Mangga'));
print(fruits.indexOf('Pisang'));
print(fruits.isEmpty);
print(fruits.isNotEmpty);
}
Maka outputnya akan seperti dibawah.
Set
Set merupakan sebuah tipe data yang mirip dengan list, akan tetapi set tidak memiliki index sehingga data yang ada pada set tidak berurutan, Set tidak menerima duplikasi data dan tidak bisa mengakses menggunakan index, tambahkan kode berikut pada bagian bawah kode tadi.
// set
Set animals = {'Kucing', 'Anjing', 'Kelinci', 'Burung'};
print(animals.toString());
// manipulasi set
animals.add('Ikan');
print(animals.toString());
animals.remove('Kelinci');
print(animals.toString());
print(animals.length);
print(animals.contains('Anjing'));
print(animals.isEmpty);
print(animals.isNotEmpty);
Seperti di bawah ini.
Map
Map adalah tipe data key-value yang mana key seperti index dan value sebagai datanya, Menggunakan kurung kurawal {} dan menggunakan : untuk memisahkan key-value, Jika ada data key yang sama maka yang akan digunakan data key yang terakhir. berikut cara cara membuat map.
Ini adalah contoh kode untuk membuat map.
// map
Map productPrices = {
'Laptop': '10.000.000',
'Mouse': '200.000',
'Keyboard': '500.000',
'Monitor': '2.000.000'
};
print(productPrices.toString());
// manipulasi map
productPrices['Printer'] = '1.500.000';
print(productPrices.toString());
productPrices.remove('Mouse');
print(productPrices.toString());
productPrices['Laptop'] = '9.500.000';
print(productPrices.toString());
print(productPrices.length);
print(productPrices.containsKey('Keyboard'));
print(productPrices.containsValue('2.000.000'));
print(productPrices.keys);
print(productPrices.values);
print(productPrices.isEmpty);
print(productPrices.isNotEmpty);
Seperti di bawah ini.
Perulangan
Perulangan pada dart dapat dilakukan dengan 2 cara, cara pertama, gunakan kode dibawah ini.
for (var fruit in fruits) {
print(fruit);
}
for (var animal in animals) {
print(animal);
}
productPrices.forEach((key, value) {
print('$key: $value');
});
Berikut hasil perulangan 1
Perulangan, cara kedua, gunakan kode dibawah ini.
for (var i = 0; i < fruits.length; i++) {
print(fruits[i]);
}
for (var i = 0; i < animals.length; i++) {
print(animals.elementAt(i));
}
for (var i = 0; i < productPrices.length; i++) {
print(
'${productPrices.keys.elementAt(i)}: ${productPrices.values.elementAt(i)}'
);
}
Berikut hasil perulangan 2
OOP (Object-Oriented Programming)
Kode program berikut ini merupakan contoh konsep penerapan OOP pada Bahasa Dart. Buat file baru pada folder bin dengan nama oop.dart dan tambahkan kode program berikut.
void main(List arguments) {
// Object Oriented Programming (OOP)
// membuat object
var car1 = Car();
car1.color = 'Red';
car1.brand = 'Toyota';
car1.year = 2020;
car1.drive();
car1.honk();
print('car1: ${car1.color}, ${car1.brand}, ${car1.year}');
Cat cat1 = Cat();
cat1.eat();
cat1.meow();
}
class Car {
// property
String color = '';
String brand = '';
int year = 0;
// method
void drive() {
print('The $color $brand is driving.');
}
void honk() {
print('The $color $brand is honking.');
}
}
// pewarisan
class Animal {
void eat() {
print('The animal is eating.');
}
}
class Dog extends Animal {
void bark() {
print('The dog is barking.');
}
}
class Cat extends Animal {
void meow() {
print('The cat is meowing.');
}
}
Berikut tampilan kodenya.
Berikut tampilan hasilnya.
Tugas
Aplikasi Laundry
1. Buatlah aplikasi sederhana mini laundry menggunakan Bahasa pemrograman Dart dengan ketentuan sebagai berikut: Jika total laundry >= 50.000 maka mendapatkan potongan harga 5%, dan jika lebih dari 100.000 mendapatkan potongan 10%. Tampilkan output jumlah yang harus dibayar
import 'dart:io';
void main() {
//Dekralasi Awal Harga yang Ditawarkan
const int paketCuciSetrika = 6000;
const int paketCuci = 4000;
const int paketSetrika = 3000;
print("Selamat datang di Aplikasi Laundry Sederhana");
print("Silahkan Masukkan nama anda: ");
String? nama = stdin.readLineSync();
print("Halo $nama, Silahkan pilih paket yang anda mau:");
print("1. Paket Cuci + Setrika (Rp $paketCuciSetrika/kg)");
print("2. Paket Cuci (Rp $paketCuci/kg)");
print("3. Paket Setrika (Rp $paketSetrika/kg)");
//Input Pilihan Paket
stdout.write("Pilihan paket $nama adalah (1/2/3): ");
int pilihan = int.parse(stdin.readLineSync()!);
//Input Berat Cucian
stdout.write("Berapa berat cucian $nama ? (kg): ");
int berat = int.parse(stdin.readLineSync()!);
//Proses perhitungan
int hargaPerKg = 0;
if (pilihan == 1) {
hargaPerKg = paketCuciSetrika;
} else if (pilihan == 2) {
hargaPerKg = paketCuci;
} else if (pilihan == 3) {
hargaPerKg = paketSetrika;
} else {
print("Pilihan paket tidak valid");
return;
}
//hitung total harga
int totalHarga = hargaPerKg * berat;
//Cek Harga Diskon
double diskon = 0;
if (totalHarga > 100000) {
diskon = 0.1 * totalHarga;
print(
"Selamat $nama, Anda mendapatkan diskon 10% sebesar Rp ${diskon.toInt()}",
);
} else if (totalHarga > 50000) {
diskon = 0.05 * totalHarga;
print(
"Selamat $nama, Anda mendapatkan diskon 5% sebesar Rp ${diskon.toInt()}",
);
}
double hargaSetelahDiskon = totalHarga - diskon;
//Struk Pembayaran
print("====Struk Pembayaran Laundry====");
print("Nama Pelanggan: $nama");
print(
"Paket yang dipilih: ${pilihan == 1
? "Cuci + Setrika"
: pilihan == 2
? "Cuci"
: "Setrika"}",
);
print("Berat Cucian: $berat kg");
print("Total Harga: Rp ${totalHarga.toInt()}");
print("Diskon: Rp ${diskon.toInt()}");
print("Harga Setelah Diskon: Rp ${hargaSetelahDiskon.toInt()}");
}
Berikut tampilan hasilnya.
2. Ubah program diatas menggunakan konsep OOP
import 'dart:io';
void main() {
//Dekralasi Awal Harga yang Ditawarkan
const int paketCuciSetrika = 6000;
const int paketCuci = 4000;
const int paketSetrika = 3000;
print("Selamat datang di Aplikasi Laundry Sederhana");
print("Silahkan Masukkan nama anda: ");
String? nama = stdin.readLineSync();
print("Halo $nama, Silahkan pilih paket yang anda mau:");
print("1. Paket Cuci + Setrika (Rp $paketCuciSetrika/kg)");
print("2. Paket Cuci (Rp $paketCuci/kg)");
print("3. Paket Setrika (Rp $paketSetrika/kg)");
//Input Pilihan Paket
stdout.write("Pilihan paket $nama adalah (1/2/3): ");
int pilihan = int.parse(stdin.readLineSync()!);
//Input Berat Cucian
stdout.write("Berapa berat cucian $nama ? (kg): ");
int berat = int.parse(stdin.readLineSync()!);
//Proses perhitungan
int hargaPerKg = 0;
if (pilihan == 1) {
hargaPerKg = paketCuciSetrika;
} else if (pilihan == 2) {
hargaPerKg = paketCuci;
} else if (pilihan == 3) {
hargaPerKg = paketSetrika;
} else {
print("Pilihan paket tidak valid");
return;
}
//hitung total harga
int totalHarga = hargaPerKg * berat;
//Cek Harga Diskon
double diskon = 0;
if (totalHarga > 100000) {
diskon = 0.1 * totalHarga;
print(
"Selamat $nama, Anda mendapatkan diskon 10% sebesar Rp ${diskon.toInt()}",
);
} else if (totalHarga > 50000) {
diskon = 0.05 * totalHarga;
print(
"Selamat $nama, Anda mendapatkan diskon 5% sebesar Rp ${diskon.toInt()}",
);
}
double hargaSetelahDiskon = totalHarga - diskon;
//Struk Pembayaran
print("====Struk Pembayaran Laundry====");
print("Nama Pelanggan: $nama");
print(
"Paket yang dipilih: ${pilihan == 1
? "Cuci + Setrika"
: pilihan == 2
? "Cuci"
: "Setrika"}",
);
print("Berat Cucian: $berat kg");
print("Total Harga: Rp ${totalHarga.toInt()}");
print("Diskon: Rp ${diskon.toInt()}");
print("Harga Setelah Diskon: Rp ${hargaSetelahDiskon.toInt()}");
}
Berikut tampilan hasilnya.