Rozsah platnosti proměnných

Proměnné a datové typy

SSŠVT


Rozsah platnosti proměnných

Co je to rozsah platnosti?

Rozsah platnosti určité proměnné (anglicky scope) je část zdrojového kódu, kde je proměnná definována (existuje, lze se na ni odkázat).

Pokud máme několik bloků kódu vnořených do sebe (např. v metodě Main je nějaké větvení), pak proměnná definovaná ve vnějším bloku existuje i v bloku vnitřním (její rozsah platnosti se vztahuje i na vnitřní blok).

Naopak to ale neplatí. Proměnná definovaná ve vnitřním bloku neexistuje (nelze se na ni odkázat) v bloku vnějším.


Příklad s deklarací ve vnějším bloku

static void Main(string[] args)
{
    char answer;
    Console.Write("Je naše Slunce hvězdou? (a/n): ");
    answer = Convert.ToChar(Console.ReadLine());
    if (answer == 'a')
    {
        Console.WriteLine("Odpověděli jste: {0}", answer);
        Console.WriteLine("Vaše odpověď je SPRÁVNÁ.");
    }
    else
    {
        Console.WriteLine("Odpověděli jste: {0}", answer);
        Console.WriteLine("Vaše odpověď NENÍ správná.");
    }
}
        

Na proměnnou answer se můžeme odkázat i v bloku příkazu if, kde vypisujeme, co uživatel odpověděl, přestože je tato proměnná deklarována v bloku metody Main, který je bloku příkazu if nadřazený (je vůči němu vnější).


Příklad s deklarací ve vnitřním bloku

static void Main(string[] args)
{
    int repeatCount = 5;
    do
    {
        string message = "Zbývá iterací: " + repeatCount.ToString();
        Console.WriteLine(message);
        repeatCount--;
    } while(repeatCount > 0);

    Console.WriteLine("Poslední hláška byla:");
    Console.WriteLine(message);
}
        

Překladač jazyka C#, resp. editor ve Visual Studiu nám poslední řádek podtrhne červeně a VS odmítne náš program spustit, protože na tomto řádku používáme proměnnou, jejíž rozsah platnosti skončil uvnitř těla cyklu. Proměnná message mimo tělo cyklu do-while neexistuje. Mimo tělo cyklu se na ni nemůžeme odkázat.