Apa YAML digunakake?

Format data teks liyane yaiku YAML ( Yet Another Markup Language ; mengko, YAML Ain't Markup Language ). Iki digunakake kanggo serialize obyek kanggo transmisi liwat jaringan (kaya XML lan JSON digunakake cara iki). Amarga bisa diwaca manungsa, uga digunakake kanggo nulis file konfigurasi, contone, kanggo Docker, Kubernetes, Ansible, lsp. Nalika YAML kudu disimpen ing file (contone, file konfigurasi), kita nggunakake salah siji saka loro. ekstensi: .yaml utawa .yml.

Sintaksis basa

Ing XML, kurung sudut ( <> ) digunakake kanggo nemtokake tag. Ing JSON, kita nggunakake kurung kriting ( {} ). YAML nggunakake garis anyar lan indentasi.

Data kasebut disimpen minangka pasangan kunci-nilai, ing ngendi kunci kasebut minangka senar, lan nilai kasebut bisa macem-macem jinis data (string, nomer, bener / salah, array, lsp.). Tombol ditulis tanpa tanda petik.

Ayo goleki carane informasi disimpen ing YAML:

Jinis Jawa YAML
Ongko
int number = 5
nomer: 5
Nomer pecahan
double number = 4.3
nomer: 4.3
Variabel Boolean
boolean valid = false
sah: salah
sah: ora
sah: mati

* Nilai boolean sing valid: bener/salah, ya/ora, on/off.

String
String city = "New York"
kutha: New York
City: 'New York'
kutha: "New York"

* Kabeh telung pilihan padha.

String kanthi karakter khusus
String line = "aaa\nbbb"
baris: "aaa\nbbb"
Komentar ing kode
// comment
#komentar
obyek
public class Person {
  String name = "Dennis";
  int age = 32;
}

* Kelas obyek diwenehake supaya sampeyan bisa ndeleng struktur obyek kasebut.

wong:
  jeneng: "Dennis"
  umur: 32

* Pay manungsa waé menyang indentation sadurunge atribut. Iku kudu padha kanggo kabeh atribut.

Dhaptar nilai prasaja
var ages =
    List.of(1, 3, 5, 9, 78, -5);
umur: [1, 3,5,9,78, -5]
umur:
  - 1
  - 3
  - 5
  - 9
  - 78
  - -5

* Kaloro pilihan padha.
** Saben unsur saka dhaftar ditandhani karo hyphen.

Dhaptar obyek
class Person {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}List<Person> people = List.of(
        new Person("Ian", 21),
        new Person("Marina", 25),
        new Person("Owen", 73)      );
wong:
  - jeneng: "Ian"
    umur: 21
  - jeneng: "Marina"
    umur: 25
  - jeneng: "Owen"
    umur: 73

Kaya ing Jawa, unsur dhaptar bisa dadi dhaptar, yaiku, obyek bisa dipasang ing siji liyane. Tanda hubung sing nuduhake unsur sabanjure dhaptar bisa diimbangi sacara horisontal relatif marang tombol induk, utawa dumunung langsung ing ngisor. Sing utama yaiku kabeh unsur duwe format sing padha. Iki bakal mbantu ngindhari kebingungan lan hierarki nesting sing ambigu.

umur:
  - 1
  - 3
  - 5
  - 9
  - 78
  - -5
umur:
- 1
- 3
- 5
- 9
- 78
- -5

Ana rong nuansa liyane nalika nggarap nilai teks:

  1. Teks multiline. Kita bisa nyimpen teks kaya iki:

    multilineTeks: "baris 1\nbaris 2\n....baris n"

    Nanging bakal banget ora nyenengake kanggo nyoba maca. Dadi ana | simbol (pipe), sing bisa digunakake kanggo nulis teks kanthi beda:

    multilineTeks: |
     larik 1
     larik 2
     ....
     larik n

    Sampeyan bakal setuju yen pilihan kapindho luwih trep, ta?

  2. Garis dawa. Yen sampeyan pengin tetep teks ing siji baris nanging uga pengin pas ing ruang kerja IDE kang katon, sampeyan bisa nggunakake > (luwih saka) simbol.

    singlelineText: >
     miwiti
     ...
     terus baris padha
     ...
     pungkasan

    Kabeh teks bakal dianggep minangka siji baris.

Yen sampeyan kudu nulis sawetara struktur data YAML dadi siji file, sampeyan kudu misahake karo --- (telung tanda hubung). Ing laku, ana arang perlu kanggo iki, nanging paling apik kanggo ngerti kamungkinan iki.

Tuladha dokumen YAML

Ayo nggawe sawetara struktur data Jawa (kelas) lan obyek sing cocog, lan nyoba kanggo makili obyek minangka YAML.

class Family {
   private Date weddingDate;
   private Person wife;
   private Person husband;
   private List<Person> children;

   // Getters and setters are omitted
}

class Person {
   private final String name;
   private final boolean isWoman;
   private int age;

   public Person(String name, int age, boolean isWoman) {
       this.name = name;
       this.age = age;
       this.isWoman = isWoman;
   }

// Getters and setters are omitted

}

public static void main(String[] args) {
   Person wife = new Person("Ann", 37, true);
   Person husband = new Person("Alex", 40, false);
   var children = List.of(
           new Person("Iris", 12, true),
           new Person("Olivia", 5, true)
   );
   Date weddingDate = new Date(/* some long */);

   Family family = new Family();
   family.setWeddingDate(weddingDate);
   family.setWife(wife);
   family.setHusband(husband);
   family.setChildren(children);
}

Perwakilan sing sah ing YAML:

---
nikahTanggal: 2000-12-03
bojo:
 jeneng: Ann
 umur: 37
 ikuWanita: ya
bojone:
 jeneng: Alex
 umur: 40
 ikuWanita: ora
anak:
 - jeneng: Iris
   umur: 12
   ikuWanita: bener
 - jeneng: Olivia
   umur: 5
   ikuWanita: bener
---