A dědeček jen dvě. Starou známou píseň o průměrování jistě znáte. Jak by ale vypadala, kdybychom do ní přimíchali ještě nějakou hrušku? Možná by to nedopadlo nejhůř. Míchat hrušky s jablky lze také v kompotech. Ale nedoporučuje se míchat tyto dva druhy ovoce programátorům. Tedy v přeneseném smyslu - dnes bude řeč o proměnných a jejich typech. Pokud si uděláte z proměnných kompot, dříve nebo později vám z něj bude špatně.

Pan Zdeněk Cendra má zřejmě kompot natolik v oblibě, že míchá ve svých skriptech datové typy navzájem jak ho napadne. Ze začátku jsme měli podezření, že nemá ponětí o tom co to vůbec datové typy jsou. Ale pak jsme objevili jeho
článek Jak deklarovat proměnné? Jaké volit názvy? Proč vlastně? (server už bohužel nefunguje...) ve kterém o datových typech píše. V některých věcech uznáváme má pravdu.
Ale vinou posledního příkladu vyzní bohužel článek jako recept na prvotřídní "data typový" kompot.

Zcela na místě je autorovo doporučení používat příkaz Option Explicit, který zapíná nutnost deklarovat proměnné před jejich prvním použitím. Plně souhlasíme s uvedeným důvodem, že se výrazně sníží počet chyb vnesených do kódu překlepem v názvu proměnné. Na pravou míru uveďme, že příkaz Option Explicit musíme použít před prvním jiným příkazem našeho skriptu, nikoliv před použitím první proměnné.

Souhlasíme také s konvencí pojmenovávat proměnné prefixem, který volíme podle obsahu proměnné. Přesně řečeno podle datového typu proměnné. Je to konvence velmi užitečná, pomáhá nám udržovat v kódu přehled a doporučuje jí devět programátorů z deseti.

Potud se zdá všechno v pořádku - možná se ptáte proč otravujeme,
když vlastně není co uvést na pravou míru.
Autor se však dopouští velmi hrubé chyby když uvádí:
<cite>"Každá proměnná obsahuje určitý druh informací, které by se dali jednoduše zařadit do třech kategorií: číslo, text, objekt."</cite>.
To je velmi nepřesně řečeno. Ve VBScriptu máme všehovšudy jeden datový typ - Variant. Proměnná obsahuje hodnotu a informaci o jejím sub typu. Z toho vyplývá, že můžeme ve výrazu použít proměnné různých sub typů a VBScript se postará o jejich přetypování. To se může zdát výhodné - ale je to velmi nebezpečné, pokud si programátor přesně neuvědomí důsledky. VBScript totiž zvolí sub typ výsledku podle sub typů jednotlivých proměnných ve výrazu a použitých operátorů.

Uveďme autorův příklad - tedy jen podstatnou část:


Dim intCislo2, intCislo3, intVysledek
intCislo2 = "43535513"
intCislo3 = "1353"
intVysledek = intCislo2 - intCislo3

autor sice zvolí prefix int pro číslo, ale pak si do něj uloží typ string. A s takto naplněnými proměnnými provádí matematickou operaci odečítání. Dopadne to dobře - díky VBScriptu, který podle operátoru odečítání správně pochopí co autor zamýšlel a typ string si sám převede na číslo. Je to proto, že typ string operátor odečítání nemá. Horší to bude se sčítáním. To je operátor, který funguje jednak pro sčítání čísel a jednak pro spojování řetězců. Ukažme si jak to dopadne:


dim intCislo1,intCislo2,strCislo1,strCislo2
intCislo1 = 1
intCislo2 = 1
strCislo1 = "1"
strCislo2 = "1"

response.write intCislo1 + intCislo2 ' = 2 , vysledek bude typu integer
response.write TypeName(intCislo1 + intCislo2) '= "Integer"
response.write strCislo1 + strCislo2 ' = "11" vysledek bude typu string
response.write TypeName(strCislo1 + strCislo2) '= "String"

Zkrátka a dobře - proč si číslo ukládat jako řetězec, když s ním chceme pracovat jako s číslem? Uložme si ho jako číslo - nebudeme muset "pro jistotu" konvertovat typ před každým rizikovým použitím proměnné, popřípadě se divit co nám to ten program spočítal za nesmysl.

Inu pane Cendro, zopakuji svůj názor - Chtělo by to nejprve se naučit alespoň základy programování, než o něm budete psát články na webu, nebo nedejbože knihu. Přeji vám ať se vám váš typový kompot co nejdříve přejí - dřív než vám z něj bude opravdu špatně.