Bodková (tečková) syntax poľa v Latte
- Cifro
- Člen | 245
Otvoril by som znova diskusiu na túto tému. Páčilo by sa mi keby sa dali položky poľa zapísovať takto:
{$settings.general.bgColor}
namiesto toho
{$settings['general']['bgColor']}
respektíve by to mohlo fungovať aj pre objekty
{$settings.general.bgColor}
namiesto toho
{$settings->general->bgColor}
Výhody:
- Je to čitateľnejšie
- Oveľa menej sa musí písať. Netreba písať všetky tie [' '], a ľahko sa dá urobiť preklep a jednu zatvorku alebo uvodzovku vynechať
- Zovšeobecnenie. Takýto zápis je špecifický pre PHP, ale Latte je šablónovcí jazyk tak nemusí kopírovať syntax PHP. Pretože nie každý kóder šablóny ovláda to že „->“ je prístup k vlastnosiam objektu a „['']“ je prístup k prvkom poľa
Potešilo by ma keby sa to objavilo v Latte :)
- Filip Procházka
- Moderator | 4668
AFAIK si s tím David experimentálně hrál a říkal, že mimo jiné to
taky umí optimalizovat rychlost přístupu k proměnným. Díky ukládání
jednotlivých kroků ({$settings.general}
,
{$settings.general.bgColor}
, ..) do lokálních proměnných.
Notace se mi líbí. Někdo by mohl poslat pull :P
- sodae
- Nette Evangelist | 250
Cifro: pěkný, ale mít stejné syntaxe je problém z prostého důvodu. Vem si třídu, která implemnentuje ArrayAccess, například Presenter. Chceš tímpádem po něm property nebo komponentu?
Nápad se mi líbí, jen to chce dořešit rozdílné syntaxe při volání. (Třeba objekt dvojtečkou.)
- nanuqcz
- Člen | 822
Sry za skepticismus, ale mě se to moc nelíbí. Od začátku používání Nette šablon jsem byl nadšený z toho, že syntaxe latte vlastně kopíruje PHP syntaxi a člověk se tak nemusí učit nic navíc. Myslím že i David tuhle vlastnost v některém článku o Nette šablonách chválil.
Navíc je to podle mě matoucí, tečka se často v programovacích
jazycích používá pro objekty, tady se bude používat pro pole. A pokud by
to umělo magicky obě varianty (tečka by zastupovala ->
i
['']
)? Už vidím ty nechápavé dotazy na fóru. Vůbec mi to
nepřijde jako čistý návrh :-)
- Cifro
- Člen | 245
Původní topic je zde
No keď to ide vo Twigu tak prečo by to nešlo aj v Latte? Ako píše Honza v tom odkazovanom topicu, Twigu je jedno či je to pole, vlastnosti objektu alebo gettery. Dá sa to urobiť. Ale ja si na to netrúfnem :/
A to že sa treba naučiť niečo nové tak to nevadí podľa mňa. To nie sú 100 stranové skripta ale iba jeden malý detail, že môžem nahradiť hranaté zatvorky za bodku. To si zapamätá každý si myslím.
Šlo by o rozšírenie Latte, čiže pôvodná syntax by stale fungovala.
I teraz takto napr. funguje {block #name}
a {block name}
- paranoiq
- Člen | 392
já bych to jako zjednodušení uvítal, jenže jsou tu dva problémy:
- v Latte lze používat PHP výrazy a tedy i operátor „.“. když
napíšu
{$a.b}
jde o prvekb
objektua
, nebo zřetězení proměnnéa
a konstantyb
? - nelze to vyhodnocovat při překladu šablony, takže to bude zbytečně zpomalovat
Editoval paranoiq (3. 8. 2011 15:35)
- David Grudl
- Nette Core | 8228
V Latte je možné psát i bez uvozovek:
{$settings[general][bgColor]}
No keď to ide vo Twigu tak prečo by to nešlo aj v Latte? Ako píše Honza v tom odkazovanom topicu, Twigu je jedno či je to pole, vlastnosti objektu alebo gettery. Dá sa to urobiť.
Samozřejmě by to šlo, ale argument, že je něco ve Twigu, ještě
neznamená, že to není chyba. Implementace ve Twigu bude, předpokládám,
velmi pomalá. Přidat vlastnost, která šetří jeden znak, zavádí
nejednoznačnost (co je $presenter.item
?) a citelně zpomaluje
vykreslování šablony, mi nepřipadá na první pohled zrovna rozumné.
Jak už jsem psal
dřív, teoreticky by se to dalo implementovat i tak, že by to mohlo
aplikaci naopak zrychlovat (při opakovaném přístupu k téže proměnné).
Nicméně chce to stanovit jasná pravidla, jak se má tečka chovat při
použití s ArrayAccess objektem a jak odlišit od zřetězení
$a.$b
vs $a[$b]
.
- Cifro
- Člen | 245
David Grudl napsal(a):
V Latte je možné psát i bez uvozovek:
{$settings[general][bgColor]}
Tak to som nevedel. Doplním do dokumentácie. Je to tam. Nevšimol som
si :/
Ešte ma napadlo, že kľúč v poli môže v PHP byť akýkoľvek string
aj $settings['$mykey$']
. Potom by bol problém pri bodkovej syntaxi
pretože: $settings.$mykey$
Ale pri tejto situácii by mal
vyskočiť Debugger s hláškou, že nepoužívaj exotické znaky. Síce je to
málo pravdepodobné, ale nejaký exotický developer to môže
zaniesť do kódu, a potom chudák kóder nebude vedieť čo s tým.
Editoval Cifro (4. 8. 2011 15:06)
- Caine
- Člen | 216
Sice, je to tu nějakou dobu mrtvý, ale zrovna dneska jsem se po tomhle díval, a je škoda, že to latte neumí a nejspíš ani umět nebude. Ale kdyby se snad diskuze opět oživila, tak co použít pro zřetězení tečku oblopenou mezerama „$a . $b“, tak by bylo jasný, že jde o zřetězení, zatímco „$a.$b“ přistup k indexu, metode, atp..
- Elijen
- Člen | 171
Caine napsal(a):
Sice, je to tu nějakou dobu mrtvý, ale zrovna dneska jsem se po tomhle díval, a je škoda, že to latte neumí a nejspíš ani umět nebude. Ale kdyby se snad diskuze opět oživila, tak co použít pro zřetězení tečku oblopenou mezerama „$a . $b“, tak by bylo jasný, že jde o zřetězení, zatímco „$a.$b“ přistup k indexu, metode, atp..
To by na prehlednosti opravdu moc nepridalo. Latte je imho (az na nejake drobnosti) dobre, tak jak je. Co jsem videl jine sablonovaci systemy (treba htmltmpl od iinfo, kde pouzivaji onu teckovou syntax), tak to neni nic moc zazracneho.