
V dnešním článku hledáme nejkratší výraz vracející v JS true a v PHP false, který je samozřejmě pro oba jazyky syntakticky v pořádku. Kolik znaků stačí ke spolehlivému detekování prostředí?
V minulém článku jsme si ukázali jak v podmínce if zjistit zda jsme v PHP či v JS. Použili jsme porovnání:
- if ('1'+'1'==='11') ... //JS=true, PHP=false
a tedy uvnitř if potřebujeme 14 znaků
Jiný přístup je využít to, že v PHP jsou všechna čísla typu number, kdežto PHP rozlišuje typově mezi int a float. Zároveň využijeme to, že úvodní nula u float se u obou jazyků nemusí psát:
- if (0===.0) ... //JS=true, PHP=false
a dostáváme se na 6 znaků.
Nicméně optimalizace okolo operátoru + dává ještě lepší výsledky:
- if ('a'+0) ... //JS=true, PHP=false
a potřebuje jen 5 znaků.
Ovšem vítězem se stává:
- if ([]) ... //JS=true, PHP=false
Pouhopouhé dva znaky. Každé pole je v JS objekt a tedy se přetypuje na true. V PHP se prázné pole přetypovává na false. Ano, je to v manuálu: Zde :-)
A nejkratší způsob jak zapsat funkci odmocnina v CombiSriptu je:
- function nm_sqrt($x)
- {
- return ([]) ? Math.sqrt($x) : sqrt($x);
- }
A v příštím článku si ukážeme co je to komentářový switch.