ป้ายกำกับ: Boolean

TOML: Tom’s Obvious Minimal LanguageTOML: Tom’s Obvious Minimal Language

Tom’s Obvious Minimal Language หรือที่เราเรียกกันติดปากว่า TOML คือภาษาสำหรับเขียนไฟล์การตั้งค่า ( Configuration file ) ที่เน้นความเรียบง่ายและอ่านง่ายสำหรับมนุษย์ ในขณะที่คอมพิวเตอร์ก็สามารถประมวลผลได้แม่นยำครับ ชื่อนี้มาจากผู้สร้างคือ Tom Preston-Werner ( หนึ่งในผู้ก่อตั้ง GitHub ) โดยเขาตั้งใจออกแบบมาให้ดีกว่า JSON ในแง่ความอ่านง่าย และมีความซับซ้อนน้อยกว่า YAML

รู้จักรูปแบบนี้ครั้งแรกตอน Stalwart mail server: reset admin password เป็นการแก้ config ที่ดูง่ายเลยสนใจมันขึ้นมาว่ามันคืออะไร แล้วก็เจออะไรที่มันต่างจากที่คาดเอาไว้

  • Initial Commit: Tom Preston-Werner ได้ทำการ Commit โค้ดครั้งแรกบน GitHub เมื่อวันที่ 24 กุมภาพันธ์ 2013 ซึ่งถือเป็นวันเกิดอย่างเป็นทางการของโปรเจกต์นี้
  • Version 1.0.0: แม้จะถูกนำไปใช้อย่างแพร่หลายในเครื่องมือดัง ๆ ( เช่น Rust’s Cargo ) มานานหลายปี แต่ตัว Spec เพิ่งจะประกาศสถานะเสถียร ( Stable ) เป็นเวอร์ชัน 1.0.0 เมื่อเดือน มกราคม 2021 นี่เองครับ
  • แรงบันดาลใจ: Tom สร้างมันขึ้นมาเพราะเขารู้สึกขัดใจกับความซับซ้อนของ YAML และความ “ไม่เป็นมิตรต่อมนุษย์” ในการเขียน Config ของ JSON เขาเลยหยิบเอาความเรียบง่ายของไฟล์ .ini มาปัดฝุ่นใหม่ให้มีมาตรฐานที่ชัดเจนขึ้น ก็ว่าทำไมมันคุ้น ๆ เพื่อนเก่านี่เอง

🛠 โครงสร้างและจุดเด่นของ TOML

TOML ถูกออกแบบมาให้ Map เข้ากับ Hash Table ( หรือ Dictionary / Objects ) ได้แบบ 1:1 โดยมีองค์ประกอบหลักดังนี้

  1. Key-Value Pairs
    ใช้เครื่องหมาย = ในการกำหนดค่า เหมือนการเขียนตัวแปรทั่วไป
    title = "TOML Example"
    enabled = true
    
  2. Tables ( Sections )
    ใช้เครื่องหมาย [ ] เพื่อแบ่งกลุ่มข้อมูล ( เหมือนส่วนหัวข้อในไฟล์ .ini )
    [database]
    server = "192.168.1.1"
    ports = [ 8000, 8001, 8002 ]
    
  3. Arrays of Tables
    ใช้ [[ ]] สำหรับสร้าง List ของ Object ซึ่งมีประโยชน์มากในการเก็บข้อมูลที่มีโครงสร้างซ้ำ ๆ
    [[products]]
    name = "Hammer"
    sku = 738594937
    
    [[products]]
    name = "Nail"
    sku = 284758393
    

เปรียบเทียบกับ Format อื่น

คุณสมบัติTOMLJSONYAML
ความอ่านง่ายสูงมาก ( คล้ายภาษาคน )ปานกลาง ( วงเล็บเยอะ )สูง ( แต่ระวังเรื่องการย่อหน้า )
ความซับซ้อนต่ำต่ำสูงมาก
Commentรองรับด้วย #ไม่รองรับรองรับด้วย #
Data Typesระบุวันที่/เวลาได้ชัดเจนจำกัดหลากหลาย

💡 ทำไมถึงควรใช้ TOML?

  • โครงสร้างชัดเจน: ใช้คู่ลำดับ Key = Value และรองรับการจัดกลุ่มข้อมูลเป็น Table [table_name] และย่อยลงไปอีก ([sub.table])
  • ลดความผิดพลาด: ต่างจาก YAML ตรงที่ TOML ไม่ซีเรียสเรื่องจำนวน Space หรือการย่อหน้า ( Indentation ) ทำให้โอกาสพังเพราะเคาะ Space ผิดมีน้อยกว่า
  • เน้นการตั้งค่าโดยเฉพาะ: เหมาะมากกับไฟล์อย่าง pyproject.toml ( Python ), Cargo.toml ( Rust ) หรือไฟล์ Config ของโปรแกรมสมัยใหม่
  • Strongly Typed: มีการระบุประเภทข้อมูลที่ชัดเจน ทั้ง String, Integer, Float, Boolean, และ Datetime
  • รองรับกว้างขวาง: มี Parser รองรับหลายภาษาโปรแกรมมิ่ง ( C, C++, Go, Java, Python, Rust ฯลฯ )

[!CAUTION] ข้อควรระวัง: แม้ TOML จะใช้ง่าย แต่ถ้าโครงสร้างข้อมูลของคุณมีความลึก ( Nested ) หลายชั้นมาก ๆ การเขียน TOML อาจจะดูเยิ่นเย้อกว่า JSON หรือ YAML ได้ครับ


อ่านเพิ่มเติม