Ćwiczenie — bloki kodu i zakres zmiennych
- {liczbaMinut} minut
Blok kodu to jedna lub więcej instrukcji języka C#, które definiują ścieżkę wykonywania. Instrukcje poza blokiem kodu mają wpływ na czas wykonywania bloku kodu, jeśli i jak często ten blok kodu jest wykonywany w czasie wykonywania. Granice bloku kodu są zwykle definiowane przez nawiasy klamrowe , {}.
Oprócz ich wpływu na ścieżkę wykonywania bloki kodu mogą również wpływać na zakres zmiennych. Przykłady kodu, które zostaną zbadane w tym ćwiczeniu, pomogą Ci zrozumieć relację między blokami kodu i zakresem zmiennych.
Bloki kodu wpływają na zakres deklarowania zmiennej
Zakres zmiennych odnosi się do widoczności zmiennej do innego kodu w aplikacji. Zmienna o zakresie lokalnym jest dostępna tylko wewnątrz bloku kodu, w którym została zdefiniowana. Jeśli spróbujesz uzyskać dostęp do zmiennej poza blokiem kodu, wystąpi błąd kompilatora.
W pozostałej części tej lekcji przedstawiono relację między blokami kodu i zakresem zmiennych.
Przygotowywanie środowiska kodowania
Ten moduł zawiera praktyczne działania, które prowadzą Cię przez proces tworzenia i uruchamiania kodu demonstracyjnego. Zachęcamy do wykonania tych działań przy użyciu programu Visual Studio Code jako środowiska programistycznego. Korzystanie z programu Visual Studio Code dla tych działań pomoże Ci lepiej pisać i uruchamiać kod w środowisku deweloperów używanym przez specjalistów na całym świecie.
Otwórz Visual Studio Code.
Aby otworzyć program Visual Studio Code, możesz użyć menu Start systemu Windows (lub równoważnego zasobu dla innego systemu operacyjnego).
W menu Plik programu Visual Studio Code wybierz pozycję Otwórz folder.
W oknie dialogowym Otwieranie folderu przejdź do folderu Pulpit systemu Windows.
Jeśli masz inną lokalizację folderu, w której są utrzymywane projekty kodu, możesz zamiast tego użyć tej lokalizacji folderu. Na potrzeby tego szkolenia ważne jest, aby mieć lokalizację, która jest łatwa do zlokalizowania i zapamiętania.
W oknie dialogowym Otwieranie folderu wybierz pozycję Wybierz folder.
Jeśli zostanie wyświetlone okno dialogowe zabezpieczeń z pytaniem, czy ufasz autorom, wybierz pozycję Tak.
W menu Terminal programu Visual Studio Code wybierz pozycję Nowy terminal.
Zwróć uwagę, że wiersz polecenia w panelu Terminal wyświetla ścieżkę folderu dla bieżącego folderu. Na przykład:
C:\Users\someuser\Desktop>Uwaga
Jeśli pracujesz na własnym komputerze, a nie w piaskownicy lub w środowisku hostowanym i ukończono inne moduły Microsoft Learn w tej serii języka C#, być może utworzono już folder projektu dla przykładów kodu. Jeśli tak jest, możesz pominąć następny krok, który służy do tworzenia aplikacji konsolowej w folderze TestProject.
W wierszu polecenia terminalu, aby utworzyć nową aplikację konsolową w określonym folderze, wprowadź następujący monit:
dotnet new console -o ./CsharpProjects/TestProjectTo polecenie interfejsu wiersza polecenia platformy .NET używa szablonu programu .NET do utworzenia nowego projektu aplikacji konsolowej języka C# w określonej lokalizacji folderu. Polecenie tworzy foldery CsharpProjects i TestProject i używa elementu TestProject jako nazwy
.csprojpliku.Jeśli zostanie wyświetlony komunikat informujący o tym, że pliki już istnieją, przejdź do następnych kroków. Użyjesz ponownie istniejących plików projektu.
W widoku EKSPLORATOR rozwiń folder CsharpProjects .
Powinien zostać wyświetlony folder TestProject i dwa pliki, plik programu C# o nazwie Program.cs i plik projektu C# o nazwie TestProject.csproj.
W menu Plik programu Visual Studio Code wybierz pozycję Otwórz folder.
W oknie dialogowym Otwieranie folderu wybierz folder CsharpProjects , a następnie wybierz pozycję Wybierz folder.
W widoku EKSPLORATOR rozwiń folder TestProject, a następnie wybierz pozycję Program.cs.
Usuń istniejące wiersze kodu.
Ten projekt konsoli języka C# będzie używany do tworzenia, kompilowania i uruchamiania przykładów kodu w tym module.
Zamknij panel Terminal.
Tworzenie zmiennej wewnątrz bloku kodu
Zaczniesz od przyjrzenia się przypadku, gdy zmienna zostanie zainicjowana wewnątrz bloku kodu.
Upewnij się, że program Visual Studio Code jest otwarty i Program.cs wyświetlany w panelu Edytor.
Uwaga
Program.cs powinny być puste. Jeśli tak nie jest, zaznacz i usuń wszystkie wiersze kodu.
Wpisz następujący kod w edytorze programu Visual Studio Code:
bool flag = true; if (flag) { int value = 10; Console.WriteLine($"Inside the code block: {value}"); }W menu Plik programu Visual Studio Code wybierz pozycję Zapisz.
Przed utworzeniem lub uruchomieniem kodu należy zapisać plik Program.cs.
W panelu EKSPLORATOR, aby otworzyć terminal w lokalizacji folderu TestProject, kliknij prawym przyciskiem myszy pozycję TestProject, a następnie wybierz polecenie Otwórz w zintegrowanym terminalu.
Zostanie otwarty panel terminalu. Terminal powinien zawierać wiersz polecenia pokazujący, że terminal jest otwarty w lokalizacji folderu TestProject.
W wierszu polecenia terminalu, aby uruchomić kod, wpisz dotnet run , a następnie naciśnij Enter.
Uwaga
Jeśli zostanie wyświetlony komunikat "Nie można odnaleźć projektu do uruchomienia", upewnij się, że w wierszu polecenia terminalu zostanie wyświetlona oczekiwana lokalizacja folderu TestProject. Na przykład:
C:\Users\someuser\Desktop\csharpprojects\TestProject>.Powinny zostać wyświetlone następujące dane wyjściowe:
Inside the code block: 10
Jest to oczekiwane dane wyjściowe. Ale co zrobić, jeśli chcesz uzyskać dostęp do zmiennej value poza blokiem if kodu instrukcji?
Próba uzyskania dostępu do zmiennej poza blokiem kodu, w którym jest zadeklarowana
W edytorze programu Visual Studio Code utwórz nowy wiersz kodu poniżej
ifbloku kodu instrukcji.W utworzonym pustym wierszu kodu dodaj następujący wiersz kodu:
Console.WriteLine($"Outside the code block: {value}");Sprawdź, czy zaktualizowany kod wygląda następująco:
bool flag = true; if (flag) { int value = 10; Console.WriteLine($"Inside the code block: {value}"); } Console.WriteLine($"Outside the code block: {value}");Zapisz plik kodu, a następnie uruchom kod przy użyciu programu Visual Studio Code.
Wprowadź
dotnet runpolecenie w wierszu polecenia terminalu, aby uruchomić kod.Zwróć uwagę, że podczas próby uruchomienia aplikacji występuje błąd kompilacji:
Program.cs(7,46): error CS0103: The name 'value' does not exist in the current context
Część Program.cs(7,46) komunikatu informuje o tym, że błąd jest skojarzony z wierszem 7 w pliku Program.cs kolumna 46.
Ten błąd jest generowany, ponieważ zmienna zadeklarowana wewnątrz bloku kodu jest dostępna tylko (można je zobaczyć tylko) w tym bloku kodu. Ponieważ nie można uzyskać dostępu do zmiennej poza blokiem kodu, w którym jest zadeklarowana, value nie można uzyskać dostępu z wiersza 7 kodu.
Zmienna zadeklarowana w bloku kodu metody jest określana jako zmienna lokalna. Podczas przeglądania artykułów omawiających zakres zmiennych, możesz zobaczyć użyty termin zmienna lokalna.
Przenieś deklarację zmiennej nad blokiem kodu
Aby uzyskać dostęp do zmiennej zarówno wewnątrz, jak i poza blokiem kodu, należy zadeklarować zmienną przed (powyżej) blokiem kodu, aby kod poza blokiem kodu mógł "zobaczyć" zmienną.
Zaktualizuj kod w edytorze programu Visual Studio Code w następujący sposób:
bool flag = true; int value; if (flag) { Console.WriteLine($"Inside the code block: {value}"); } value = 10; Console.WriteLine($"Outside the code block: {value}");Pośmiń chwilę na przejrzenie aktualizacji.
Zauważ, że
valuejest teraz zadeklarowany (ale nie zainicjowany) poza blokiemifkodu.Użyj programu Visual Studio Code, aby zapisać aktualizacje, a następnie uruchomić kod.
Zwróć uwagę, że nadal występuje błąd kompilacji.
Tym razem podczas próby uruchomienia aplikacji zostanie wyświetlony następujący błąd kompilacji:
Program.cs(6,49): error CS0165: Use of unassigned local variable 'value'Błąd jest skojarzony z wierszem 6 wewnątrz bloku kodu, ponieważ
valuejest niezainicjowany (nie przypisano wartości). Jeśli wierszvalue = 10;kodu znajduje się powyżejifbloku kodu instrukcji, aplikacja zostanie skompilowana poprawnie i wszystko będzie w porządku. Ponieważvaluejednak nie zainicjowano go, nie można uzyskać dostępu do niego wewnątrz bloku kodu.Upewnienie się, że zmienne są inicjowane przed podjęciem próby uzyskania do nich dostępu, rozwiążą ten problem.
Inicjowanie zmiennej w ramach deklaracji zmiennej
Aby zainicjować w ramach deklaracji
valuezmiennej, zaktualizuj kod w następujący sposób:bool flag = true; int value = 0; if (flag) { Console.WriteLine($"Inside the code block: {value}"); } value = 10; Console.WriteLine($"Outside the code block: {value}");Ten kod usuwa błąd kompilacji "nieprzypisane zmiennej lokalnej", inicjując
valuejako część deklaracji zmiennej.Użyj programu Visual Studio Code, aby zapisać i uruchomić kod.
Zwróć uwagę, że teraz po uruchomieniu aplikacji zobaczysz następujące dane wyjściowe:
Inside the code block: 0 Outside the code block: 10
Badanie interpretacji kodu przez kompilator
Aby uniknąć błędów środowiska uruchomieniowego, kompilator języka C# analizuje kod w edytorze programu Visual Studio Code i podczas procesu kompilacji. Jednak kompilator może nie zawsze interpretować kod w taki sam sposób, jak ty.
Rozważ następujące dwa przykłady kodu, które wydają się pełnić ten sam cel:
// 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}");
Te dwa przykłady powinny zawsze generować ten sam wynik, ale kompilator języka C# interpretuje te dwa przykłady kodu inaczej.
W przypadku pierwszego przykładu kodu kompilator interpretuje flag jako zmienną logiczną, która może mieć przypisaną wartość true lub false. Kompilator stwierdza, że jeśli flag parametr ma falsewartość , value nie zostanie zainicjowany po wykonaniu drugiego Console.WriteLine() . Zasadniczo kompilator uważa, że możliwe są następujące dwie ścieżki wykonywania kodu:
// path when flag = true
int value;
value = 10;
Console.WriteLine($"Inside the code block: {value}");
Console.WriteLine($"Outside the code block: {value}");
ORAZ
// path when flag = false
int value;
Console.WriteLine($"Outside the code block: {value}");
Ponieważ kompilator uwzględnia drugą ścieżkę jako możliwość (dla przykładu kodu 1), generuje komunikat o błędzie podczas procesu kompilacji. Ponadto edytor kodu w programie Visual Studio Code ostrzega o tym problemie, wyświetlając czerwony ziewisły wiersz poniżej value (poniżej bloku kodu).
W przypadku drugiego przykładu kodu zgodny stwierdza, że zawartość if bloku kodu instrukcji będzie zawsze wykonywana (true jest zawsze true). Kompilator nie generuje błędu kompilacji, ponieważ interpretuje drugi przykład kodu, aby mieć jedną ścieżkę wykonywania w następujący sposób:
int value;
value = 10;
Console.WriteLine($"Inside the code block: {value}");
Console.WriteLine($"Outside the code block: {value}");
Podsumowanie
Oto kilka istotnych kwestii, o których należy pamiętać odnośnie do bloków kodu:
- Po zadeklarowaniu zmiennej wewnątrz bloku kodu jej widoczność jest lokalna dla tego bloku kodu i nie można uzyskać dostępu do tej zmiennej poza blokiem kodu.
- Aby upewnić się, że zmienna jest widoczna zarówno wewnątrz, jak i poza blokiem kodu, należy zadeklarować zmienną przed blokiem kodu (poza blokiem kodu i nad nim).
- Upewnij się, że zmienne są inicjowane przed próbą uzyskania dostępu do kodu (dla wszystkich potencjalnych ścieżek wykonywania kodu).