Pustaka standar utama dart:core

Pustaka dart:core adalah pustaka standar utama Dart, diimpor secara implisit dan otomatis. Pustaka ini menyediakan fitur dasar yang penting untuk bahasa pemrograman. Berikut adalah fungsi utama dan contoh kode yang dikelompokkan berdasarkan modul.

Pengembang tidak perlu menulis perintah import apa pun; pustaka ini dimuat secara otomatis secara bawaan.

I. Output ke konsol

Fungsi tingkat atas print(): secara otomatis memanggil metode toString() dari objek untuk menampilkan teks.

void main() {
  var tea = "milk tea";
  print(tea);
  print('I drink $tea.');
}Code language: Dart (dart)

II. Tipe numerik: num / int / double

  1. Hubungan pewarisan: int dan double mewarisi dari num
  2. Konversi string ke angka: parse(); int mendukung parameter radix untuk menentukan basis bilangan
  3. Konversi angka ke string:
  • toString(): konversi dasar
  • toStringAsFixed(n): mempertahankan n digit desimal
  • toStringAsPrecision(n): n digit signifikan
void main() {
  // Ubah string menjadi angka
  assert(int.parse('42') == 42);
  assert(int.parse('42', radix:16) == 66);
  assert(double.parse('0.5') == 0.5);

  // Ubah angka menjadi string
  assert(123.456.toStringAsFixed(2) == '123.46');
  assert(123.456.toStringAsPrecision(2) == '1.2e+2');
}

III. String & Ekspresi Reguler RegExp

  • Objek String bersifat tidak dapat diubah (semua metode pengubahan menghasilkan string baru); menyimpan unit kode UTF-16
  • Metode umum: pencarian, substring, pemisahan, perubahan huruf besar/kecil, penghapusan spasi
void main() {
  var str = 'Never odd or even';
  // Pemeriksaan
  assert(str.contains('odd'));
  assert(str.startsWith('Never'));
  assert(str.endsWith('even'));
  assert(str.indexOf('odd') == 6);

  // Substring dan pemisahan
  assert(str.substring(6,9) == 'odd');
  var parts = 'a b c'.split(' ');

  // Hapus spasi dan cek kekosongan
  assert('  abc  '.trim() == 'abc');
  assert(''.isEmpty);
  assert('  '.isNotEmpty);

  // Ubah menjadi huruf kapital
  assert('dart'.toUpperCase() == 'DART');

  // Gunakan StringBuffer untuk penggabungan string (performa lebih baik)
  var sb = StringBuffer();
  sb.write('Hello ');
  sb.writeAll(['A','B','C'], ',');
  print(sb.toString());
}

Ekspresi Reguler RegExp

void main() {
  var reg = RegExp(r'\d+'); // Cocok dengan urutan angka
  var text = 'llamas live 15 to 20 years';

  assert(reg.hasMatch(text));
  // Telusuri semua kecocokan global
  for(var m in reg.allMatches(text)){
    print(m.group(0));
  }
  // Ganti bagian yang cocok
  var res = text.replaceAll(reg, 'XX');
  print(res);
}

Catatan: Satu unit kode tidak selalu sama dengan satu karakter tampilan. Untuk karakter Unicode kompleks (kombinasi emoji), gunakan paket eksternal characters.

IV. Koleksi (List / Set / Map)

1. List: berurutan, mengizinkan duplikat, akses melalui indeks

void main() {
  var fruits = ['apple','orange'];
  fruits.add('kiwi');
  fruits.addAll(['grape']);
  fruits.removeAt(0);
  fruits.sort((a,b)=>a.compareTo(b)); // Urutkan elemen

  // Pembatasan tipe generik
  var strList = <String>[];
}

2. Set: tidak berurutan, elemen unik, tidak ada akses indeks

void main() {
  var set = <String>{};
  set.addAll(['gold','xenon']);
  set.add('gold'); // Penambahan duplikat tidak berpengaruh
  assert(set.contains('xenon'));

  // Operasi irisan himpunan
  var set2 = Set.from(['xenon','argon']);
  var inter = set.intersection(set2);
}

