Dasar-Dasar Pemrograman Dart


Dart adalah bahasa pemrograman yang digunakan biasanya untuk mengembangkan Aplikasi Mobile dengan flutter. Pada praktikum ini, akan dibahas konsep dasarnya.

View on GitHub

Pendahuluan

Tujuan

Tujuan praktikum ini yaitu mahasiswa menginstall kebutuhan Praktikum Aplikasi Mobile menggunakan bahasa Dart pada framework Flutter. Mahasiswa diharapkan menguasai dasar-dasar bahasa pemrograman Dart serta konsep Object-Oriented Programming (OOP) dalam Dart.

Langkah-langkah Praktikum:

Pengertian Dart

Dart adalah bahasa pemrograman berorientasi objek (OOP) yang dikembangkan oleh Google dan diperkenalkan pada tahun 2011 oleh Lars Bak dan Kasper. Dengan sintaks yang menyerupai C, Java, dan JavaScript, Dart dirancang agar mudah dipahami oleh pengembang yang sudah terbiasa dengan bahasa-bahasa tersebut.

Bahasa ini mendukung berbagai paradigma pemrograman—fungsional, imperatif, dan reflektif—serta dilengkapi fitur seperti class-based architecture, garbage collection, mixins, generics, dan type inference. Dart menawarkan performa tinggi melalui dua mode kompilasi: Just-in-Time (JIT) untuk pengembangan yang cepat dan Ahead-of-Time (AOT) untuk eksekusi yang optimal.

Sejak versi 2.12, Dart mengadopsi sound null safety, yang mencegah kesalahan null secara default, dan mulai Dart 3, semua kode wajib mematuhi prinsip ini.

Salah satu kekuatan utama Dart adalah penggunaannya sebagai bahasa inti dalam Flutter, framework open-source dari Google untuk membangun aplikasi lintas platform—Android, iOS, web, dan desktop—dengan satu basis kode. Selain Flutter, Dart juga digunakan untuk pengembangan aplikasi web (melalui kompilasi ke JavaScript atau WebAssembly), server-side, dan desktop.

Ekosistemnya didukung oleh pub.dev sebagai manajer paket, berbagai pustaka, serta alat bantu seperti DevTools dan plugin editor yang memperkaya pengalaman pengembang.

Pemasangan Dart

Perangkat yang Dibutuhkan

Instalasi Menggunakan Chocolatey (Windows)

  1. Pastikan Chocolatey sudah terinstal di komputer Anda.
  2. Buka PowerShell dengan hak akses administrator.
  3. Jalankan perintah berikut:
    choco install dart-sdk
  4. Tambahkan path Dart SDK ke Environment Variables jika diperlukan.
  5. Verifikasi instalasi dengan menjalankan:
    dart --version
Card image cap

Instalasi Melalui File ZIP

  1. Kunjungi halaman resmi Dart SDK di dart.dev/get-dart.
  2. Download file SDK dalam bentuk ZIP sesuai sistem operasi Anda.
  3. Ekstrak file ZIP ke direktori pilihan Anda, misalnya C:\tools\dart-sdk.
  4. Tambahkan path Dart SDK ke Environment Variables:
    • Buka System PropertiesEnvironment Variables
    • Edit variabel Path dan tambahkan lokasi folder bin dari Dart SDK
  5. Restart komputer jika diperlukan agar perubahan path terbaca.
  6. Verifikasi instalasi dengan perintah:
    dart --version
Card image cap

Dasar Dart

Persiapan Proyek

Download Dart SDK Card image cap

Struktur Proyek

halo/
├── bin/
│   └── halo.dart
├── pubspec.yaml
├── README.md
└── test/
    └── halo_test.dart
            
Card image cap

Contoh Kode

void main() {
  print('Halo, Dart!');
}

Tujuan Program

Program ini bertujuan untuk mendemonstrasikan manipulasi data menggunakan List, Set, dan Map dalam Dart, serta menampilkan data menggunakan berbagai teknik perulangan.

Manipulasi List

Manipulasi Set

Manipulasi Map

Perulangan

Program menggunakan dua pendekatan perulangan:

