# Riferimento Rapido TOML

*Tabelle, stringhe, numeri, date, array*

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

## Sintassi

### Regole di Base

| Command | Description |
|---------|-------------|
| `key = value` | Coppia chiave-valore (una per riga) |
| `#` | Commento (fino a fine riga) |
| `Case sensitive` | Chiavi e valori distinguono le maiuscole |
| `UTF-8` | I file devono essere UTF-8 valido |
| `No null` | TOML non ha il tipo null |

### Esempio Minimale

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

## Stringhe

### Tipi di Stringa

| Command | Description |
|---------|-------------|
| `"basic"` | Stringa base (supporta escape) |
| `'literal'` | Stringa letterale (nessun escape) |
| `"""multi"""` | Stringa base multi-riga |
| `'''multi'''` | Stringa letterale multi-riga |

### Esempi

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

### Sequenze di Escape

| Command | Description |
|---------|-------------|
| `\n  \t  \r` | A capo, tabulazione, ritorno a capo |
| `\\` | Backslash |
| `\uXXXX` | Unicode (4 cifre esadecimali) |
| `\UXXXXXXXX` | Unicode (8 cifre esadecimali) |

## Numeri e Booleani

### Tipi Numerici

| Command | Description |
|---------|-------------|
| `42` | Intero |
| `1_000_000` | Intero con caratteri di separazione |
| `0xff / 0o77 / 0b11` | Esadecimale, ottale, binario |
| `3.14` | Numero in virgola mobile |
| `5e+22 / 1e-2` | Notazione scientifica |
| `inf / nan` | Valori float speciali |
| `true / false` | Booleano (solo minuscolo) |

### Esempi

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

## Date

### Tipi di Data e Ora

| Command | Description |
|---------|-------------|
| `2026-03-26T10:30:00Z` | Data-ora con offset (UTC) |
| `2026-03-26T10:30:00-05:00` | Data-ora con offset (EST) |
| `2026-03-26T10:30:00` | Data-ora locale (senza fuso orario) |
| `2026-03-26` | Data locale |
| `10:30:00` | Ora locale |

### Esempi

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

## Tabelle

### Sintassi delle Tabelle

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

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

### Array di Tabelle

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

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

### Regole

| Command | Description |
|---------|-------------|
| `[name]` | Intestazione di tabella standard |
| `[a.b.c]` | Chiave puntata — tabella annidata |
| `[[name]]` | Array di tabelle |
| `No redefine` | Non si può definire la stessa tabella due volte |

## Array

### Sintassi degli Array

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

### Array Multi-riga

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

*La virgola finale è permessa negli array TOML*

### Regole

| Command | Description |
|---------|-------------|
| `Same type` | Tutti gli elementi devono essere dello stesso tipo |
| `Trailing comma` | Permessa dopo l'ultimo elemento |
| `Newlines` | Gli array possono estendersi su più righe |

## Tabelle Inline

### Sintassi delle Tabelle Inline

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

### Regole

| Command | Description |
|---------|-------------|
| `Single line` | Deve stare su una sola riga |
| `No trailing comma` | La virgola finale non è permessa |
| `No newlines` | Non può estendersi su più righe |
| `No adding keys` | Non si possono aggiungere chiavi alla tabella inline in seguito |

### Inline vs Standard

```
# Inline — compatto, su una riga
db = { host = "localhost", port = 5432 }
# Standard — leggibile, estendibile
[db]
host = "localhost"
port = 5432
```

## Pattern Comuni

### pyproject.toml

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

### Cargo.toml

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

### Suggerimenti

| Command | Description |
|---------|-------------|
| `taplo` | Toolkit TOML — formattatore e linter |
| `No null` | Ometti la chiave invece di impostare null |
| `No anchors` | A differenza di YAML, nessun sistema di riferimenti/alias |
| `Strict` | Nessuna chiave duplicata, nessun array di tipo misto |
