Formato NEON
NEON è un formato di dati strutturati leggibili dall'uomo. In Nette viene utilizzato per i file di configurazione. Viene utilizzato anche per i dati strutturati, come le impostazioni, le traduzioni delle lingue, ecc. Provatelo nella sandbox.
NEON è l'acronimo di Nette Object Notation. È meno complessa e sgraziata di XML o JSON, ma offre funzionalità simili. È molto simile a YAML. Il vantaggio principale è che NEON ha le cosiddette entità, grazie alle quali la configurazione dei servizi DI è così sexy. E permette di usare le tabulazioni per l'indentazione.
NEON è costruito da zero per essere semplice da usare.
Integrazione
- NetBeans (ha un supporto integrato)
- PhpStorm (plugin)
- Visual Studio Code(Nette Latte + Neon) o Nette per VS Code)
- Sublime Text 3 (plugin)
- Sublime Text 2 (plugin)
- VIM (plugin)
- Emacs (plugin)
- Prism.js (linguaggio integrato)
Sintassi
Un file scritto in NEON consiste solitamente in una sequenza o in una mappatura.
Mappature
La mappatura è un insieme di coppie chiave-valore, in PHP si chiamerebbe array associativo. Ogni coppia è scritta come
key: value
, è richiesto uno spazio dopo :
. Il valore può essere qualsiasi cosa: stringa, numero,
booleano, null, sequenza o altra mappatura.
In PHP, la stessa struttura sarebbe scritta come:
Questa notazione è detta a blocchi perché tutti gli elementi sono su una riga separata e hanno la stessa indentazione (nessuna in questo caso). NEON supporta anche la rappresentazione in linea per la mappatura, che è racchiusa tra parentesi, l'indentazione non gioca alcun ruolo e il separatore di ogni elemento è una virgola o una newline:
Si tratta dello stesso testo scritto su più righe (l'indentazione non ha importanza):
In alternativa, =
può essere usato al posto di :
, sia nella notazione a blocchi che in quella
inline:
Sequenze
Le sequenze sono array indicizzati in PHP. Sono scritte come righe che iniziano con il trattino -
seguito da uno
spazio. Anche in questo caso, il valore può essere qualsiasi cosa: stringa, numero, booleano, null, sequenza o altra
mappatura.
In PHP, la stessa struttura sarebbe scritta come:
Questa notazione è detta a blocchi perché tutti gli elementi sono su una riga separata e hanno la stessa indentazione (nessuna in questo caso). NEON supporta anche la rappresentazione in linea per le sequenze, che sono racchiuse tra parentesi, l'indentazione non gioca alcun ruolo e il separatore di ogni elemento è una virgola o una newline:
Si tratta della stessa scrittura su più righe (l'indentazione non ha importanza):
I trattini non possono essere usati in una rappresentazione in linea.
Combinazione
I valori delle mappature e delle sequenze possono essere altre mappature e sequenze. Il livello di rientro gioca un ruolo
importante. Nell'esempio seguente, il trattino usato per indicare gli elementi della sequenza ha un rientro maggiore rispetto al
tasto pets
, quindi gli elementi diventano il valore della prima riga:
In PHP, la stessa struttura sarebbe scritta come:
È possibile combinare la notazione a blocchi e quella in linea:
La notazione a blocchi non può più essere utilizzata all'interno di una notazione in linea, non funziona:
Nel caso precedente, abbiamo scritto una mappatura i cui elementi erano sequenze. Proviamo ora a fare il contrario e a creare una sequenza contenente delle mappature:
Non è necessario che i punti elenco siano su righe separate; possono anche essere disposti in questo modo:
Sta a voi decidere se allineare i tasti in una colonna usando spazi o tabulazioni.
Poiché PHP utilizza la stessa struttura per le mappature e le sequenze, cioè gli array, entrambi possono essere uniti. L'indentazione è la stessa questa volta:
In PHP, la stessa struttura sarebbe scritta come:
Stringhe
Le stringhe in NEON possono essere racchiuse tra apici singoli o doppi. Ma, come si può vedere, possono anche essere senza apici.
Se la stringa contiene caratteri # " ' , : = - [ ] { } ( )
che possono essere confusi con la sintassi NEON, deve
essere racchiusa tra virgolette. Si consiglia di utilizzare le virgolette singole perché non utilizzano l'escape. Se è
necessario racchiudere una virgoletta in una stringa di questo tipo, raddoppiarla:
Le virgolette doppie consentono di utilizzare le sequenze di escape per scrivere caratteri speciali utilizzando i backslash
\
. All escape sequences as in the JSON format are supported, plus \_
, ovvero uno spazio non spezzato,
cioè \u00A0
.
Ci sono altri casi in cui è necessario racchiudere le stringhe tra virgolette:
- iniziano o finiscono con spazi
- assomigliano a numeri, booleani o null
- NEON le interpreta come date
Stringhe multilinea
Una stringa multilinea inizia e termina con una tripla virgoletta su righe separate. Il rientro della prima riga viene ignorato per tutte le righe:
In PHP si scriverebbe come:
Le sequenze di escape funzionano solo per le stringhe racchiuse tra doppi apici anziché tra apostrofi:
Numeri
NEON comprende i numeri scritti nella cosiddetta notazione scientifica e anche i numeri in binario, ottale ed esadecimale:
Nulli
I null possono essere espressi in NEON utilizzando null
o non specificando un valore. Sono ammesse anche
varianti con la prima lettera maiuscola o con tutte le lettere maiuscole.
Booleani
I valori booleani sono espressi in NEON utilizzando true
/ false
o yes
/
no
. Sono ammesse anche varianti con la prima lettera maiuscola o con tutte le lettere maiuscole.
Date
NEON utilizza i seguenti formati per esprimere i dati e li converte automaticamente in oggetti
DateTimeImmutable
:
Entità
Un'entità è una struttura che assomiglia a una chiamata di funzione:
In PHP, viene analizzata come un oggetto Nette\Neon\Entity:
Le entità possono anche essere concatenate:
Che viene analizzato in PHP come segue:
All'interno delle parentesi, si applicano le regole di notazione inline utilizzate per le mappature e le sequenze, quindi può essere suddiviso in più righe e non è necessario aggiungere virgole:
Commenti
I commenti iniziano con #
e tutti i caratteri successivi a destra vengono ignorati:
NEON contro JSON
JSON è un sottoinsieme di NEON. Ogni JSON può quindi essere analizzato come NEON:
E se potessimo omettere le virgolette?
Che ne dite di parentesi e virgole?
I punti sono più leggibili?
E i commenti?
Avete trovato la sintassi NEON!