Øvelse – kodeblokker og variabelt omfang
- 11 minutter
En kodeblokk er én eller flere C#-setninger som definerer en kjøringsbane. Setninger utenfor en kodeblokk påvirker når, hvis, og hvor ofte denne kodeblokken utføres ved kjøring. Grensene for en kodeblokk defineres vanligvis av bølgete klammeparenteser. {}
I tillegg til effekten på kjøringsbanen, kan kodeblokker også påvirke omfanget av variablene. Kodeeksempler som du undersøker under denne øvelsen, hjelper deg med å forstå relasjonen mellom kodeblokker og variabelt omfang.
Kodeblokker påvirker omfanget av en variabel deklarasjon
Variabelt omfang refererer til en variabels synlighet til den andre koden i programmet. En lokalt omfangsvariabel er bare tilgjengelig i kodeblokken der den er definert. Hvis du prøver å få tilgang til variabelen utenfor kodeblokken, får du en kompilatorfeil.
Resten av denne enheten utforsker relasjonen mellom kodeblokker og variabelt omfang.
Klargjøre kodemiljøet
Denne modulen inneholder praktiske aktiviteter som veileder deg gjennom prosessen med å bygge og kjøre demonstrasjonskode. Du oppfordres til å fullføre disse aktivitetene ved hjelp av Visual Studio Code som utviklingsmiljø. Hvis du bruker Visual Studio Code for disse aktivitetene, kan du bli mer komfortabel med å skrive og kjøre kode i et utviklermiljø som brukes av profesjonelle over hele verden.
Åpne Visual Studio Code.
Du kan bruke Start-menyen i Windows (eller tilsvarende ressurs for et annet operativsystem) til å åpne Visual Studio Code.
Velg Åpne mappe på Visual Studio Code File-menyen.
Gå til Windows-skrivebordsmappen i dialogboksen Åpne mappe .
Hvis du har en annen mappeplassering der du beholder kodeprosjekter, kan du bruke denne mappeplasseringen i stedet. For denne opplæringen er det viktig å ha en plassering som er enkel å finne og huske.
Velg Velg mappe i dialogboksen Åpne mappe.
Hvis du ser en sikkerhetsdialogboks som spør om du stoler på forfatterne, velger du Ja.
Velg Ny terminal på Visual Studio Code Terminal-menyen.
Legg merke til at en ledetekst i Terminal-panelet viser mappebanen for gjeldende mappe. For eksempel:
C:\Users\someuser\Desktop>Merk deg
Hvis du arbeider på din egen PC i stedet for i en sandkasse eller et vertsbasert miljø, og du har fullført andre Microsoft Learn-moduler i denne C#-serien, har du kanskje allerede opprettet en prosjektmappe for kodeeksempler. Hvis dette er tilfellet, kan du hoppe over neste trinn, som brukes til å opprette en konsollapp i TestProject-mappen.
Hvis du vil opprette et nytt konsollprogram i en angitt mappe i terminalkommandoen, skriver du inn følgende ledetekst:
dotnet new console -o ./CsharpProjects/TestProjectDenne .NET CLI-kommandoen bruker en .NET-programmal til å opprette et nytt C#-konsollprogramprosjekt i den angitte mappeplasseringen. Kommandoen oppretter mappene CsharpProjects og TestProject for deg, og bruker TestProject som navnet på
.csprojfilen.Hvis det vises en melding som forteller deg at filene allerede finnes, fortsetter du med de neste trinnene. Du bruker de eksisterende prosjektfilene på nytt.
Utvid CsharpProjects-mappen i EXPLORER-visningen.
Du skal se TestProject-mappen og to filer, en C#-programfil med navnet Program.cs og en C#-prosjektfil kalt TestProject.csproj.
Velg Åpne mappe på Visual Studio Code File-menyen.
Velg CsharpProjects-mappen i dialogboksen Åpne mappe, og velg deretter Velg mappe.
Utvid TestProject-mappen i UTFORSKER-visningen, og velg deretter Program.cs.
Slett eksisterende kodelinjer.
Du skal bruke dette C#-konsollprosjektet til å opprette, bygge og kjøre kodeeksempler under denne modulen.
Lukk Terminal-panelet.
Opprette en variabel i en kodeblokk
Du begynner med å se på saken når en variabel initialiseres i en kodeblokk.
Kontroller at Visual Studio Code er åpen og Program.cs vist i redigeringspanelet.
Merk deg
Program.cs skal være tom. Hvis den ikke er det, velger og sletter du alle kodelinjer.
Skriv inn følgende kode i Visual Studio Code Editor:
bool flag = true; if (flag) { int value = 10; Console.WriteLine($"Inside the code block: {value}"); }Velg Lagre på Visual Studio Code File-menyen.
Den Program.cs filen må lagres før du bygger eller kjører koden.
Høyreklikk på TestProjecti EXPLORER-panelet, og velg deretter Åpne i integrert terminal.
Et terminalpanel åpnes. Terminalen bør inneholde en ledetekst som viser at terminalen er åpen for plasseringen av TestProject-mappen.
Skriv inn dotnet-kjøring i terminalkommandoledeteksten for å kjøre koden, og trykk deretter ENTER.
Merk deg
Hvis du ser en melding som sier «Finner ikke et prosjekt å kjøre», må du kontrollere at terminalkommandoledeteksten viser den forventede plasseringen av TestProject-mappen. Eksempel:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Du skal se følgende utdata:
Inside the code block: 10
Dette er forventet utdata. Men hva om du vil ha tilgang til variabelen value utenfor setningskodeblokken if ?
Forsøk på å få tilgang til en variabel utenfor kodeblokken der den deklareres
Opprett en ny kodelinje under
ifkodeblokken for setningen i Visual Studio Code Editor.Legg til følgende kodelinje på den tomme kodelinjen du opprettet:
Console.WriteLine($"Outside the code block: {value}");Kontroller at den oppdaterte koden ser slik ut:
bool flag = true; if (flag) { int value = 10; Console.WriteLine($"Inside the code block: {value}"); } Console.WriteLine($"Outside the code block: {value}");Lagre kodefilen, og bruk deretter Visual Studio Code til å kjøre koden.
Skriv inn
dotnet runfra Terminal-ledeteksten for å kjøre koden.Legg merke til at når du prøver å kjøre programmet, får du en kompileringsfeil:
Program.cs(7,46): error CS0103: The name 'value' does not exist in the current context
Delen Program.cs(7,46) av meldingen forteller deg at feilen er knyttet til linje 7 i Program.cs-filen, kolonne 46.
Denne feilen genereres fordi en variabel som deklareres i en kodeblokk, bare er tilgjengelig (kan bare ses) i denne kodeblokken. Siden det ikke er tilgang til en variabel utenfor kodeblokken der den deklareres, value får du ikke tilgang fra linje 7 i koden.
En variabel som deklareres i en metodekodeblokk, kalles en lokal variabel. Du kan se begrepet lokal variabel som brukes ved gjennomgang av artikler som diskuterer variabelt omfang.
Flytte variabeldeklarasjonen over kodeblokken
Hvis du vil ha tilgang til en variabel både i og utenfor en kodeblokk, må du deklarere variabelen før (ovenfor) kodeblokken, slik at koden utenfor kodeblokken kan "se" variabelen.
Oppdater koden i Visual Studio Code Editor på følgende måte:
bool flag = true; int value; if (flag) { Console.WriteLine($"Inside the code block: {value}"); } value = 10; Console.WriteLine($"Outside the code block: {value}");Ta deg tid til å se gjennom oppdateringene.
Legg merke til at
valuedet nå er deklarert (men ikke initialisert) utenforifkodeblokken.Bruk Visual Studio Code til å lagre oppdateringene, og kjør deretter koden.
Legg merke til at du fortsatt får en kompileringsfeil.
Denne gangen får du følgende kompileringsfeil når du prøver å kjøre programmet:
Program.cs(6,49): error CS0165: Use of unassigned local variable 'value'Feilen er knyttet til linje 6 i kodeblokken fordi
valueden ikke erinitialisert (ikke er tilordnet en verdi). Hvis kodelinjenvalue = 10;var plassert over setningskodeblokkenif, kompilerte programmet riktig, og alt ville vært bra.valueSiden den ikke er initialisert, kan den imidlertid ikke åpnes inne i kodeblokken.Det å sikre at variablene initialiseres før du prøver å få tilgang til dem, vil løse dette problemet.
Initialisere en variabel som en del av variabeldeklarasjon
Hvis du vil initialisere
valuesom en del av variabeldeklarasjonen, oppdaterer du koden på følgende måte:bool flag = true; int value = 0; if (flag) { Console.WriteLine($"Inside the code block: {value}"); } value = 10; Console.WriteLine($"Outside the code block: {value}");Denne koden tar for seg kompileringsfeilen «ikke tilordnet lokal variabel» ved å initialisere
valuesom en del av variabeldeklarasjonen.Bruk Visual Studio Code til å lagre og kjøre koden.
Legg merke til at når du kjører programmet, ser du følgende utdata:
Inside the code block: 0 Outside the code block: 10
Undersøk kompilatorens tolkning av koden
C#-kompilatoren analyserer koden i Visual Studio Code Editor og under byggeprosessen for å unngå kjøretidsfeil. Kompilatoren kan imidlertid ikke alltid tolke koden på samme måte som du gjør.
Vurder følgende to kodeeksempler som ser ut til å tjene samme formål:
// Code sample 1
bool flag = true;
int value;
if (flag)
{
value = 10;
Console.WriteLine($"Inside the code block: {value}");
}
Console.WriteLine($"Outside the code block: {value}");
// Code sample 2
int value;
if (true)
{
value = 10;
Console.WriteLine($"Inside the code block: {value}");
}
Console.WriteLine($"Outside the code block: {value}");
Du føler kanskje at disse to eksemplene alltid skal gi samme resultat, men C#-kompilatoren tolker disse to kodeeksempler annerledes.
For det første kodeeksempelet tolker flag kompilatoren som en boolsk variabel som kan tilordnes en verdi av enten true eller false. Kompilatoren konkluderer med at hvis flag det er false, value blir ikke initialisert når den andre Console.WriteLine() kjøres. Kompilatoren anser i hovedsak følgende to kodekjøringsbaner for å være mulig:
// path when flag = true
int value;
value = 10;
Console.WriteLine($"Inside the code block: {value}");
Console.WriteLine($"Outside the code block: {value}");
OG
// path when flag = false
int value;
Console.WriteLine($"Outside the code block: {value}");
Siden kompilatoren anser den andre banen som en mulighet (for kodeeksempel 1), genererer den en feilmelding under byggeprosessen. I tillegg advarer koderedigeringsprogrammet i Visual Studio Code deg om dette problemet ved å vise en rød bølgete linje under value (under kodeblokken).
For det andre kodeeksempelet konkluderer complier med at innholdet i if setningskodeblokken alltid vil bli utført (true er alltid true). Kompilatoren genererer ikke en build-feil fordi den tolker det andre kodeeksempelet for å ha én enkelt kjøringsbane som følger:
int value;
value = 10;
Console.WriteLine($"Inside the code block: {value}");
Console.WriteLine($"Outside the code block: {value}");
Oppsummering
Her er noen viktige ting du kan huske om kodeblokker:
- Når du deklarerer en variabel i en kodeblokk, er synligheten lokal for denne kodeblokken, og denne variabelen kan ikke åpnes utenfor kodeblokken.
- Hvis du vil sikre at en variabel er synlig både i og utenfor en kodeblokk, må du deklarere variabelen før kodeblokken (utenfor og over kodeblokken).
- Kontroller at variabler initialiseres før koden prøver å få tilgang til dem (for alle potensielle kodekjøringsbaner).