Kode Program

void main(List<String> arguments) {
  print("Hasil manipulasi list:");
  List<String> fruits = ['Apel', 'Alpukat', 'Nanas', 'Mangga', 'Pisang'];
  print(fruits.toString());

  // manipulasi list
  fruits.add('Jeruk');
  print(fruits.toString());

  fruits.remove('Alpukat');
  print(fruits.toString());

  fruits.sort();
  print(fruits.toString());

  fruits[0] = 'Semangka';
  print(fruits.toString());

  fruits.shuffle();
  print(fruits.toString());

  print(fruits.first);
  print(fruits.last);
  print(fruits.contains('Mangga'));
  print(fruits.indexOf('Pisang'));
  print(fruits.isEmpty);
  print(fruits.isNotEmpty);
  Set<String> animals = {'Kucing', 'Anjing', 'kelinci', 'Burung'};
  print(animals.toString());

  // manipulasi set
  print("Hasil 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);
  print("Hasil manipulasi map:");
  Map<String, String> 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['Laptop']);

  print(productPrices.length);
  print(productPrices.containsKey('Keyboard'));
  print(productPrices.containsValue('2.000.000'));
  print(productPrices.keys);
  print(productPrices.values);
  print(productPrices.isNotEmpty);
  print("Hasil perulangan:");
  // Cara Pertama: for-in & forEach
  for (var fruit in fruits) {
    print(fruit);
  }

  for (var animal in animals) {
    print(animal);
  }

  productPrices.forEach((key, value) {
    print('$key: $value');
  });

  // Cara Kedua: indexed access
  print("Hasil cetak")
  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)}',
    );
  }
}

Output Program

Program akan mencetak hasil manipulasi dan isi dari List, Set, dan Map ke terminal, termasuk:

Pastikan file disimpan sebagai dart_dasar.dart dan dijalankan menggunakan perintah dart run di terminal.

Card image cap Card image cap Card image cap Card image cap Card image cap

Penggunaan OOP Dart

void main(List<String> arguments) {
  //Object Oriented Programming (OOP)
  //membuat object
  var car1 = Car();
  car1.color = 'Red';
  car1.brand = 'Toyota';
  car1.year = 2020;
  car1.drive();
  car1.honk();
  print('Car 1: ${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.');
  }
}
Card image cap

Mini Laundry App

Buatlah aplikasi sederhana menggunakan bahasa pemrograman Dart dengan menerapkan konsep Object-Oriented Programming (OOP).

Ketentuan:

Pendekatan Prosedural

import 'dart:io';

void main(List<String> arguments) {
  const int hargaCuciSetrika = 6000;
  const int hargaCuci = 4000;
  const int hargaSetrika = 3000;
  int kgCuciSetrika = 0;
  int kgCuci = 0;
  int kgSetrika = 0;
  bool isRunning = true;
  while (isRunning) {
    print('\n=== Selamat Datang di Mini Laundry ===');
    print('Pilihan Menu:');
    print('1. Cuci & Setrika dengan harga $hargaCuciSetrika');
    print('2. Cuci Saja dengan harga $hargaCuci');
    print('3. Setrika Saja dengan harga $hargaSetrika');
    print('4. Keluar');
    stdout.write('Pilih menu (1-4): ');
    String? pilihan = stdin.readLineSync();
    switch (pilihan) {
      case '1':
        stdout.write('Masukkan jumlah kg: ');
        kgCuciSetrika += int.parse(stdin.readLineSync()!);

        break;
      case '2':
        stdout.write('Masukkan jumlah kg: ');
        kgCuci += int.parse(stdin.readLineSync()!);

        break;
      case '3':
        stdout.write('Masukkan jumlah kg: ');
        kgSetrika += int.parse(stdin.readLineSync()!);

        break;
      case '4':
        print('Terima kasih telah menggunakan layanan kami!');
        isRunning = false;
        continue;
      default:
        print('Pilihan tidak valid.');
        continue;
    }
    int total =
        kgCuciSetrika * hargaCuciSetrika +
        kgCuci * hargaCuci +
        kgSetrika * hargaSetrika;

    double diskon = 0;
    if (total > 100000) {
      diskon = 0.10;
    } else if (total >= 50000) {
      diskon = 0.05;
    }
    double totalCost = total - (total * diskon);
    print('\n--- Struk Sementara ---');
    print(
      'Cuci & Setrika : $kgCuciSetrika kg x $hargaCuciSetrika = ${kgCuciSetrika * hargaCuciSetrika}',
    );
    print('Cuci Saja      : $kgCuci kg x $hargaCuci = ${kgCuci * hargaCuci}');
    print(
      'Setrika Saja   : $kgSetrika kg x $hargaSetrika = ${kgSetrika * hargaSetrika}',
    );
    print('Total Sebelum Diskon: $total');
    print('Diskon: ${diskon * 100}%');
    print('Total yang Harus Dibayar: ${totalCost.toInt()}');
  }
}

