Latte, ukončovanie: if / ifset / ifCurrent

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
PaBi3
Bronze Partner | 62
+
0
-

Nová výnimka Unexpected macro {/if}, expecting {/ifset} in ...\Default\default.phtml:23 je naozaj hardcore.

Toto bude trvalý stav? Čo bolo zlé na obyčajnom {/if}?

Nette Framework 2.0-dev (revision 8db9547 released on 2010–11–11)

Nilp
Člen | 65
+
0
-

Makra jsou teď povinně párová.

na1k
Člen | 288
+
0
-

Proč hardcore? Dobrým zvykem je bloky uzavírat. Navíc v Latte nejde praktikovat přístup „první příkaz za ifem bez bloku tvoří jeho blok“. Pokud se ti nechce psát všechno do bloků, doporučuju zkusit n: makra ;-)

Edit: Omlouvám se, pochopil jsem to špatně. Tip na n: makra ale zůstává :)

Editoval na1k (11. 11. 2010 13:22)

Jan Tvrdík
Nette guru | 2595
+
0
-

Osobně doufám, že podpora pro {ifset $var}...{/if} bude obnovena.

Tharos
Člen | 1030
+
0
-

Já taky. Štve mě, že v současné dokumentaci se používá {ifset $var}...{/if}. Když jsem kdysi s tímto makrem přišel do styku, měl jsem tendenci jej používat stylem {ifset $var}...{/ifset}, ale pak jsem koukal, že v dokumentaci je k vidění ten kratší zápis. Tak jsem si řekl, že OK, že to teda budu používat v té zkrácené verzi, a teď abych všechno přepisoval…

David Grudl
Nette Core | 8227
+
0
-

{/ifset} se ještě dá přežít, ale {/ifCurrent} je teprve opruz :-(

(na druhou stranu, ten by šel nějak řešit automatizovaně přes n:href)

PaBi3
Bronze Partner | 62
+
0
-

Nemôžu podmienky proste dostať výnimku? Veď bezpochyby patria medzi najpoužívanejšie makrá.

Tharos
Člen | 1030
+
0
-

Pro mě to má spojitost ještě s jednou věcí, která mě na Nette šablonách s odpuštěním štve. :) Na řadě míst je velká benevolence v tom, jak lze to a to zapsat. U makra link může, ale nemusí být mezi destination a parametry čárka, klíče parametrů mohou i nemusí být v uvozovkách a podobně. Vede to k tomu, že to každý píše nějak jinak a není to jednotné. Tam je IMHO taková benevolence zbytečná, klidně bych tam tu čárku vyžadoval.

No a na místech, kde by namísto použití {/ifset} či {/ifCurrnet} mělo praktický význam použití {/if} (příjemně kratší kód), se to najednou zakazuje. Děsný… :)

Editoval Tharos (11. 11. 2010 15:19)

grey
Člen | 94
+
0
-

Tharos wrote:

Pro mě to má spojitost ještě s jednou věcí, která mě na Nette šablonách s odpuštěním štve. :) Na řadě míst je velká benevolence v tom, jak lze to a to zapsat. U makra link může, ale nemusí být mezi destination a parametry čárka, klíče parametrů mohou i nemusí být v uvozovkách a podobně. Vede to k tomu, že to každý píše nějak jinak a není to jednotné. Tam je IMHO taková benevolence zbytečná, klidně bych tam tu čárku vyžadoval.

No a na místech, kde by namísto použití {/ifset} či {/ifCurrnet} mělo praktický význam použití {/if} (příjemně kratší kód), se to najednou zakazuje. Děsný… :)

+ motherfucking 1

přesně nad tímhle jsem už párkrát přemýšlel… taky bych dal latte jasný pravidla…

David Grudl
Nette Core | 8227
+
0
-

Tak to se musím velice ohradit! Latte syntax prošla dlouhým pragmatickým vývojem a dnes (poslední revize) jsou její pravidla jasná, konzistentní a jednotná. Že lze něco zapsat více způsoby je docela jiná věc. To je jako se syntaxí programovacího jazyka.

Kdyby byla povinná čárka za prvním tokenem v makru link (a také include, block, control), zdroják filtru by se mírně zjednodušil, ale nejsem si jist, s jakým nadšením by taková úprava byla přijata.

Tharos napsal(a):

No a na místech, kde by namísto použití {/ifset} či {/ifCurrnet} mělo praktický význam použití {/if} (příjemně kratší kód), se to najednou zakazuje. Děsný… :)

A přitom tohle bylo odstranění poslední nejednoznačnosti. Takže jásejte :-)

PaBi3
Bronze Partner | 62
+
0
-

David Grudl napsal(a):

Kdyby byla povinná čárka za prvním tokenem v makru link (a také include, block, control), zdroják filtru by se mírně zjednodušil, ale nejsem si jist, s jakým nadšením by taková úprava byla přijata.

