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
- Hubungan pewarisan:
intdandoublemewarisi darinum - Konversi string ke angka:
parse(); int mendukung parameter radix untuk menentukan basis bilangan - Konversi angka ke string:
toString(): konversi dasartoStringAsFixed(n): mempertahankan n digit desimaltoStringAsPrecision(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
encodeFull: hanya mengodekan spasi dan karakter sejenis, mempertahankan simbol URL/ : ? &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 UTCDuration: 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 targetFinalizer / NativeFinalizer: menjalankan callback ketika objek dikumpulkan GC, untuk melepaskan sumber daya nativeFinalizable: mencegah objek dikumpulkan GC sebelum waktunya
Pustaka standar utama dart:core