Cvičení – bloky kódu a obor proměnných
- 11 min
Blokem kódu se rozumí jeden nebo více příkazů jazyka C#, které definují cestu provádění. Příkazy mimo blok kódu ovlivňují, kdy, if a jak často se tento blok kódu spouští za běhu. Hranice bloku kódu jsou obvykle definovány vlnovkou složených závorek, {}.
Kromě jejich účinku na cestu spuštění můžou bloky kódu ovlivnit také rozsah proměnných. Ukázky kódu, které prozkoumáte během tohoto cvičení, vám pomůžou pochopit vztah mezi bloky kódu a oborem proměnných.
Bloky kódu mají vliv na obor deklarace proměnné
Rozsah proměnných odkazuje na viditelnost proměnné na druhý kód ve vaší aplikaci. Proměnná s místním oborem je přístupná jen uvnitř bloku kódu, ve kterém je definovaná. Pokud se pokusíte o přístup k této proměnné mimo daný blok kódu, zobrazí se chyba kompilátoru.
Zbývající část této lekce zkoumá vztah mezi bloky kódu a rozsahem proměnných.
Příprava programovacího prostředí
Tento modul obsahuje praktické aktivity, které vás provedou procesem sestavování a spouštění ukázkového kódu. Doporučujeme, abyste tyto aktivity dokončili pomocí editoru Visual Studio Code jako vývojového prostředí. Používání editoru Visual Studio Code pro tyto aktivity vám pomůže stát se pohodlnějším psaním a spouštěním kódu ve vývojářském prostředí, které používají profesionálové po celém světě.
Otevřete Visual Studio Code.
K otevření editoru Visual Studio Code můžete použít windows nabídka Start (nebo ekvivalentní prostředek pro jiný operační systém).
V nabídce Soubor editoru Visual Studio Code vyberte Otevřít složku.
V dialogovém okně Otevřít složku přejděte do složky Windows Desktop.
Pokud máte jiné umístění složky, kde uchováváte projekty kódu, můžete místo toho použít toto umístění složky. Pro toto školení je důležité mít umístění, které je snadné najít a zapamatovat.
V dialogovém okně Otevřít složku vyberte Vybrat složku.
Pokud se zobrazí dialogové okno zabezpečení s dotazem, jestli autorům důvěřujete, vyberte Ano.
V nabídce Terminálu editoru Visual Studio Code vyberte Nový terminál.
Všimněte si, že příkazový řádek na panelu Terminálu zobrazuje cestu ke složce pro aktuální složku. Příklad:
C:\Users\someuser\Desktop>Poznámka:
Pokud pracujete na vlastním počítači místo v sandboxu nebo hostovaném prostředí a dokončili jste další moduly Microsoft Learn v této řadě C#, možná jste už vytvořili složku projektu pro ukázky kódu. V takovém případě můžete přeskočit další krok, který se používá k vytvoření konzolové aplikace ve složce TestProject.
Na příkazovém řádku terminálu vytvořte novou konzolovou aplikaci v zadané složce, zadejte následující řádek:
dotnet new console -o ./CsharpProjects/TestProjectTento příkaz rozhraní příkazového řádku .NET používá šablonu programu .NET k vytvoření nového projektu konzolové aplikace jazyka C# v zadaném umístění složky. Příkaz pro vás vytvoří složky CsharpProjects a TestProject a jako název souboru
.csprojpoužije TestProject.Pokud se zobrazí zpráva s oznámením, že soubory už existují, pokračujte dalším postupem. Znovu použijete existující soubory projektu.
V zobrazení PRŮZKUMNÍK rozbalte složku CsharpProjects .
Měla by se zobrazit složka TestProject a dva soubory, programový soubor jazyka C# s názvem Program.cs a soubor projektu C# s názvem TestProject.csproj.
V nabídce Soubor editoru Visual Studio Code vyberte Otevřít složku.
V dialogovém okně Otevřít složku vyberte složku CsharpProjects a pak vyberte Vybrat složku.
V zobrazení PRŮZKUMNÍK rozbalte složku TestProject a pak vyberte Program.cs.
Odstraňte existující řádky kódu.
Tento projekt konzoly C# použijete k vytváření, sestavování a spouštění ukázek kódu během tohoto modulu.
Zavřete panel Terminálu.
Vytvoření proměnné uvnitř bloku kódu
Začnete tím, že se podíváte na případ, kdy se proměnná inicializuje uvnitř bloku kódu.
Ujistěte se, že máte visual Studio Code otevřený a Program.cs zobrazený na panelu Editor.
Poznámka:
Program.cs by měl být prázdný. Pokud není, vyberte a odstraňte všechny řádky kódu.
Do editoru visual studio Code zadejte následující kód:
bool flag = true; if (flag) { int value = 10; Console.WriteLine($"Inside the code block: {value}"); }V nabídce Soubor editoru Visual Studio Code vyberte Uložit.
Soubor Program.cs musí být uložen před sestavením nebo spuštěním kódu.
Na panelu PRŮZKUMNÍK otevřete terminál v umístění složky TestProject, klikněte pravým tlačítkem myši na TestProject a pak vyberte Otevřít v integrovaném terminálu.
Otevře se panel terminálu. Terminál by měl obsahovat příkazový řádek, který ukazuje, že terminál je otevřený v umístění složky TestProject.
Na příkazovém řádku terminálu spusťte kód zadáním příkazu dotnet run a stiskněte Enter.
Poznámka:
Pokud se zobrazí zpráva "Nepodařilo se najít projekt ke spuštění", ujistěte se, že příkazový řádek terminálu zobrazí očekávané umístění složky TestProject. Příklad:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Měl by se zobrazit následující výstup:
Inside the code block: 10
Toto je očekávaný výstup. Ale co když chcete získat přístup k proměnné value mimo if blok kódu příkazu?
Pokus o přístup k proměnné mimo blok kódu, ve kterém je deklarován
V editoru Visual Studio Code vytvořte nový řádek kódu pod blokem
ifkódu příkazu.Na prázdný řádek kódu, který jste vytvořili, přidejte následující řádek kódu:
Console.WriteLine($"Outside the code block: {value}");Ověřte, že aktualizovaný kód vypadá takto:
bool flag = true; if (flag) { int value = 10; Console.WriteLine($"Inside the code block: {value}"); } Console.WriteLine($"Outside the code block: {value}");Uložte soubor kódu a pak pomocí editoru Visual Studio Code spusťte svůj kód.
Zadáním
dotnet runz příkazového řádku terminálu spusťte kód.Všimněte si, že při pokusu o spuštění aplikace se zobrazí chyba kompilace:
Program.cs(7,46): error CS0103: The name 'value' does not exist in the current context
Část Program.cs(7,46) zprávy vám řekne, že chyba je přidružena k řádku 7 v souboru Program.cs ve sloupci 46.
Tato chyba se vygeneruje, protože proměnná deklarovaná uvnitř bloku kódu je přístupná (může se zobrazit pouze) v rámci tohoto bloku kódu. Vzhledem k tomu, že proměnnou nelze získat přístup mimo blok kódu, ve kterém je deklarována, value nelze získat přístup z řádku 7 kódu.
Proměnná deklarovaná v bloku kódu metody se označuje jako místní proměnná. Při prohlížení článků, které popisují obor proměnných, se může zobrazit termín místní proměnná .
Přesunutí deklarace proměnné nad blok kódu
Pokud chcete získat přístup k proměnné uvnitř bloku kódu i mimo blok kódu, budete muset před blokem kódu (nad) deklarovat proměnnou, aby kód mimo blok kódu mohl proměnnou "zobrazit".
Následujícím způsobem aktualizujte kód v editoru visual Studio Code:
bool flag = true; int value; if (flag) { Console.WriteLine($"Inside the code block: {value}"); } value = 10; Console.WriteLine($"Outside the code block: {value}");Než si aktualizace prohlédnou, udělejte si chvilku.
Všimněte si, že
valueje nyní deklarován (ale není inicializován) mimoifblok kódu.Pomocí editoru Visual Studio Code uložte aktualizace a spusťte kód.
Všimněte si, že se stále zobrazuje chyba kompilace.
Tentokrát se při pokusu o spuštění aplikace zobrazí následující chyba kompilace:
Program.cs(6,49): error CS0165: Use of unassigned local variable 'value'Chyba je přidružena k řádku 6 uvnitř bloku kódu, protože
valuenení inicializován (nebyla přiřazena hodnota). Pokud byl řádekvalue = 10;kódu umístěn nad blokemifkódu příkazu, aplikace by správně zkompilovala a všechno by bylo v pořádku. Od té dobyvaluevšak není inicializován, nelze k němu přistupovat uvnitř bloku kódu.Než se pokusíte o přístup k proměnným, zajistíte, aby se tyto proměnné inicializovaly.
Inicializace proměnné jako součásti deklarace proměnné
Chcete-li inicializovat
valuejako součást deklarace proměnné, aktualizujte kód následujícím způsobem:bool flag = true; int value = 0; if (flag) { Console.WriteLine($"Inside the code block: {value}"); } value = 10; Console.WriteLine($"Outside the code block: {value}");Tento kód řeší chybu kompilace "nepřiřazená místní proměnná" inicializací
valuev rámci deklarace proměnné.Pomocí editoru Visual Studio Code uložte a spusťte svůj kód.
Všimněte si, že při spuštění aplikace se zobrazí následující výstup:
Inside the code block: 0 Outside the code block: 10
Prozkoumání interpretace kódu kompilátoru
Aby se zabránilo chybám za běhu, kompilátor jazyka C# analyzuje kód v editoru Editoru editoru Editoru editoru editoru Visual Studio Code a během procesu sestavení. Kompilátor ale nemusí vždy interpretovat kód stejným způsobem jako vy.
Podívejte se na následující dva ukázky kódu, které vypadají, že slouží ke stejnému účelu:
// 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}");
Můžete si všimnout, že tyto dva vzorky by měly vždy vytvořit stejný výsledek, ale kompilátor jazyka C# interpretuje tyto dva vzorky kódu odlišně.
Pro první vzorový kód kompilátor interpretuje flag jako logickou proměnnou, která by mohla být přiřazena hodnotu buď true nebo false. Kompilátor dospěl k závěru, že pokud flag je false, value nebude inicializován při druhém Console.WriteLine() spuštění. Kompilátor v podstatě považuje za možné následující dvě cesty spuštění kódu:
// path when flag = true
int value;
value = 10;
Console.WriteLine($"Inside the code block: {value}");
Console.WriteLine($"Outside the code block: {value}");
A
// path when flag = false
int value;
Console.WriteLine($"Outside the code block: {value}");
Vzhledem k tomu, že kompilátor považuje druhou cestu za možnost (pro vzorový kód 1), vygeneruje během procesu sestavení chybovou zprávu. Kromě toho editor kódu v editoru Visual Studio Code vás upozorní na tento problém zobrazením červené vlnovky pod value (pod blokem kódu).
V případě druhého vzorku kódu je v souladu s závěrem, že obsah if bloku kódu příkazu bude vždy proveden (true je vždy true). Kompilátor negeneruje chybu sestavení, protože interpretuje druhou ukázku kódu tak, aby měla jednu cestu spuštění následujícím způsobem:
int value;
value = 10;
Console.WriteLine($"Inside the code block: {value}");
Console.WriteLine($"Outside the code block: {value}");
Rekapitulace
Zde je několik důležitých věcí, které byste si o blocích kódu měli zapamatovat:
- Když deklarujete proměnnou uvnitř bloku kódu, její viditelnost je pro tento blok kódu místní a tato proměnná nemůže být přístupná mimo blok kódu.
- Chcete-li zajistit, aby byla proměnná viditelná uvnitř i mimo blok kódu, musíte tuto proměnnou deklarovat před blokem kódu (mimo blok kódu i nad blokem kódu).
- Před pokusem o přístup k nim se ujistěte, že se proměnné inicializují (pro všechny potenciální cesty spuštění kódu).