NEON formátum
A NEON egy ember által olvasható strukturált adatformátum. A Nette-ben konfigurációs fájlokra használják. Strukturált adatok, például beállítások, nyelvi fordítások stb. tárolására is használják. Próbálja ki a homokozóban.
A NEON a Nette Object Notation rövidítése. Kevésbé bonyolult és nehézkes, mint az XML vagy a JSON, de hasonló képességekkel rendelkezik. Nagyon hasonlít a YAML-hez. A fő előnye, hogy a NEON rendelkezik úgynevezett entitásokkal, amelyeknek köszönhetően a DI szolgáltatások konfigurálása olyan szexi. És lehetővé teszi a tabulátorokat a behúzáshoz.
A NEON az alapoktól kezdve úgy lett felépítve, hogy egyszerűen használható legyen.
Integráció
- NetBeans (beépített támogatással rendelkezik)
- PhpStorm (plugin)
- Visual Studio Code(Nette Latte + Neon) vagy Nette for VS Code)
- Sublime Text 3 (plugin)
- Sublime Text 2 (plugin)
- VIM (plugin)
- Emacs (plugin)
- Prism.js (integrált nyelv)
Szintaxis
Egy NEON-ban írt fájl általában egy szekvenciából vagy leképezésből áll.
Leképezések
A leképezés kulcs-érték párok halmaza, PHP-ben asszociatív tömbnek neveznénk. Minden pár a key: value
formában íródik, a :
után szóköz szükséges. Az érték bármi lehet: string, szám, boolean, null, szekvencia
vagy más leképezés.
PHP-ben ugyanez a struktúra a következőképpen lenne leírva:
Ezt a jelölést blokkjelölésnek nevezzük, mivel minden elem külön sorban van, és ugyanolyan behúzással rendelkezik (ebben az esetben nincs). A NEON támogatja az inline ábrázolást is a leképezéshez, amely zárójelekbe van zárva, a behúzás nem játszik szerepet, és az egyes elemek elválasztója vagy egy vessző vagy egy újsor:
Ez több sorba írva ugyanaz (a behúzás nem számít):
Alternatívaként a =
is használható a :
, mind blokkos, mind soron belüli jelölésben:
Sequences
A szekvenciák indexelt tömbök a PHP-ban. A szekvenciák a -
kötőjellel kezdődő sorok, majd egy szóköz
követi őket. Az érték itt is bármi lehet: karakterlánc, szám, boolean, null, szekvencia vagy más leképezés.
PHP-ben ugyanez a struktúra a következőképpen lenne leírva:
Ezt a jelölést blokkjelölésnek nevezzük, mivel minden elem külön sorban van, és ugyanolyan behúzással rendelkezik (ebben az esetben nincs). A NEON támogatja a sorozatok inline ábrázolását is, amely zárójelekbe van zárva, a behúzás nem játszik szerepet, és az egyes elemek elválasztója vagy egy vessző vagy egy újsor:
Ez több sorba írva ugyanaz (a behúzás nem számít):
Kötőjelek nem használhatók soron belüli ábrázolásban.
Kombináció
A leképezések és szekvenciák értékei lehetnek más leképezések és szekvenciák. A behúzás szintje nagy szerepet
játszik. A következő példában a szekvenciaelemek jelölésére használt kötőjel nagyobb behúzással rendelkezik, mint a
pets
kulcs, így az elemek az első sor értékévé válnak:
PHP-ben ugyanezt a struktúrát így írnánk le:
Lehetőség van a blokk és az inline jelölés kombinálására:
Ez már nem működik, a blokk jelölés nem használható inline jelölésen belül:
Az előző esetben egy olyan leképezést írtunk, amelynek elemei szekvenciák voltak. Most próbáljuk meg fordítva, és hozzunk létre egy leképezéseket tartalmazó szekvenciát:
Nem szükséges, hogy a felsoroláspontok külön sorokban legyenek; így is elhelyezhetjük őket:
Öntől függ, hogy a kulcsokat szóközökkel vagy tabulátorral igazítja-e egy oszlopba.
Mivel a PHP ugyanazt a struktúrát használja a leképezéshez és a szekvenciákhoz, azaz a tömböket, mindkettő összevonható. A behúzás ezúttal is ugyanaz:
PHP-ben ugyanazt a struktúrát így írnánk:
Strings
A karakterláncok a NEON-ban szimpla vagy dupla idézőjelek közé zárhatók. De mint láthatjuk, idézőjelek nélkül is lehetnek.
Ha a karakterlánc karaktereket tartalmaz # " ' , : = - [ ] { } ( )
amelyek összetéveszthetők a NEON
szintaxissal, akkor idézőjelek közé kell zárni. Javasoljuk az egyszeres idézőjelek használatát, mivel ezek nem
használnak eszkábálást. Ha ilyen karakterláncba idézőjelet kell zárni, akkor duplázza meg azt:
A kettős idézőjelek lehetővé teszik, hogy escape szekvenciákat használjon speciális karakterek írásához, a
backslashes \
. All escape sequences as in the JSON format are supported, plus \_
, ami egy nem szaggatott
szóköz, azaz \u00A0
.
Vannak más esetek is, amikor karakterláncokat kell idézőjelekbe zárni:
- szóközzel kezdődnek vagy végződnek
- számoknak, booléknak vagy nullának tűnnek
- A NEON dátumként értelmezné őket
Többsoros karakterláncok
A többsoros karakterlánc háromszoros idézőjellel kezdődik és végződik külön sorokban. Az első sor behúzását az összes sor esetében figyelmen kívül hagyjuk:
PHP-ben ugyanezt így írnánk:
A szekvenciák csak aposztrófok helyett dupla idézőjelekbe zárt karakterláncok esetében működnek:
Számok
A NEON megérti az úgynevezett tudományos jelöléssel írt számokat, valamint a bináris, oktális és hexadecimális számokat is:
Nullák
A null a NEON-ban a null
használatával vagy érték meg nem adásával fejezhető ki. A nagy kezdőbetűvel
vagy csupa nagybetűvel írt változatok is megengedettek.
Booleans
A Boolean értékeket a NEON-ban a true
/ false
vagy a yes
/ no
segítségével fejezzük ki. A nagy kezdőbetűvel vagy csupa nagybetűvel írt változatok is megengedettek.
Dátumok
A NEON a következő formátumokat használja az adatok kifejezésére, és automatikusan átalakítja őket
DateTimeImmutable
objektumokká:
Entitások
Az entitás olyan struktúra, amely hasonlít egy függvényhívásra:
A PHP-ben objektumként elemzik Nette\Neon\Entity:
Az entitások láncolhatók is:
Amit a PHP a következőképpen elemez:
A zárójeleken belül a leképezéshez és a szekvenciákhoz használt inline jelölés szabályai érvényesek, így több sorra osztható, és nem szükséges vesszőt tenni:
Megjegyzések
A megjegyzések #
-gal kezdődnek, és a jobb oldalt következő karaktereket figyelmen kívül hagyjuk:
NEON Versus JSON
A JSON a NEON egy részhalmaza. Ezért minden JSON elemezhető NEON-ként:
Mi lenne, ha elhagyhatnánk az idézőjeleket?
Mit szólnánk a zárójelekhez és a vesszőkhöz?
A felsorolásjelek olvashatóbbak?
Mi a helyzet a megjegyzésekkel?
Megtaláltad a NEON szintaxist!