Novinky v Latte 2.7: typy kam se podíváš a batch
Měsíc po vydání Latte 2.6, které přineslo optional chaining a custom functions, je tu Latte 2.7, které je na novinky ještě zajímavější.
Typový systém
Klíčová záležitost pro vývoj robustních aplikací. Díky tomu, že víme, jaký datový či objektový typ je v každé proměnné, může
- IDE správně našeptávat
- statická analýza odhalit chyby
Obě věci zásadním způsobem zvyšují kvalitu a pohodlí vývoje. Tohle téma si zasloužilo samostatných článek, ve kterém se dozvíte vše podstatné: jak deklarovat typy, jak si ušetřit práci a jak na napovídání v IDE.
Filter |batch
Novinkou je filtr |batch
, který zjednodušuje výpis
lineárních dat do podoby tabulky:
{var $items = ['a', 'b', 'c', 'd', 'e', 'f', 'g']}
<table>
{foreach ($items|batch:3,'No item') as $row}
<tr>
{foreach $row as $column}
<td>{$column}</td>
{/foreach}
</tr>
{/foreach}
</table>
vygeneruje:
<table>
<tr>
<td>a</td>
<td>b</td>
<td>c</td>
</tr>
<tr>
<td>d</td>
<td>e</td>
<td>f</td>
</tr>
<tr>
<td>g</td>
<td>No item</td>
<td>No item</td>
</tr>
</table>
Prvním parametrem je počet sloupců a druhým, volitelným, doplňková hodnota, aby se zaplnil poslední řádek.
A ještě stručně
- Volitelné řetězení (optional chaining) lze nyní použít i pro výrazy
jako
$obj->$var?
a$obj::$var?
- Použití spaceless jako n:atributu zachovává volné místo před a za
elementem
<div n:spaceless>
- Všechna rozhraní ILoader, IHtmlString, ISnipperDriver, IMacro lze nyní
psát i bez prefixu
I
. Je to další krůček v postupné eliminaci prefixů v celém frameworku.
Komentáře
trochu OT, co je teďs takový nešvar neboli moda odstraňovat prefixy I z interface? Vždycky byl dobrý zvyk rozdělovat na první pohled, co je třída, co je interface a traita (prefix T), hned bylo jasné, co je co
@ppar, je to dost diskutabilne tema, pre priemerneho programatora je dobre ak ma v kode nazvy Interface alebo I, ale pre tych co v projekte robia dlhsie to vyzera asi uz ako code smell a bad practice, niekedy sa to hodi, ak FW neposkytuje nejaku zakladnu implementaciu, napriklad Router, no je dost pripadov kedy sa to nehodi, lebo to koliduje uz s nejakou default classou v tej kniznici/fw a potom to vedie k tomu ze sa tie implementacie interface volaju napriklad Simple*, Default*, atp. Tiez v PSR standardoch je stanovene ze to musi mat suffix Interface a osobne by sa mi to pacilo tiez viac takto, nech to je konzistentne, a tiez ked programujem, tak sa mi to lepsie hlada v IDE ak chcem nieco implementovat a nemusim kontrolovat ci je to interface, mozno by sa Nettecku hodil nejaky RFC system kde by sa take veci diskutovali.
@ppar: Vidiš to. Já naopak považuju za nešvar to prefixování. Protože:
a/ Vyvolává to klamný pocit, že je to užitečné, a tak to odvádí pozornost.
b/ Komplikuje to refactoring, když se z třídy stane rozhraní, tak musíš všude přepisovat.
c/ V případě Interface* je to ukecaný. Což opět vede k tomu, že to odvádí pozornost.
Obecně jsem během své kariéry programátora postupně dospěl k závěru, že to lidi odnaučuju a z kódu odstraňuju jako smetí.
Když chci vypsat tabulku tak na to mám třídu do které to nacpu a pak to renderuju bud do latte nebo konzole. nevidim duvod na to mit filtr.
@ZbyRih A přesně ve své třídě, do které to cpeš, a když to renderuješ v Latte, můžeš tenhle filtr použít.
Chcete-li odeslat komentář, přihlaste se