Bodková (tečková) syntax poľa v Latte

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Cifro
Člen | 245
+
0
-

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
+
0
-

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

na1k
Člen | 288
+
0
-

Původní topic je zde

Nápad se mi líbí, ovšem je třeba člověk, co to napíše a pošle pull :-p

Btw. co přesun do RFC / Feature Requests?

sodae
Nette Evangelist | 250
+
0
-

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
+
0
-

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
+
0
-

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}{block name}

paranoiq
Člen | 392
+
0
-

já bych to jako zjednodušení uvítal, jenže jsou tu dva problémy:

  1. v Latte lze používat PHP výrazy a tedy i operátor „.“. když napíšu {$a.b} jde o prvek b objektu a, nebo zřetězení proměnné a a konstanty b?
  2. 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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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.