unisbadri.com » Python Java Golang Typescript Kotlin Ruby Rust Dart PHP
Yaml

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 #

  1. Tambahkan dependensi yaml dalam berkas pubspec.yaml proyek Anda:

    dependencies:
      yaml: ^3.1.0
    
  2. 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, atau scalar 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 menjadi List 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 objek Employee.

  • 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.

« JSON
MySQL »