Mukavaa, että tästä syntyi näin paljon keskustelua
V3:ssa jokainen muuttuja pitää määritellä ennen käyttöä. Uskokaa pois, se parantaa teidän koodin laatua.
Monesti väliaikaisia muuttujia tarvitaan lähinnä For-loopissa, joten tähän on V3:ssa kivuton tapa:
Code: Select all
For i As Integer = 1 To 10
// koodia...
Next
Tämä voi sitten mennä joiltain yli hilseen:
Lokaali muuttuja ei voi peittää toista lokaalia muuttujaa vaikka olisikin eri scopessa, koska silloin sinulla on kaksi samannimistä muuttujaa, jotka periaatteessa kuuluvat samaan metodiin, mutta joihin kumpaankin periaatteessa pystyisi viittaamaan scopen sisältä. Tämä on loogisesti väärin. Tässä tapauksessa scopen ulkopuoliseen muuttujaan ei ole mitään mahdollisuutta päästä käsiksi scopen sisältä, mikä on vastoin periaatteita oliokielien viittaussäännöissä (jotka ovat hyvin tiukat). Lokaaleille muuttujillehan ei erikseen voi määrittää saatavuustasoa Private/Public/Protected. Metodien avulla ei myöskään voida qualifioida, koska kaikki muuttujat niiden sisällä ovat lokaaleita ja aina metodilleen "omistautuneita" - niiden tila ei riipu itse oliosta vaan metodin suoritettavan koodin tilasta.
Code: Select all
If 1
Dim i As Integer
EndIf
If 2
Dim i As Integer
EndIf
Tässä esimerkissä on edelleen kaksi samannimistä muuttujaa, mutta ne eivät ole toistensa ylemmillä tasoilla, joten niihin viittaaminen toisistaan käsin ei pitäisikään olla loogisesti mahdollista.
Näin tämä toimii myös VB.NET:ssä.
Ruuttu wrote:Ja kai on mahdollista pistää muuttuja näkymään kaikkialla?
Oliokielissä ei juuri ole sellaista kuin "globaali muuttuja". Jos nyt välttämättä halutaan sellaisia kuitenkin tehdä, luodaan uusi luokka, jossa ne on määritelty
Public Shared. Silloin niihin voidaan viitata ilman instantiointia.