20. Knihovna bez ob_ funkcí

Ilustrační obrázek k článku: Knihovna bez ob_ funkcí
V tomto článku si ukážeme jak upravit CombiScriptovou knihovnu tak, aby šla vkládat i bez ob_ funkcí. A podíváme se trochu do historie jazyka Javascript

V minulém díle jsme si ukázali jak připravit CombiScriptovou knihovnu tak, aby šla vkládat jak do JS tak do PHP. Úvodní <?php jsme pro JS zakomentovali znaky // v PHP jsme tento komentář zahodili přes ob_ funkce.

To je samozřejmě použitelné řešení, ovšem použití ob_ funkcí může celé řadě programátorů vadit. Co s tím?

Kdo zná JS opravdu dobře tak ví, že //.... a /*...*/ rozhodně není jediný způsob jak psát v JS komentáře. Podíváme-li se do EcmaScript normy, dodatku B - dodatečné vlastnosti pro webové prohlížeče ZDE, tak vidíme i další možností jak psát komentáře.

Určitě zajímavé je, že řádkový komentář lze začít nejen znaky // ale i znaky <!--. A právě toho využijeme. Na začátku PHP knihovny jsme totiž v HTML kontextu a tam není problém toto vypsat, to je totiž normální začátek HTML komentáře, který následně stačí uzavřít.

Takže naše Combiscriptová knihovna pro faktoriál by mohla vypadat třeba takto:

  1. <!-- <?php echo '-->';
  2. function my_fact($n)
  3. {
  4. if ($n<=1) return 1;
  5. return $n*my_fact($n-1);
  6. }

Kde Javaxript první řádek vůbec nevidí (je to pro něj jen komentář) a z hlediska PHP nejprve vypíšeme začátek HTML komentáře, pak spustíme PHP a následně vypíšeme konec komentáře přes echo.

Po chvilce uvažování zjistíme, že toto lze napsat ještě jednodušeji takto:

  1. <!-- --><?php
  2. function my_fact($n)
  3. {
  4. if ($n<=1) return 1;
  5. return $n*my_fact($n-1);
  6. }

Kde Javascript první řádek opět nevidí (začíná komentářem) a z hlediska vkládání PHP prostě jen na začátku vypíšeme prázdný HTML komentář. A ten se na zobrazované stránce neobjeví.

Jedna věc jsou standardy, ale samozřejmě se nabízí otázka jestli komentář ve tvaru <!-- podporují všechny prohlížeče a kde se vůbec v JavaScriptu vzal? Málokdo o něm slyšel, co je to za novinku?

Historie JS komentáře <!--

Pro odpověď na tuto otázku se musíme ponořit trochu do historie prohlížečů. Již v době prvních prohlížečů (NextWWW, ViolaWWW, atd...), kdy web v podstatě nikoho nezajímal (protože existovaly jiné systémy s miliony uživatelů a s kvalitním obsahem), se ctilo jedno pravidlo: Obsah tagů, kterým prohlížeč nerozumí se zobrazí. Počítalo se totiž s tím, že tagy určují formátování a prostě když prohlížeč neví jak formátovat, tak neformátuje a jen vypíše. Čímž byla zajištěna dopředná kompatibilita - prohlížeč sice nezobrazil text v daném formátu, ale zobrazil ho.

Toto pravidlo přetrvalo i v době prvního internet boomu, který byl způsoben tím, že student Marc Andreessen přidal (přes odpor "otců www zakladatelů") do prvního multiplatformního a tehdy nejrozšířenějšího prohlížeče NCSA Mosaic podporu tagu IMG.

Výsledné stránky s obrázky svou kvalitou překonaly stávající terminálové systémy, získaly si zaslouženou pozornost, začaly vznikat první webové porno stránky, které vývoj internetu neuvěřitelně akcelerovaly, všichni si chtějí pořídit webový prohlížeč a Andreessen a spol. zakládají Netscape a vydávají Netscape Navigator, což je v podstatě přepsaný Mosaic, aby chodil rychleji.

Problém se zobrazování kódu z tagu script

Netscape, jako král internetu, samozřejmě nezůstal u verze 1 a kdo měl možnost si na podzim 1995 hrát s beta verzí Netscape Navigator 2.0 tak si jistě pamatuje, že se zde poprvé objevil tag <SCRIPT>, který mohl obsahovat kód napsaný v jazyce LiveScript. Ovšem objevil se zde i jeden problém. V starších prohlížečích, které tag <SCRIPT> neznaly se obsah scriptu vypsal na stránku. Protože tyto prohlížeče si myslely, že se jedná jen o nějaký "běžný formátovací" tag nastavující nějakou (jim neznámou) grafickou úpravu textu typu "SCRIPT".

Proto již v LiveScriptu bylo zavedeno, že se obsah tagu script dával ještě do HTML komentáře. Komentář ani staré prohlížeče samozřejmě nezobrazily a tím zdrojový kód scriptu skryly. Ovšem tento HTML komentář bylo potřeba nějak ošetřit i pro nové prohlížeče, které LiveScript znaly. A proto se počáteční značka HTML komentáře definovala i jako řádkový komentář LiveScriptu.

Taková stránka, určená pro prohlížeče, které tag script znají i pro starší které jej neznají pak vypadala takto:

  1. <HTML>
  2. <HEAD><TITLE>Stránky naší firmy</TITLE></HEAD>
  3. <BODY>
  4. Nějaký obsah
  5. </BODY>
  6. <SCRIPT>
  7. <!--
  8. alert('Vítejte na našich stránkách'); //-->
  9. </SCRIPT>
  10. </HTML>

Kde pro starší prohlížeče byl celý obsah tagu SCRIPT zaremován HTML komentářem, kdežto prohlížeče znající javascript chápou první řádku jako řádkový komentář.

PS: Ano, alert("Vítejte na na našich stránkách") se opravdu používal, "autor" tím ukázal, že umí scriptovat a jde s dobou :-)

Vývoj JS a jeho prosazení jako jazyka pro web

A potom jak si všichni pamatujeme v prosinci 1995 se LiveScript přejmenoval na JavaScript (z marketingových důvodů, protože Netscape zrovna spolupracoval se SUN), vznikla klíčová tisková zpráva NETSCAPE a SUN, ve které oznámili vznik jednotného univerzálního webového jazyka JavaScript a ke které se přihlásilo a spousta dalších firem (zpráva ZDE).

Na tuto zprávu se opravdu podívejte. To je totiž zpráva, která založila moderní web, jak jej dnes známe. Co je na ni nejzajímavější? To co v ní není. Chybějící podpis tehdy největší a nejdůležitější SW firmy. Firmy, která chtěla prosadit, aby scriptovacím jazykem webu byl její Basic. Tato zpráva je totiž zároveň vyhlášením války dominantnímu postavení Microsoftu a každý ten podpis byl zatraceně důležitý.

Vedlejším výsledkem této zprávy je to proč je dodnes Javascript takový jaký je. Nejdůležitějším bodem zadání vývoje nového jazyka bylo totiž to, aby byl vyvinut během deseti dnů. Se scriptovacím jazykem bylo totiž nutno předběhnout MS a tím zavést standard. Brendan Eich (který JS během deseti dnů vyvinul), chtěl původně napsat zcela jiný jazyk, měl rád jazyky jako Self a Scheme. Ovšem pak tu byl ještě tlak SUNu, aby se vnějškově Javascript podobal Javě a tlak Netspace, aby byl jednoduchý, spíše pro HTML kodéry, než pro profesionální programátory. A co s takovými zcela protichůdnými požadavky vyvinete za 10 dní, i když nespíte a programujete 16h. denně?

Nicméně z našeho hlediska lze říci, že komentář ve stylu <!-- byl součástí Javascriptu ještě předtím než byl tento jazyk dostal své jméno, je to jeden z prvních stavebních kamenů JS, je součástí normy a zkušenosti ukazují, že jeho podpora je stále 100%.

CombiScriptová knihovna začíná znaky
<!-- --><?php

PS: Zdá se Vám tehdejší vývoj šílený a pravděpodobnost, že by se dnes do JS přidala nová komentářová značka jako nulová? V 2020 byl do JS přidán, tkzv. Hashbang komentář #!. Znáte jej?

V příštím článku si ukážeme jak ve funkci zakládat proměnné bez použití JS klíčových var či let. Před přechodem na další článek o tom zapřemýšlejte, ať rozvíjíte svou kreativitu.
Předchozí