Yaml #
YAML (YAML Ain’t Markup Language) adalah format serialisasi data yang mudah dibaca dan digunakan, sering kali digunakan untuk file konfigurasi, data pertukaran antara layanan, dan penyimpanan struktur data sederhana. YAML menggunakan indentasi untuk menunjukkan level hirarki data, yang membuatnya lebih ramah bagi manusia dibandingkan dengan JSON atau XML.
Dalam Dart, YAML dapat dikelola menggunakan paket yaml
. Berikut adalah penjelasan lengkap dan mendetail mengenai cara kerja YAML dalam Dart.
Paket yaml
di Dart
#
Untuk bekerja dengan YAML di Dart, Anda perlu menambahkan paket yaml
ke dalam proyek Anda. Paket ini menyediakan fungsi untuk mengurai (parsing) file YAML dan mengubahnya menjadi objek Dart.
Cara Menambahkan Paket yaml
#
-
Tambahkan dependensi
yaml
dalam berkaspubspec.yaml
proyek Anda:dependencies: yaml: ^3.1.0
-
Jalankan perintah berikut untuk mengunduh paket:
dart pub get
Menguraikan (Parsing) YAML di Dart #
Setelah menambahkan paket yaml
, Anda dapat mulai menguraikan data YAML menjadi objek Dart.
Contoh: Menguraikan YAML Sederhana
import 'package:yaml/yaml.dart';
void main() {
var yamlString = '''
name: John Doe
email: [email protected]
age: 30
isAdmin: true
''';
var doc = loadYaml(yamlString);
print('Name: ${doc['name']}');
print('Email: ${doc['email']}');
}
Penjelasan:
-
loadYaml: Fungsi ini mengurai string YAML menjadi objek Dart. Objek yang dihasilkan bisa berupa
Map
,List
, atauscalar
tergantung pada struktur YAML. -
Output:
Name: John Doe Email: [email protected]
Mengelola YAML dengan Struktur Kompleks #
YAML sering kali digunakan untuk menyimpan data dengan struktur yang lebih kompleks, seperti daftar (list), objek yang bersarang (nested objects), dan peta (maps).
Contoh: Parsing YAML dengan Struktur Kompleks
import 'package:yaml/yaml.dart';
void main() {
var yamlString = '''
company: Example Corp
employees:
- name: John Doe
email: [email protected]
- name: Jane Smith
email: [email protected]
''';
var doc = loadYaml(yamlString);
print('Company: ${doc['company']}');
print('Employees:');
for (var employee in doc['employees']) {
print('Name: ${employee['name']}, Email: ${employee['email']}');
}
}
Penjelasan:
-
List dalam YAML: Ditunjukkan dengan tanda
-
sebelum setiap item, yang diurai menjadiList
dalam Dart. -
Map dalam YAML: Ditunjukkan dengan pasangan kunci-nilai, diurai menjadi
Map
dalam Dart. -
Output:
Company: Example Corp Employees: Name: John Doe, Email: [email protected] Name: Jane Smith, Email: [email protected]
Mengubah YAML menjadi Struktur Data Kustom #
Jika Anda bekerja dengan objek Dart kustom (custom class), Anda mungkin perlu mengonversi YAML yang diurai menjadi objek dari kelas tersebut.
Contoh: Mengonversi YAML ke Kelas Kustom
import 'package:yaml/yaml.dart';
class Employee {
String name;
String email;
Employee({required this.name, required this.email});
factory Employee.fromYaml(Map<String, dynamic> yaml) {
return Employee(
name: yaml['name'],
email: yaml['email'],
);
}
}
void main() {
var yamlString = '''
employees:
- name: John Doe
email: [email protected]
- name: Jane Smith
email: [email protected]
''';
var doc = loadYaml(yamlString);
var employees = (doc['employees'] as YamlList).map((e) => Employee.fromYaml(e)).toList();
for (var employee in employees) {
print('Name: ${employee.name}, Email: ${employee.email}');
}
}
Penjelasan:
-
fromYaml: Konstruktor pabrik yang mengonversi
Map
hasil parsing YAML menjadi objekEmployee
. -
YamlList: Tipe data yang dihasilkan dari parsing YAML yang mewakili daftar.
-
Output:
Name: John Doe, Email: [email protected] Name: Jane Smith, Email: [email protected]
Menangani Kesalahan Parsing #
Ketika bekerja dengan file YAML, mungkin saja terjadi kesalahan saat parsing jika format YAML tidak sesuai dengan ekspektasi.
Contoh: Menangani Kesalahan Parsing
import 'package:yaml/yaml.dart';
void main() {
var invalidYamlString = '''
name: John Doe
email: [email protected]
age: 30
isAdmin: true
- invalid list item
''';
try {
var doc = loadYaml(invalidYamlString);
} catch (e) {
print('Terjadi kesalahan saat parsing YAML: $e');
}
}
Penjelasan:
- Try-Catch: Blok try-catch digunakan untuk menangkap kesalahan yang mungkin terjadi saat mengurai YAML yang tidak valid.
- Output: Menampilkan pesan kesalahan jika terjadi masalah saat parsing YAML.
Memuat YAML dari File #
Sering kali, data YAML disimpan dalam file eksternal. Anda bisa memuat dan mengurai file YAML di Dart dengan mudah.
Contoh: Memuat YAML dari File
import 'dart:io';
import 'package:yaml/yaml.dart';
void main() async {
var file = File('config.yaml');
var yamlString = await file.readAsString();
var doc = loadYaml(yamlString);
print('Server: ${doc['server']}');
print('Port: ${doc['port']}');
}
Penjelasan:
-
File.readAsString: Membaca isi file
config.yaml
sebagai string. -
loadYaml: Mengurai string YAML yang dibaca dari file menjadi objek Dart.
-
Output:
Server: localhost Port: 8080
Menggunakan Fitur Lanjutan YAML #
YAML mendukung berbagai fitur lanjutan seperti referensi, merge key, dan anchors. Namun, fitur-fitur ini tidak selalu diimplementasikan dalam semua parser YAML, termasuk yaml
dalam Dart.
Contoh: Referensi dan Anchors dalam YAML
YAML mendukung penggunaan referensi untuk menghindari duplikasi data. Namun, fitur ini tidak didukung oleh parser yaml
di Dart.
base: &base
name: John Doe
email: [email protected]
admin:
<<: *base
role: admin
Parser yaml
Dart tidak mendukung ini, dan Anda perlu mengimplementasikan sendiri pengelolaan referensi jika diperlukan.
Kesimpulan #
YAML adalah format yang kuat dan mudah dibaca untuk menyimpan dan mentransfer data. Dalam Dart, paket yaml
menyediakan fungsi yang kuat untuk menguraikan data YAML menjadi objek Dart, termasuk dukungan untuk struktur data yang kompleks seperti daftar, peta, dan objek bersarang.
Meskipun yaml
di Dart sangat berguna untuk kebanyakan kasus, penting untuk memperhatikan keterbatasan dalam mendukung fitur lanjutan YAML seperti anchors dan merge key. Namun, untuk sebagian besar aplikasi, yaml
di Dart sudah mencukupi untuk menangani file konfigurasi dan data serialisasi yang sederhana hingga sedang.
Dengan pemahaman ini, Anda dapat dengan lebih percaya diri menggunakan YAML dalam proyek Dart Anda, baik untuk keperluan konfigurasi, penyimpanan data, atau pertukaran data antar sistem.