Konsep Dasar Pemrograman Dart
List
Tipe data yang berisi kumpulan data (array) dengan akses berdasarkan index. Dapat dimanipulasi dengan menambah, menghapus, atau mengubah elemen.
Set
Kumpulan data unik yang tidak berurutan dan tidak memiliki index. Tidak menerima duplikasi data.
Map
Tipe data key-value yang menggunakan kurung kurawal {}. Key berperan sebagai index dan value sebagai datanya.
OOP Dart
Pemrograman berorientasi objek dengan Dart mendukung class, inheritance, dan konsep OOP lainnya seperti abstraction dan polymorphism.
Langkah Implementasi sesuai Modul
Installasi Environment Dart
Persyaratan Sistem:
- Windows 10/11, Linux, atau macOS versi terbaru
- Arsitektur x64, ARM64, atau sesuai sistem
- Minimal 2GB RAM, disarankan 4GB atau lebih
- Ruang disk minimal 1.5GB
Cara Install di Windows:
- Download SDK Dart dari https://dart.dev/get-dart
- Extract file ZIP ke direktori yang diinginkan (contoh: C:\tools\dart-sdk)
- Tambahkan path SDK ke Environment Variables (C:\tools\dart-sdk\bin)
- Verifikasi instalasi dengan menjalankan perintah
dart --versiondi Command Prompt
Install Visual Studio Code dan Extensions:
- Download dan install Visual Studio Code dari https://code.visualstudio.com
- Buka Extensions Marketplace (Ctrl+Shift+X)
- Cari dan install extension "Dart"
- Restart Visual Studio Code
Membuat Project Dart Pertama
Langkah-langkah:
- Buka Command Prompt atau Terminal
- Navigasi ke direktori yang diinginkan
- Jalankan perintah:
dart create halo - Masuk ke direktori project:
cd halo - Jalankan project:
dart run
Struktur Project Dart:
- bin/ - Berisi file executable
- lib/ - Berisi source code utama
- test/ - Berisi file testing
- pubspec.yaml - File konfigurasi project dan dependencies
Dasar-dasar Pemrograman Dart
List:
// Membuat list
List fruits = ['Apel', 'Alpukat', 'Nanas', 'Mangga', 'Pisang'];
print(fruits.toString());
// Manipulasi list
fruits.add('Jeruk');
fruits.remove('Alpukat');
fruits[0] = 'Semangka';
fruits.sort();
print(fruits.length);
print(fruits.contains('Mangga'));
Set:
// Membuat set
Set animals = {'Kucing', 'Anjing', 'Kelinci', 'Burung'};
print(animals.toString());
// Manipulasi set
animals.add('Ikan');
animals.remove('Kelinci');
print(animals.length);
print(animals.contains('Anjing'));
Map:
// Membuat map
Map productPrices = {
'Laptop': '10.000.000',
'Mouse': '200.000',
'Keyboard': '500.000',
'Monitor': '2.000.000'
};
// Manipulasi map
productPrices['Printer'] = '1.500.000';
productPrices.remove('Mouse');
productPrices['Laptop'] = '9.500.000';
print(productPrices.length);
print(productPrices.containsKey('Keyboard'));
Perulangan:
// For-in loop
for (var fruit in fruits) {
print(fruit);
}
// For loop tradisional
for (var i = 0; i < fruits.length; i++) {
print(fruits[i]);
}
// ForEach untuk map
productPrices.forEach((key, value) {
print('$key: $value');
});
Pemrograman Berorientasi Objek (OOP) dalam Dart
Membuat Class dan Object:
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.');
}
}
// Membuat object
void main() {
var car1 = Car();
car1.color = 'Red';
car1.brand = 'Toyota';
car1.year = 2020;
car1.drive();
car1.honk();
}
Inheritance (Pewarisan):
class Animal {
void eat() {
print('The animal is eating.');
}
}
class Cat extends Animal {
void meow() {
print('The cat is meowing.');
}
}
void main() {
Cat cat1 = Cat();
cat1.eat(); // Method dari parent class
cat1.meow(); // Method dari child class
}
Tugas: Aplikasi Penghitung Luas dan Volume
Versi Procedural
Berikut adalah implementasi aplikasi penghitung luas dan volume dengan pendekatan procedural:
import 'dart:io';
import 'dart:math';
/* Fungsi Bangun Datar */
// luas Persegi
void hitungLuasPersegi() {
stdout.write("Masukkan sisi persegi: ");
double sisi = double.parse(stdin.readLineSync()!);
double luas = sisi * sisi;
print("Luas Persegi : $luas");
}
// Luas Persegi Panjang
void hitungLuasPersegiPanjang() {
stdout.write("Masukkan panjang persegi panjang: ");
double panjang = double.parse(stdin.readLineSync()!);
stdout.write("Masukkan lebar persegi panjang: ");
double lebar = double.parse(stdin.readLineSync()!);
double luas = panjang * lebar;
print("Luas Persegi Panjang : $luas");
}
// Luas Segitiga
void hitungLuasSegitiga() {
stdout.write("Masukkan alas segitiga: ");
double alas = double.parse(stdin.readLineSync()!);
stdout.write("Masukkan tinggi segitiga: ");
double tinggi = double.parse(stdin.readLineSync()!);
double luas = 0.5 * alas * tinggi;
print("Luas Segitiga : $luas");
}
// Luas Lingkaran
void hitungLuasLingkaran() {
stdout.write("Masukkan jari2 lingkaran: ");
double r = double.parse(stdin.readLineSync()!);
double luas = pi * r * r;
print("Luas Lingkaran : $luas");
}
/*Fungsi Bangun Ruang */
// Volume Kubus
void hitungVolumeKubus() {
stdout.write("Masukkan sisi kubus: ");
double sisi = double.parse(stdin.readLineSync()!);
double volume = pow(sisi, 3).toDouble();
print("Volume Kubus = $volume");
}
// Volume Balok
void hitungVolumeBalok() {
stdout.write("Masukkan panjang balok: ");
double panjang = double.parse(stdin.readLineSync()!);
stdout.write("Masukkan lebar balok: ");
double lebar = double.parse(stdin.readLineSync()!);
stdout.write("Masukkan tinggi balok: ");
double tinggi = double.parse(stdin.readLineSync()!);
double volume = panjang * lebar * tinggi;
print("Volume Balok = $volume");
}
// Volume Prisma Segitiga
void hitungVolumePrismaSegitiga() {
stdout.write("Masukkan alas segitiga: ");
double a = double.parse(stdin.readLineSync()!);
stdout.write("Masukkan tinggi segitiga: ");
double tA = double.parse(stdin.readLineSync()!);
stdout.write("Masukkan tinggi prisma: ");
double tP = double.parse(stdin.readLineSync()!);
double luasAlas = 0.5 * a * tA;
double volume = luasAlas * tP;
print("Volume Prisma Segitiga = $volume");
}
// Volume Limas
void hitungVolumeLimas() {
stdout.write("Masukkan panjang alas: ");
double p = double.parse(stdin.readLineSync()!);
stdout.write("Masukkan lebar alas: ");
double l = double.parse(stdin.readLineSync()!);
stdout.write("Masukkan tinggi limas: ");
double t = double.parse(stdin.readLineSync()!);
double luasAlas = p * l;
double volume = (luasAlas * t) / 3;
print("Volume Limas = $volume");
}
/* Dashboard Menu Utama */
void main() {
while (true) {
print("\n=== Aplikasi Hitung Bangun ===");
print("1. Bangun Datar");
print("2. Bangun Ruang");
print("3. Keluar");
stdout.write("Pilih menu: ");
String? pilihan = stdin.readLineSync();
switch (pilihan) {
case '1':
menuBangunDatar();
break;
case '2':
menuBangunRuang();
break;
case '3':
print("Terimakasih sudah menggunakan aplikasi ini!");
exit(0);
default:
print("Pilihan tidak valid!");
}
}
}
// Sub Menu Bangun Datar
void menuBangunDatar() {
while (true) {
print("\n=== Menu Bangun Datar ===");
print("1. Luas Persegi");
print("2. Luas Persegi Panjang");
print("3. Luas Segitiga");
print("4. Luas Lingkaran");
print("0. Kembali");
stdout.write("Pilih menu: ");
String? pilihan = stdin.readLineSync();
switch (pilihan) {
case '1':
hitungLuasPersegi();
break;
case '2':
hitungLuasPersegiPanjang();
break;
case '3':
hitungLuasSegitiga();
break;
case '4':
hitungLuasLingkaran();
break;
case '0':
return;
default:
print("Pilihan tidak valid!");
}
}
}
// Sub Menu Bangun Ruang
void menuBangunRuang() {
while (true) {
print("\n=== Menu Bangun Ruang ===");
print("1. Volume Kubus");
print("2. Volume Balok");
print("3. Volume Prisma Segitiga");
print("4. Volume Limas");
print("0. Kembali");
stdout.write("Pilih menu: ");
String? pilihan = stdin.readLineSync();
switch (pilihan) {
case '1':
hitungVolumeKubus();
break;
case '2':
hitungVolumeBalok();
break;
case '3':
hitungVolumePrismaSegitiga();
break;
case '4':
hitungVolumeLimas();
break;
case '0':
return;
default:
print("Pilihan tidak valid!");
}
}
}
Versi OOP
Berikut adalah implementasi aplikasi penghitung luas dan volume dengan pendekatan OOP:
Untuk link githubnya yaitu:
import 'dart:io';
import 'dart:math';
// Abstract class
abstract class BangunDatar {
double hitungLuas();
}
abstract class BangunRuang {
double hitungVolume();
}
/* Kelas Bangun Datar */
// Kelas persegi
class Persegi extends BangunDatar {
double sisi;
Persegi(this.sisi);
@override
double hitungLuas() => sisi * sisi;
}
// Kelas persegi panjang
class PersegiPanjang extends BangunDatar {
double panjang, lebar;
PersegiPanjang(this.panjang, this.lebar);
@override
double hitungLuas() => panjang * lebar;
}
// Kelas segitiga
class Segitiga extends BangunDatar {
double alas, tinggi;
Segitiga(this.alas, this.tinggi);
@override
double hitungLuas() => 0.5 * alas * tinggi;
}
// Kelas lingkaran
class Lingkaran extends BangunDatar {
double r;
Lingkaran(this.r);
@override
double hitungLuas() => pi * r * r;
}
/* Kelas Bangun Ruang */
// Kelas Kubus
class Kubus extends BangunRuang {
double sisi;
Kubus(this.sisi);
@override
double hitungVolume() => pow(sisi, 3).toDouble();
}
// Kelas Balok
class Balok extends BangunRuang {
double panjang, lebar, tinggi;
Balok(this.panjang, this.lebar, this.tinggi);
@override
double hitungVolume() => panjang * lebar * tinggi;
}
// Kelas Prisma Segitiga
class PrismaSegitiga extends BangunRuang {
double alas, tA, tP;
PrismaSegitiga(this.alas, this.tA, this.tP);
@override
double hitungVolume() => (0.5 * alas * tA) * tP;
}
// Kelas Limas
class Limas extends BangunRuang {
double panjangAlas, lebarAlas, tinggi;
Limas(this.panjangAlas, this.lebarAlas, this.tinggi);
@override
double hitungVolume() => (panjangAlas * lebarAlas * tinggi) / 3;
}
/* Dashboard Menu Utama */
void main() {
while (true) {
print("\n=== Aplikasi Hitung Bangun ===");
print("1. Bangun Datar");
print("2. Bangun Ruang");
print("3. Keluar");
stdout.write("Pilih menu: ");
String? pilihan = stdin.readLineSync();
switch (pilihan) {
case '1':
menuBangunDatar();
break;
case '2':
menuBangunRuang();
break;
case '3':
print("Terimakasih sudah menggunakan aplikasi ini!");
exit(0);
default:
print("Pilihan tidak valid!");
}
}
}
// Menu Bangun Datar
void menuBangunDatar() {
while (true) {
print("\n=== Menu Bangun Datar ===");
print("1. Luas Persegi");
print("2. Luas Persegi Panjang");
print("3. Luas Segitiga");
print("4. Luas Lingkaran");
print("0. Kembali");
stdout.write("Pilih menu: ");
String? pilihan = stdin.readLineSync();
switch (pilihan) {
case '1':
stdout.write("Masukkan sisi: ");
double sisi = double.parse(stdin.readLineSync()!);
var persegi = Persegi(sisi);
print("Luas Persegi = ${persegi.hitungLuas()}");
break;
case '2':
stdout.write("Masukkan panjang: ");
double p = double.parse(stdin.readLineSync()!);
stdout.write("Masukkan lebar: ");
double l = double.parse(stdin.readLineSync()!);
var persegiPanjang = PersegiPanjang(p, l);
print("Luas Persegi Panjang = ${persegiPanjang.hitungLuas()}");
break;
case '3':
stdout.write("Masukkan alas: ");
double a = double.parse(stdin.readLineSync()!);
stdout.write("Masukkan tinggi: ");
double t = double.parse(stdin.readLineSync()!);
var segitiga = Segitiga(a, t);
print("Luas Segitiga = ${segitiga.hitungLuas()}");
break;
case '4':
stdout.write("Masukkan jari-jari: ");
double r = double.parse(stdin.readLineSync()!);
var lingkaran = Lingkaran(r);
print("Luas Lingkaran = ${lingkaran.hitungLuas()}");
break;
case '0':
return;
default:
print("Pilihan tidak valid!");
}
}
}
// Menu Bangun Ruang
void menuBangunRuang() {
while (true) {
print("\n=== Menu Bangun Ruang ===");
print("1. Volume Kubus");
print("2. Volume Balok");
print("3. Volume Prisma Segitiga");
print("4. Volume Limas");
print("0. Kembali");
stdout.write("Pilih menu: ");
String? pilihan = stdin.readLineSync();
switch (pilihan) {
case '1':
stdout.write("Masukkan sisi: ");
double sisi = double.parse(stdin.readLineSync()!);
var kubus = Kubus(sisi);
print("Volume Kubus = ${kubus.hitungVolume()}");
break;
case '2':
stdout.write("Masukkan panjang: ");
double p = double.parse(stdin.readLineSync()!);
stdout.write("Masukkan lebar: ");
double l = double.parse(stdin.readLineSync()!);
stdout.write("Masukkan tinggi: ");
double t = double.parse(stdin.readLineSync()!);
var balok = Balok(p, l, t);
print("Volume Balok = ${balok.hitungVolume()}");
break;
case '3':
stdout.write("Masukkan alas: ");
double a = double.parse(stdin.readLineSync()!);
stdout.write("Masukkan tinggi alas: ");
double tA = double.parse(stdin.readLineSync()!);
stdout.write("Masukkan tinggi prisma: ");
double tP = double.parse(stdin.readLineSync()!);
var prismaSegitiga = PrismaSegitiga(a, tA, tP);
print("Volume Prisma Segitiga = ${prismaSegitiga.hitungVolume()}");
break;
case '4':
stdout.write("Masukkan panjang alas: ");
double pa = double.parse(stdin.readLineSync()!);
stdout.write("Masukkan lebar alas: ">
double la = double.parse(stdin.readLineSync()!);
stdout.write("Masukkan tinggi: ");
double t = double.parse(stdin.readLineSync()!);
var limas = Limas(pa, la, t);
print("Volume Limas = ${limas.hitungVolume()}");
break;
case '0':
return;
default:
print("Pilihan tidak valid!");
}
}
}
Kesimpulan
Dalam praktikum ini, kita telah mempelajari:
- Cara menginstall environment Dart dan Visual Studio Code
- Dasar-dasar pemrograman Dart termasuk List, Set, Map, dan perulangan
- Konsep OOP dalam Dart dengan membuat class, object, dan inheritance
- Membuat aplikasi sederhana untuk menghitung luas bangun datar dan volume bangun ruang
- Implementasi aplikasi dengan pendekatan procedural dan OOP
Pemahaman tentang dasar-dasar Dart sangat penting sebelum melanjutkan ke framework Flutter untuk pengembangan aplikasi mobile. Dengan menguasai konsep-konsep ini, kita akan lebih mudah dalam mempelajari Flutter dan membuat aplikasi mobile yang lebih kompleks.
Untuk link Praktikum dan Tugas dapat diakses pada link : https://github.com/Alone1011/2311532011-RifkiY-MobileApp.git