Novinky v Nette Utils 3.2
Jednou z hlavních novinek Nette Utils 3.2 je nová statická třída
Nette\Utils\Floats
s užitečnými funkcemi pro porovnávání
desetinných čísel.
Třída řeší problém, který zaskočil spoustu programátorů, když
zjistili, že neplatí rovnost
0.1 + 0.2 == 0.3
. Při matematických operacích s desetinnými
čísly dochází k chybám vlivem převodu mezi desítkovou a binární
soustavou. Proto při porovnávání musíme tolerovat drobný rozdíl od
určitého desetinného místa. A to právě dělá třída Floats.
Následující porovnání už bude fungovat podle očekávání:
Floats::areEqual(0.1 + 0.2, 0.3) // vrací true
Krome této metody nabízí třída řadu dalších užitečných funkcí.
Image
Třída Nette\Utils\Image
má dvě nové metody pro detekci typu
obrázku detectTypeFromFile()
a
detectTypeFromString()
:
$type = Image::detectTypeFromFile('image/logo.gif'); // vrací Image::GIF
Arrays
PHP překvapivě nemá funkce (bez postranních efektů) pro vrácení
prvního nebo posledního prvku v poli, proto vznikly ve třídě
Nette\Utils\Arrays
funkce first()
a
last()
. Pokud je pole prázdné, vrátí null
:
Arrays::first([1, 2, 3]); // 1
Arrays::last([1, 2, 3]); // 3
Arrays::first([]); // null
Vyhledávání prvků v poli se striktním porovnáváním má na starosti
contains()
:
Arrays::contains([1, 2, 3], 1); // true
Arrays::contains(['1', false], 1); // false
A nakonec tu máme metodu pro vyvolání všech callbacků v poli:
$callbacks = [
'+' => function ($a, $b) { return $a + $b; },
'*' => function ($a, $b) { return $a * $b; },
];
$array = Arrays::invoke($callbacks, 5, 11);
// $array = ['+' => 16, '*' => 55];
A zavolání metody na každém objektu v poli:
$objects = ['a' => $obj1, 'b' => $obj2];
$array = Arrays::invokeMethod($objects, 'foo', 1, 2);
// $array = ['a' => $obj1->foo(1, 2), 'b' => $obj2->foo(1, 2)];
Srozumitelnost
Nette postupně opouští předponu I
v názvech rozhraní,
takže se mění názvy
Nette\Localization\ITranslator
→Nette\Localization\Translator
Nette\Utils\IHtmlString
→Nette\HtmlStringable
(aby korespondovalo se Stringable v PHP).
Mění se název metody Nette\Utils\Arrays::searchKey()
na
přesnější getKeyOffset()
.
Samozřejmě původní názvy nadále fungují jako aliasy.
Komentáře
Arrays::first()
👍 To potřebuju co chvila. 🙂Chcete-li odeslat komentář, přihlaste se