Novinky v Latte 2.7: typy kam se podíváš a batch

před 5 lety od David Grudl  

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

  1. 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

    před 5 lety
  2. @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.

    před 5 lety
  3. @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í.

    před 5 lety
  4. 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.

    před 5 lety
  5. @ZbyRih A přesně ve své třídě, do které to cpeš, a když to renderuješ v Latte, můžeš tenhle filtr použít.

    před 5 lety

Chcete-li odeslat komentář, přihlaste se