int a;
{
int a; <- ei voi määrittää, koska a määritelty ylemmässä blokissa
}
VERTAA:
{
int a;
}
int a; <- MIKSI ei voi määrittää, vaikka a on määritetty alablokissa eikä sen pitäisi näkyä tällä tasolla ollenkaan????
{
int a; <- ei voi määrittää, koska a määritelty ylemmässä blokissa
}
VERTAA:
{
int a;
}
int a; <- MIKSI ei voi määrittää, vaikka a on määritetty alablokissa eikä sen pitäisi näkyä tällä tasolla ollenkaan????
Vastaukset 3
Vanhimmat
Koska kaikki saman metodin sisällä määritetyt muutujat kuuluvat samaan määrittelyalueeseen (declaration space) . Tämä on vain hyvä asia, koska vähentää sekaantumisen riskiä. Näkyvyysalue (scope) taas määrittää, missä lohkoissa muuttuja näkyy.
C# on sen verran typerä ettei se ymmärrä kuten aito C-kieli, että kaarisulkeiden sisällä a-muuttuja on uusi tapaus, vanha menee pinoon, kun kaarisulkeiden sisältä tullaan pois, pinosta palautuu käyttöön takaisin edellinen a-muuttuja. Tämä sama puutos on myös PHP:ssa. JavaScriptin uusimmassa inkarnaatiossa taitaa olla let-määrite, joka ajaa saman asian kuin C-kielessä?
Ei kyseessä ole mistään puutoksesta kun ei näiden ole tarkoituskaan toimia kuten C.