C# ja võtmesõna var
08.12.2007 | Gunnar
C# 3.0 üks uuendusi on muutujatüüpide tuletamine ehk type inference (kasutatakse ka terminit implicit casting), mis on üks kohtadest, kus kohtume võtmesõnaga var.
Nii mõnegi PHP pealt tulnud programmeerija jaoks tähendab see automaatselt sama, mida antud võtmesõna PHP-s tähendas. Enne mõnusaid lahmivaid arutelusid ja halamist maailma ehk C# lõpust võiks siiski küsida, et on see ikka nii? Vastan, et var C#-is ei ole sama, mis var PHP-s.
Enne kui edasi pudrutame, et C# on muutumas PHP-ks, teeme ühe lihtsa katse, millele eelnevalt õpime iseseisvalt veidike tundma sellist looma nagu Intermediate Language (IL). Samuti on mõttekas endale selgeks teha see, mida tähendab eelpool viitatud termin type inference. Seejärel asume vaatama järgmist primitiivset koodijuppi.
{
static void Main(string[] args)
{
string name = "Tolmurull";
var name2 = "Tolmurull";
}
}
Kompileerime nüüd selle var nimelist kolli sisaldava koodi kokku ja vaatame, mis tulemus vaatab meile vastu kompileeritud koodis.
{
.entrypoint
// Code size 14 (0xe)
.maxstack 1
.locals init ([0] string name,
[1] string name2)
IL_0000: nop
IL_0001: ldstr "Tolmurull"
IL_0006: stloc.0
IL_0007: ldstr "Tolmurull"
IL_000c: stloc.1
IL_000d: ret
} // end of method Program::Main
Nagu näeme, polnud paanikaks siiski põhjust ja maailm veereb endiselt edasi. Type inference tähendab kaudset cast-imist ja muutuja tüübiks määrab kompilaator selle tüübi, mis omistati var muutujale selle deklareerimisel. Ja et parem uni tuleks, siis närvide rahustuseks veel üks väike asi. Järgmised kaks asja on keelatud ja nende peale annab kompilaator vea.
{
var x = null;
var y;
}
Nüüd aga mõelge sellele, kuidas võiks var kasulik olla ja kuidas seda kindlasti mitte kasutada. Õiget vastust võite siia otsima tulla peatselt.
Head ööd!

08.12.2007 kell 11:17
Esimene näide vaja üle vaadata, praegu on täitsa tavaline C# 1.0
08.12.2007 kell 11:38
Nüüd on korras. Tänan tähelepanu juhtimast