Hallo, welkom terug.
In deze lezing wil ik praten over lokale en globale variabelen.
Dit is echt het concept van functie toepassingsgebied of in het algemeen programmabereik.
Het heeft te maken met wanneer u variabelen kunt gebruiken en wanneer
u ze niet kunt gebruiken.
We weten wat functies zijn.
Dus nu wil ik praten over lokale variabelen.
Lokale variabelen moeten het echt doen maar met meer dan alleen functies.
Lokale variabelen hebben te maken met alles met een codeblok.
Dus variabelen binnen gedefinieerd van een functie staan bekend
als automatische lokale variabelen.
Dus in die functie lichaam, ertussenin die beginnende en eindigende
haakjes, als je een variabele declareert, dat variabele is een lokale variabele.
Het wordt automatisch aangemaakt elke keer dat de functie wordt aangeroepen.
Ook eventuele waarden in de toegang tot die variabele is alleen lokaal
voor de functie.
Je hebt geen toegang tot die variabele buiten die functie.
Dus de variabele is niet toegankelijk in andere functies als het lokaal
is voor een specifieke functie.
Het is alleen toegankelijk van waaruit het is gedefinieerd.
Als een beginwaarde wordt gegeven naar een variabele
binnen een functie, die initiële waarde is toegewezen aan de variabele telkens wanneer
de functie wordt aangeroepen.
Als u een waarde wilt behouden in een variabele elke volgende oproep, er is eigenlijk
een manier om dat te doen in c wordt het een statische
variabele binnen een functie genoemd.
Dat is, nogmaals, meer een geavanceerd concept niet in
een beginnersklas, maar het is een manier waarop je het kunt eigenlijk verschillende
gegevens hebben elke keer dat u functies aanroept.
Dus als je bijvoorbeeld wilt houden een teller van hoe vaak een functie werd
aangeroepen, zou je a . declareren lokale variabele binnen die functienaam
static, met een statisch sleutelwoord.
Maar zonder gewoon regelmatig lokale variabelen zullen elke
keer nieuwe waarden hebben.
U kunt het auto-trefwoord eerder gebruiken het gegevenstype, maar dat is niet nodig.
Het maakt het een beetje nauwkeuriger.
De compiler gaat het toevoegen door: standaard als u het niet opneemt.
Maar als je het wel opneemt, is
het ga het alleen preciezer maken, het is niet nodig.
Dus het heet an automatische lokale variabele.
Er is een trefwoord met de naam auto in c, maar u hoeft niet op
te geven dat het standaard wordt geleverd, en dat is waarom je ziet het niet
in veel voorbeelden waar variabelen worden gedefinieerd en gedeclareerd binnen een functie.
Lokale variabelen zijn ook van toepassing op: elke code waarbij de variabele is
gemaakt in een blok, lussen of if-statements.
Nogmaals, als je een if-statement hebt in wat is een blok voor een if-statement, het is
precies waar de haakjes beginnen.
Dat heet een blok.
Blokken kunnen in functies zijn, blokken kunnen if-statements zijn, blokken
kunnen in lussen zijn.
Blokken kunnen overal zijn er zijn haakjes, in wezen.
Overal waar haakjes zijn en je maakt die variabele.
Het maken van de variabele is declareren en er misschien waarden aan toe te kennen.
Maar als je die variabele declareert, je maakt die variabele
in een blok, je kunt alleen gebruiken die variabele in het blok.
Als je daar toegang toe probeert te krijgen variabele buiten het blok, wordt
deze niet gebruikt.
Dus als je een if-statement hebt, binnen de if-statement
declareer je een variabele, je hebt toegang tot die variabele buiten
het if-statementblok, hetzelfde met lussen.
Het is zeer belangrijk dit te begrijpen.
De compiler gaat klagen en u een foutmelding geven als u
ergens anders toegang probeert te krijgen.
En wat dit betekent is de waarden in de gegevens is alleen
van toepassing op dat blok.
Je deelt geen gegevens.
Globale variabelen is de tegenovergestelde van een lokale variabele.
Globale variabelen zijn toegankelijk door een functie in het programma.
De manier waarop u een globale variabele is dat je het gewoon
bovenaan buiten elke functie plaatst.
Dus globale variabelen worden gedeclareerd buiten de functie en behoren tot
geen enkele functie.
Onthoud, het belangrijkste sleutelwoord de belangrijkste is een functie.
Dus alle variabelen gedefinieerd in de hoofdfunctie zijn alleen
toegankelijk in de hoofdfunctie.
Dus de variabelen in het hoofd functie zijn niet toegankelijk
in andere functies.
Als je een variabele wilt, is dat gebruikt door alle functies, plaats je
de variabele buiten een functie, meestal bovenaan het bronbestand en
markeer het meestal als zeggen dat dit een globale variabele is.
De globale variabele is een leugen voor het geheel van het programma vanaf het moment dat het
programma begint tot wanneer stopt, zal die globale variabele zich in
het geheugen bevinden.
Elke functie in het programma kan verander de waarde van die globale variabele omdat ze hebben toegang hebben, kunnen
ze deze wijzigen.
En dus moet je beginnen te denken over wow dat lijkt nogal gevaarlijk, want nu heb je
code die overal toegang heeft tot dezelfde gegevens, maar
daar komen we op terug.
Als er een lokale variabele is gedeclareerd in een
functie met dezelfde naam als een globale variabele, dan is dat functie zal de lokale variabele gebruiken, het zal
de globale variabele maskeren.
Dus als je een globale variabele hebt met de naam x en je hebt
een lokale variabele met de naam x in een functie, de local variabele krijgt voorrang.
Het gaat niet wijzigen de globale variabelengegevens.
Als je daaraan toewijst variabele, het gaat
alleen de lokale variabele wijzigen.
Dus de globale variabele is niet toegankelijk als je dezelfde naam
hebt, en eigenlijk niet toegankelijk zijn binnen die lokale functie, dus gebruik
niet dezelfde namen eigenlijk omdat het alleen maar verwarrend
zal zijn.
Voor mensen die hebben geprogrammeerd veel, gevorderde programmeurs
merken dit meteen.
Ze zullen zeggen hey dit gewoon handelingen het is gewoon het wijzigen
van de lokale variabele, zelfs als ze een zien globaal werkwoord met dezelfde naam.
Maar voor beginners is het niet altijd even duidelijk.
Laat me je een voorbeeld geven.
Hier in dit voorbeeld zijn we: het creëren van een globale
variabele helemaal bovenaan vóór de hoofdfunctie.
En zoals jij het wilt organiseren in je programma heb je
meestal na een tijdje instructies bovenaan opmerkingen misschien, en dan heb je misschien een aantal gedefinieerde
constanten en dan heb je uw globale variabelen zou hebben.
Globale variabelen zien er gewoon uit zoals normale variabelen.
Het is gewoon waar ze zijn daadwerkelijk verklaard.
Als ze buiten zijn gedeclareerd een functie, dan zijn ze globaal.
Dus in dit voorbeeld hebben we a globale variabele genaamd my global.
We initialiseren het naar 0.
We kunnen deze ook initialiseren globale variabelen overal.
We kunnen ze initialiseren wanneer: we declareren ze of we
kunnen ze in elke functie initialiseren.
Het is een geheel getal.
We hebben ook twee functies, de hoofdfunctie in een
functie genaamd mijn functie.
Daarbinnen hebben we lokale variabelen die alleen toegankelijk
zijn binnen die functies.
In de hoofdfunctie we hebben een mijn lokale hoofdgerecht.
Je hebt alleen toegang tot mijn lokale main binnen de hoofdfunctie.
Maar omdat mijn global een variabele is dat is globaal, je kunt dat ook
openen in de hoofdfunctie.
Dus de belangrijkste heeft toegang tot twee variabelen, de lokale en de globale.
En mijn functie heeft een lokale variabele met de naam x omdat het tussen de
haakjes van de hoofdtekst van de functie wordt gedeclareerd en we hebben daadwerkelijk toegang tot de globale
variabele die mijn global is.
We hebben ook toegang tot x, maar we hebben geen toegang tot mijn lokale.
Mijn lokale hoofdgerecht zou ik moeten zeggen.
Omdat mijn lokale hoofdgerecht alleen is binnen de hoofdfunctie.
Daar hebben we geen toegang toe.
Als we proberen mijn . te schrijven of te lezen lokale hoofdvariabele in
de mijn-functie, de compiler is ga je een fout geven.
Dit moet je begrijpen concept van lokaal versus globaal.
Lokaal bevinden zich in codeblokken.
Wanneer ze zijn aangegeven, kunt u gebruik ze alleen in het blok.
Als een variabele buiten een blok ligt en het zit gewoon in een functie of het zit gewoon
in het programma zelf, je hebt er in elke functie toegang toe.
Globale variabelen moeten worden vermeden.
Globale variabelen zijn soort van een slechte zaak.
De reden voor hen voor global variabelen slecht zijn en waarom je ze
zou moeten vermijden is omdat het bevordert de koppeling tussen functies.
Wat betekent koppeling?
Koppelen betekent afhankelijkheden.
Als je een globale variabele hebt en het wordt gebruikt
door vier functies, dat betekent dat elk ervan van die functies kan afhankelijk
zijn van de andere functie.
Wat is er mis met afhankelijkheid?
Afhankelijkheid zorgt ervoor dat een programma veel moeilijker te debuggen en fouten te vinden.
Als je een bug in je programma hebt en je gebruikt een globale
variabele en de globale variabele veroorzaakt de bug, nu die bug overal kan zijn in
elke functie die is met behulp van die globale variabele.
Het compliceert de zaken wanneer u globale gegevens hebt.
Je hebt een globale variabele, het zou kunnen: worden gewijzigd in functie één,
functie twee, functie drie, functie vier.
Je beperkt de toegang daartoe niet. Het is ook erg moeilijk als je de fout eenmaal
hebt gevonden en je het isoleert, kan het heel moeilijk
zijn om het te repareren.
Want als je het nu oplost, mag je problemen veroorzaken in andere
functies vanwege deze afhankelijkheden.
Globale variabelen moeten zijn door deze koppeling
zoveel mogelijk vermeden, vanwege deze afhankelijkheden.
Er zijn momenten waarop je misschien nodig hebt om het te gebruiken, maar je moet het vermijden.
En om het meest in gedachten te houden moderne talen in de meeste
objectgeoriënteerde talen zoals c++ en java, hebben niet eens het concept
van een globale variabele.
Ze hebben statische variabelen die: kunnen klassevariabelen zijn, maar ze zijn nog
steeds ingekapseld in een klasse.
Omdat wereldwijde gegevens zo zijn: een slechte zaak, nieuwe talen proberen
het eigenlijk te verbieden.
En je moet proberen te vermijden het omdat het je programma alleen
maar ingewikkelder maakt en het maakt moeilijker om fouten te vinden en te debuggen.
In plaats van globaal te gebruiken gegevens, geef gegevens door aan functies.
Als een functie toegang nodig heeft aan sommige gegevens, geef het door.
Als -- als het veel gegevens zijn en jij niet wil veel parameters hebben, in theorie
zou je dat eigenlijk nooit moeten doen meer dan vijf parameters hebben.
Er is daar een geweldig boek, genaamd Schone code die spreekt over de kwaliteit
van code en dingen die moeten worden vermeden dingen die u moet vermijden, zoals globale variabelen.
Het gaat ook over hoe veel parameters die u in
uw functies zou moeten hebben.
En als een functie 20 parameters heeft, het is een indicatie dat er
iets mis is, vooral omdat die functie doet waarschijnlijk te veel.
Maar een functie kan toegang hebben tot gegevens door de gegevens er gewoon aan door te geven, kunt u het
gebruik van globale gegevens beperken.
En voor een functie die veel tijd kost gegevens, kunt u iets gebruiken dat
een struct wordt genoemd waar we het nog niet over hebben gehad maar dat is een andere manier om dat te doen.
Gebruik dus niet zo veel globale data alleen mogelijk als het nodig is.
Zorg ervoor dat u de code begrijpt.
Zorg ervoor dat u documenteert het echt, echt goed.
Zodat iemand anders op zoek is at de code
weet meteen dat je globale data gebruikt en weet hoe alles werkt.
Dit is het concept van functiebereik.
Je zou dit moeten begrijpen, dus let op al deze slides.
En we zullen ook wat gebruiken wereldwijde gegevens en enkele lokale
gegevens in onze volgende uitdaging. Dank u.