Skygge variable?

Tags:    visual-basic

<< < 12 > >>
Hej! Jeg og en kammerat læser til eksamen sammen (datalogi) og vi fatter simpelthen ikke "skyggevariable" princippet. Hverken idéen med det eller hvordan man tyder dem. Altså det er især systemet vi ikke forstår.

Her er et link til det jeg snakker om. Tog et billede af det og uploadede det som jpg.

http://img441.imageshack.us/my.php?image=skyggevariable39am.jpg

Jeg ville ikke ane hvordan jeg skulle forklare dette hvis jeg kom op i det. Nogle som kan klargøre det for mig? Eller evt. linke til noget referance materiale der kan gøre det mere indlysende?

Mange tak!
/David



Indlæg senest redigeret d. 05.06.2006 00:47 af Bruger #10054
Den variable der er erklæret nærmest(i scope) til et givent sted er altid den der vil blive brugt ved referencer til dens navn.


Det en simple regel der gør at du kan erklære flere variabler med samme navn i forskellige scope og altid vide hvilken variabler der bliver brugt ved en given reference.

Eneste brugbare ting ved det jeg nogensinde har oplevet er sådan set bare at hvis du skal bruge en variable i en function som det gør mening at kalde x så kan du gøre det såfremt der ikke er en tilsvarende variable med navnet x med et størrer scope som du også skal bruge. Hvis den regel ikke var der ville du være nød til at kalde functionens x variable noget andet f.eks x2 eller omkode alle referencer til den globale x til x2 og kalde den for x2.



Rækkevidden for en variabel gælder kun inden for den nærmeste scope. Altså du kan aldrig nå varablen X uden for et scope hvis den også er erklæret inden i et scope. Altså har du en funktion der har en lokal variabel a og der også er erklæret en global variabel a, og du ændrer a i funktionen med fx a:=a+1; så er det denne lokale variabel a i funktionen der bliver ændret.



Indlæg senest redigeret d. 05.06.2006 14:41 af Bruger #1151




Ekki ekki ekki PTANG. Zoomboing...



Indlæg senest redigeret d. 05.06.2006 14:43 af Bruger #1151
er ikke sikker på at jeg forstår det, slet ikke sidste post :P Lyder finsk.
Men tak for svarene.

Kan i sige mig hvad skygge variable hedder på engelsk?
Takker



Indlæg senest redigeret d. 05.06.2006 15:36 af Bruger #10054
David, du skrev jo intet i din post, så jeg valgte at fremlægge et Monty Python citat som et modsvar.
Hvad er det du lige præcis ikke forstår? Kom med det. Du ved hvad en funktion/procedure er? En variabel? Et scope? Hvis jeg ved hvad du forstår og ikke forstår, kan jeg jo komme med et godt eksempel!! Det vil jeg med glæde. Forstår du ikke det, skal vi nok tage et mere. Ja vi kan for den sags skyld bruge hele natten ind til vi rammer en tankegang som I forstår :)
Ved ikke lige hvad skygge variabel hedder på engelsk.



hehe aner ikke hvordan den tomme post sneg sig ind :P

Scope.. aner faktisk ikke hvad det er.
Variabler har jeg styr på (altså udover skygge variabler)

ved jeg hvad en funktion/procedure er.. tjae. Ved at der er generelle, event procedure, generelle funktioner, men kan ikke rigtig uddybe hvad det er. Jo event er når 'der sker en event' når man klikker på noget. :lol:


ps hvilken Monty Python film er citatet fra?



Et scope kan betegnes som det der står mellem {}, altså en blok, kroppen på en funktion eller et namespace, en klasse eller fx. en if statement, fx

funktion hejhej(var et, var to)
{
//her er funktions scopet

if(et == to)
{
//et if scope
}
}

Altså bare det der står imellem {}. Her er der to scopes indeni hinanden. I VB er det nok begin og end som betegner dette.
Jeg håber du forstår følgende eksempel for at se virkning af skyggevariabler

Fold kodeboks ind/udKode 

Her har du to scopes. En funktions scope og en if scope, og mindsanten om x'erne ikke holder deres værdier. Med hvad hvis vi har en klasse, som har en public x og en lokal x i en funktion? Kan man godt det?
Fold kodeboks ind/udKode 


Ja det kan man godt. Fordi, som der også står i jeres bog "Det er vedtaget at det altid er den nærmeste variabel der skal bruges" altså det er altid den variabel der er i den nærmeste scope, der skal bruges. Forstår du det? For der er egentlig ikke mere i det.



Indlæg senest redigeret d. 05.06.2006 18:47 af Bruger #1151
Jeg håber at det er iorden med syntaksen. Citatet er fra Monty Python - og de skøre riddere (mener at det er den danske betegnelse). Men det du skal bide specielt meget fat i er kode eksempel nummer et. Der er et funktions scope, som indholder et if scope. cout (til at udskrive med på skærmen) udskriver hele tiden det x som er tættest på. Altså det er 5 i if scopet fordi at det x er tættest på.

PS. Jeg kender intet til VB, men jeg tror godt at du kan opfatte class som et modul :)




Indlæg senest redigeret d. 06.06.2006 14:01 af Bruger #1151
tak, har styr på det nu! :D



<< < 12 > >>
t