# Tham Khảo Nhanh TOML

*Tables, strings, numbers, dates, arrays*

> Source: TOML Specification (toml.io) · MIT

## Cú pháp

### Quy tắc cơ bản

| Command | Description |
|---------|-------------|
| `key = value` | Cặp key-value (mỗi dòng một cặp) |
| `#` | Chú thích (đến cuối dòng) |
| `Case sensitive` | Key và value phân biệt hoa thường |
| `UTF-8` | File phải là UTF-8 hợp lệ |
| `No null` | TOML không có kiểu null |

### Ví dụ tối giản

```
title = "My App"
debug = true
port = 8080
```

## Strings

### Các loại String

| Command | Description |
|---------|-------------|
| `"basic"` | String cơ bản (hỗ trợ escape) |
| `'literal'` | String literal (không escape) |
| `"""multi"""` | String cơ bản nhiều dòng |
| `'''multi'''` | String literal nhiều dòng |

### Ví dụ

```
basic = "Hello\nWorld"
literal = 'C:\Users\path'
multi = """
Line one
Line two"""
```

### Escape Sequences

| Command | Description |
|---------|-------------|
| `\n  \t  \r` | Xuống dòng, tab, carriage return |
| `\\` | Dấu gạch chéo ngược |
| `\uXXXX` | Unicode (hex 4 chữ số) |
| `\UXXXXXXXX` | Unicode (hex 8 chữ số) |

## Số & Boolean

### Các loại số

| Command | Description |
|---------|-------------|
| `42` | Số nguyên |
| `1_000_000` | Số nguyên có dấu gạch dưới |
| `0xff / 0o77 / 0b11` | Hex, octal, nhị phân |
| `3.14` | Số thực |
| `5e+22 / 1e-2` | Ký hiệu khoa học |
| `inf / nan` | Giá trị đặc biệt float |
| `true / false` | Boolean (chỉ viết thường) |

### Ví dụ

```
count = 42
price = 19.99
hex_color = 0xFF5733
enabled = true
```

## Ngày tháng

### Các loại Date & Time

| Command | Description |
|---------|-------------|
| `2026-03-26T10:30:00Z` | Date-time có offset (UTC) |
| `2026-03-26T10:30:00-05:00` | Date-time có offset (EST) |
| `2026-03-26T10:30:00` | Date-time cục bộ (không múi giờ) |
| `2026-03-26` | Ngày cục bộ |
| `10:30:00` | Giờ cục bộ |

### Ví dụ

```
created = 2026-03-26T10:30:00Z
birthday = 1990-05-15
alarm = 07:00:00
```

## Tables

### Cú pháp Table

```
[server]
host = "localhost"
port = 8080

[server.ssl]
enabled = true
cert = "/path/to/cert.pem"
```

### Mảng Tables

```
[[users]]
name = "Alice"
role = "admin"

[[users]]
name = "Bob"
role = "user"
```

### Quy tắc

| Command | Description |
|---------|-------------|
| `[name]` | Header table tiêu chuẩn |
| `[a.b.c]` | Key có dấu chấm — table lồng nhau |
| `[[name]]` | Mảng tables |
| `No redefine` | Không thể định nghĩa cùng table hai lần |

## Arrays

### Cú pháp Array

```
colors = ["red", "green", "blue"]
numbers = [1, 2, 3]
```

### Array nhiều dòng

```
hosts = [
  "alpha.example.com",
  "beta.example.com",
]
```

*Dấu phẩy cuối được phép trong mảng TOML*

### Quy tắc

| Command | Description |
|---------|-------------|
| `Same type` | Tất cả phần tử phải cùng kiểu |
| `Trailing comma` | Được phép sau phần tử cuối |
| `Newlines` | Mảng có thể trải nhiều dòng |

## Inline Tables

### Cú pháp Inline Table

```
point = { x = 1, y = 2 }
user = { name = "Alice", admin = true }
```

### Quy tắc

| Command | Description |
|---------|-------------|
| `Single line` | Phải xuất hiện trên một dòng |
| `No trailing comma` | Không cho phép dấu phẩy cuối |
| `No newlines` | Không thể trải nhiều dòng |
| `No adding keys` | Không thể thêm keys vào inline table sau |

### Inline vs Tiêu chuẩn

```
# Inline — compact, one-liners
db = { host = "localhost", port = 5432 }
# Standard — readable, extendable
[db]
host = "localhost"
port = 5432
```

## Các mẫu thường dùng

### pyproject.toml

```
[project]
name = "myapp"
version = "1.0.0"
dependencies = ["flask>=3.0"]
```

### Cargo.toml

```
[package]
name = "myapp"
version = "0.1.0"
edition = "2021"
```

### Mẹo

| Command | Description |
|---------|-------------|
| `taplo` | Bộ công cụ TOML — formatter và linter |
| `No null` | Bỏ qua key thay vì đặt null |
| `No anchors` | Không có hệ thống reference/alias như YAML |
| `Strict` | Không key trùng, không mảng kiểu hỗn hợp |
