23. Nejkratší výraz vracející true v JS a false v PHP

Ilustrační obrázek k článku: Nejkratší výraz vracející true v JS a false v PHP
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í:

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

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

  1. if ('a'+0) ... //JS=true, PHP=false

a potřebuje jen 5 znaků.




Ovšem vítězem se stává:

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

  1. function nm_sqrt($x)
  2. {
  3. return ([]) ? Math.sqrt($x) : sqrt($x);
  4. }

A v příštím článku si ukážeme co je to komentářový switch.

Předchozí   Následující