Asi s takým istým nadšením, ako {/ifset} a {/ifCurrent} :-(

Aurielle
Člen | 1281
+
0
-

Smrt {/ifset} +1

grey
Člen | 94
+
0
-

překopání latter, aby mělo jen jeden způsob zápisu bych dal do hlavní verze 2.0… tam si nějaký ty compatibility breaky můžeme dovolit…

Honza Marek
Člen | 1664
+
0
-

S {/ifset} a {/ifCurrent} se mé oko estéta nemůže smířit. S tim ifsetem je to jasný… buď ho budu používat jako n:ifset nebo klasicky {if isset(...)}. Bohužel {ifCurrent} nemá žádnou alternativní syntaxi. Nešla by zavést? Nějaké cca {if $control->isCurrent(...)} by se hodilo i pro případ negace podmínky či použití v presenteru.

Tharos
Člen | 1030
+
0
-

David Grudl napsal(a):

Tak to se musím velice ohradit! Latte syntax prošla dlouhým pragmatickým vývojem a dnes (poslední revize) jsou její pravidla jasná, konzistentní a jednotná. Že lze něco zapsat více způsoby je docela jiná věc. To je jako se syntaxí programovacího jazyka.

Tušil jsem, že se asi neshodneme. :) Ale uzavřel bych tento OT ještě následující úvahou: různé alternativní syntaxe u programovacích jazyků často mají svá opodstatnění. Třeba konstrukce if (expr): ... endif; má jasný přínos. Pak je v pravém slova smyslu alternativní syntaxí snad jen to, že jeden příkaz statementu mohu či nemusím obalit do složených závorek. Nic ve smyslu: „Zde můžete, ale nemusíte psát čárku, tady zase můžete klíče dát do uvozovek, ale vlastně nemusíte. Tady můžete použít ‚=>‘, ale vlastně stačí jen ‚=‘.“

U programovacích jazyků, které nabízejí více coding stylů, alternativní zápisy ještě beru (ale jak říkám, většinou se nejedná o rovnocené zápisy v pravém slova smyslu a mají nějaký význam), ale u frameworku pro ně opodstatnění nevidím. Navíc Latte syntaxe mi přijde ještě benevolentnější, než syntaxe PHP. :)

Přijde mi, že negativa toho převažují: nejednotnost napříč projekty, nejednotnost v rámci projektu, ve kterém se vystřídalo více vývojářů… Vím, že to je o disciplíně v rámci týmu, ale je to pak práce navíc. Jaké jsou výhody těch mnoha způsobů zápisu?

Plus mám k tomu dotaz. :) Který Latte coding style je nejlepší, doporučovaný? U kterého mám největší šanci, že budu kompatibilní s ostatními vývojáři?

Neber můj názor jako útok! Chraň pánbůh. :)

Editoval Tharos (11. 11. 2010 22:20)

arron
Člen | 464
+
0
-

Ja jsem presvedceny, ze cim ten blok zacne ({ifCurrent}), tim by mel skoncit ({/ifCurrent}). Je to sice o neco delsi, ale nakonec je to v kodu daleko prehlednejsi a skoro bych rekl, ze i ruzne napovidaji a kontroly syntaxe se budou v tom netbeans pluginu o dost zjednodusit. Je to tak v html, tak proc by to nemohlo byt tady. Je to break, ale opravit to zase nebude nic az tak zasadniho.

Co se tyka te benevolence zapisu, tak bych skoro rekl, ze to David udelal hlavne proto, ze si sam nepamatuje, jak se to ma spravne psat, tak chce mit vic moznosti, aby se trefil :-D (no offence :-)) Nicmene bych rekl, ze by nebylo uplne od veci tuhle benevolenci trosku utahnout a udelat proste jenom jednu moznost zapisu tam, kde je to mozne. Jednak se asi zkrati doba parsovani, zjednodusi se kod a bude to zase o neco prehlednejsi. Bude to pravdepodobne slusny a osklivy break, ale mam takovy pocit, ze se to driv nebo pozdeji stejne stane, a tak radeji ted (kdyz je tech breaku vic s novou verzi), nez pozdeji.

David Grudl
Nette Core | 8227
+
0
-

Ale tam skutečně žádná nejednoznačnost není. Všechny makra používají stejný tokenizér. Preferovaný zápis je vždy ten nejstručnější (proč jinak by byly třeba uvozovky volitelné?)

Navíc Latte syntaxe mi přijde ještě benevolentnější, než syntaxe PHP. :)

Pochopitelně, to je snad každému zřejmé.

Vyki
Člen | 388
+
0
-

gmvasek napsal(a):

Smrt {/ifset} +1

Naprosto do puntíku souhlasím.

EDIT: A když budbu mít více podmínek

{ifset $a}

{elseif $b == 1}

{/ifset}

tak už to potom nedává ani logiku.

Editoval Vyki (12. 11. 2010 14:58)