Hasil Pendekatan Prosedural

Card image cap

Pendekatan OOP

import 'dart:io';

class LaundryPackage {
  String selectionKey;
  String name;
  int kgAmount = 0;
  int pricePerKg;

  // Constructor
  LaundryPackage(this.selectionKey, this.name, this.pricePerKg);
  void printOption() {
    print('$selectionKey -> $name dengan harga $pricePerKg/kg');
  }

  void increaseKg(int kg) {
    if (kg < 0) {
      print("Harus memberikan input positif!");
      return;
    }
    this.kgAmount += kg;
  }

  void displayReceipt() {
    int total = this.calculateCost();
    if (total == 0) {
      return;
    }
    print('$name : $kgAmount kg x $pricePerKg = $total');
  }

  int calculateCost() {
    return pricePerKg * kgAmount;
  }
}

void printReceipt(List<LaundryPackage> packages) {
  int total = packages.fold(0, (sum, pkg) => sum + pkg.calculateCost());

  for (var package in packages) {
    package.printOption();
  }
  if (total == 0) {
    print("Anda tidak membeli apa-apa");
  }
  double diskon = 0;
  if (total > 100000) {
    diskon = 0.10;
  } else if (total >= 50000) {
    diskon = 0.05;
  }
  double totalCost = total - (total * diskon);
  print('Total Sebelum Diskon: $total');
  print('Diskon: ${diskon * 100}%');
  print('Total yang Harus Dibayar: ${totalCost.toInt()}');
}

void main(List<String> arguments) {
  List<LaundryPackage> packages = [
    LaundryPackage('1', 'Cuci & Setrika', 6000),
    LaundryPackage('2', 'Cuci Saja', 4000),
    LaundryPackage('3', 'Setrika Saja', 3000),
  ];
  bool isRunning = true;
  while (isRunning) {
    print('\n=== Selamat Datang di Mini Laundry ===');
    print('Pilihan Menu:');
    for (var package in packages) {
      package.printOption();
    }
    print("4. Keluar");
    stdout.write('Pilih menu (1-4): ');
    String? option = stdin.readLineSync();
    if (option == "4") {
      printReceipt(packages);
      isRunning = true;
      print('\n--- Struk Akhir ---');
      printReceipt(packages);
      print("Terima kasih atas berbelanja di laundry kami");
      break;
    }
    var selected = packages.firstWhere(
      (pkg) => pkg.selectionKey == option,
      orElse: () {
        print("Pilihan invalid!");
        return LaundryPackage('', 'Invalid', 0);
      },
    );
    if (selected.selectionKey == '') {
      continue;
    }
    stdout.write('Masukkan jumlah kg: ');
    try {
      int kg = int.parse(stdin.readLineSync()!);
      selected.increaseKg(kg);
    } catch (e) {
      print('Input tidak valid. Harus berupa angka!');
    }
    print('\n--- Struk Sementara ---');
    printReceipt(packages);
  }
}

Hasil Pendekatan OOP

Card image cap

Aplikasi ini bertujuan untuk melatih pemahaman mahasiswa terhadap struktur class, method, dan logika bisnis menggunakan pendekatan OOP dalam Dart.

🔗 Lihat Repositori Proyek di GitHub saya!
Document