3. Map: kumpulan pasangan kunci-nilai; kunci bersifat unik

void main() {
  var map = {54: 'xenon'};
  print(map[54]);
  assert(map.containsKey(54));
  map.remove(54);

  // Tetapkan nilai hanya jika kunci belum ada
  map.putIfAbsent('name', () => 'Dart');

  // Iterasi semua entri
  map.forEach((k,v)=>print('$k:$v'));
}

4. Operasi generik Iterable (List dan Set mengimplementasikan Iterable)

Metode tingkat tinggi umum: forEach, map, where, any, every

void main() {
  var list = ['green','black','chamomile'];
  list.forEach(print);

  // map dievaluasi secara malas; toList menjalankan evaluasi langsung
  var upperList = list.map((e)=>e.toUpperCase()).toList();

  // Filter elemen
  var filter = list.where((e)=>e == 'chamomile');
  assert(list.any((e)=>e == 'chamomile'));
  assert(!list.every((e)=>e.contains('tea')));
}

V. Pengelolaan URI (Uri)

Digunakan untuk encoding, decoding, penguraian dan pembuatan URL

  1. encodeFull: hanya mengodekan spasi dan karakter sejenis, mempertahankan simbol URL / : ? &
  2. encodeComponent: meloloskan semua karakter khusus (cocok untuk nilai parameter URL)
void main() {
  // Urai url
  var uri = Uri.parse('https://example.org:8080/foo?lang=dart#frag');
  print(uri.scheme);
  print(uri.host);
  print(uri.queryParameters);

  // Bangun url
  var newUri = Uri.https('example.org','/foo', {'lang':'dart'});
}

VI. Tanggal dan Waktu DateTime & Duration

  • DateTime: titik waktu, mendukung waktu lokal dan UTC
  • Duration: interval waktu, untuk penjumlahan/pengurangan waktu dan menghitung selisih
void main() {
  var now = DateTime.now();
  var y2k = DateTime.utc(2000);

  // Penjumlahan dan pengurangan waktu
  var nextYear = y2k.add(const Duration(days:366));
  var diff = nextYear.difference(y2k);
  print(diff.inDays);

  // Timestamp (milidetik sejak zaman Unix 1970-01-01 UTC)
  print(y2k.millisecondsSinceEpoch);
}

Peringatan: Pergeseran waktu berbasis hari dapat menimbulkan kesalahan akibat perubahan waktu musim panas. Sebaiknya gunakan zona waktu UTC.

VII. Antarmuka dan Kelas Dasar yang Berguna

1. Comparable: memungkinkan perbandingan objek untuk pengurutan

class Line implements Comparable<Line> {
  final int length;
  const Line(this.length);
  @override
  int compareTo(Line other) => length - other.length;
}

2. Kunci khusus untuk Map: ganti implementasi == dan hashCode

Aturan: Objek yang sama harus memiliki hashCode yang sama

class Person {
  final String first, last;
  Person(this.first,this.last);

  @override
  int get hashCode => Object.hash(first, last);

  @override
  bool operator ==(Object other) =>
      other is Person && other.first == first && other.last == other.last;
}
  • 3. Iterable + Iterator

Mengimplementasikan Iterable memungkinkan penggunaan perulangan for-in dengan logika penelusuran buatan sendiri.

VIII. Penanganan Pengecualian

  • Error: kegagalan fatal, umumnya tidak dapat ditangkap (contoh: NoSuchMethodError)
  • Exception: anomali yang dapat diprediksi dan dapat ditangkap; dapat membuat pengecualian kustom
class FooException implements Exception {
  final String? msg;
  const FooException([this.msg]);
  @override
  String toString() => msg ?? 'FooException';
}

IX. Referensi Lemah dan Finalizer

  • WeakReference: referensi lemah, tidak menghalangi garbage collector membebaskan objek target
  • Finalizer / NativeFinalizer: menjalankan callback ketika objek dikumpulkan GC, untuk melepaskan sumber daya native
  • Finalizable: mencegah objek dikumpulkan GC sebelum waktunya

Pustaka standar utama dart:core

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *