pátek 31. října 2003

Automatická konverze datových typů v JavaScriptu

K tomuto příspěvku mě vede jeden rozhovor, kdy jsem radil kolegovi ohledně určité konstrukce v JavaScriptu. Přesně už si samozřejmě nevzpomínám, ale kód byl podobný následujícímu

 
    function acme(id){
    	foo = document.getElementById(id); 
	if(!foo){
		.
		.	
	}
	.
	.
    }
    
 

V podstatě se jednalo o vyhodnocení foo v případě, že volání metody getElementById(id) vrátí null. Ve výše uvedeném případě se hodnota null vyhodnotí jako false.

Kolegovi jsem tedy řekl, že v případě, že element s daným id nebude prostě se provede kód v if konstrukci. Bohužel jsem jaksi nedokázal dostatečně kvalifikovaně odpovědět na to proč se null přetypuje na false.

Vysvětlení tohoto chování musíme začít u netypovosti či dynamické typovosti JavaScriptu. V JavaScriptu nemusíme předem určovat jakého datového typu bude proměnná. Datový typ přichází na řadu teprve v kontextu provádění, kde je proměnná přetypována na požadovaný typ. V našem případě se vyhodnocuje logická hodnota proto se dynamicky null přetypuje na false.

Automatickou konverzi datových typů, popisuje následující tabulka (David Flanagen: JavaScript The Definitive Guide, Fourth Edition ISBN 80-7226-626-8), podle které se provádí přetypování z jednoho typu na druhý.

Hodnota Řetězec Číslo Logická hodnota Objekt
nedefinovaná hodnota "undefined" NaN false chyba
null "null" 0 false chyba
neprázdný řetězec beze změny číselná hodnota řetězce nebo NaN true objekt String
prázdný řetězec beze změny 0 false objekt String
0 "0" beze změny false objekt Number
NaN "NaN" beze změny false objekt Number
nekonečno "Infinity" beze změny true objekt Number
záporné nekonečno "- Infinity" beze změny true objekt Number
jakékoliv jiné číslo řetězcová hodnota čísla beze změny true objekt Number
true "true" 1 beze změny objekt Boolean
false "false" 0 beze změny objekt Boolean
objekt výsledek volání metody toString() výsledek volání metody valueOf nebo toString() nebo hodnotu NaN true beze změny

čtvrtek 30. října 2003

Kdo a proč nechápe OpenSource?

Na serveru root.cz vyšel překlad, dle mého skromného mínění, více než diskutabilního článku Jak nám všem ubližuje microsoftí nepochopení Open Source. Názor Roberta X. Cringelyho je tendenční a úměra pouze proti operačnímu systému Linux, jako zastánci Open Source, je nedostatečná.

Open Source má ze své podstaty ekonomický podtext, nejviditelnějším příkladem je právě Linux. Microsoft samozřejmě velice dobře chápe Open Source a trnem v oku mu neni až tak Linux jako spíše podstata Open Source, představovaná transparentnosti daných řešení. Doporučuji pročíst diskusi k článku, některé názory jsou opravdu zajímavé.

Co týden dal aneb krátké zprávy

Máme tu novou verzi rozšířeného vývojového prostředí pro Javu, firma Borland představila JBuilder X. Nálsedník JBuilderu 9 se chlubí opět další integrací tentokrát v podobě Struts. Více informací o novém dárečku Tisková zpráva:Java Borland JBuilder X .

Tomáš Tichý informuje živě z Proffesional Developers Conference (PDC 2003). Na stránkách serveru interval.cz se můžeme přečíst jeho postřehy.

středa 29. října 2003

Byte kod pod lupou

Soubor s příponou class, který generuje překladač(javac) není jen změt náhodných bytu. Jedná se o soubor, jehož struktura je striktně popsána. Právě jeho optimalizace může zvýšit výkon. Nástroj Byte Code Engineering Library (BCEL) toho dokáže opravdu dost. Vikram Goyal se v článku Analyze Your Classes nezabývá pouze tímto nástrojem, ale probírá celou problematiku.