Do sada smo videli da se C# program sastoji od različitih delova: klasa, metoda i naredbi.

Sada treba da naučimo gde možemo da definišemo promenljivu i gde tu promenljivu možemo da koristimo.

1. Šta je blok?

U C# jeziku blok je deo programa koji je omeđen vitičastim zagradama:

{
    // naredbe
}

Na primer, telo metode Main() predstavlja jedan blok:

static void Main()
{
    Console.WriteLine("Zdravo!");
}

Sve između:

{

i

}

pripada tom bloku.


2. Promenljiva definisana u bloku

Promenljivu možemo definisati unutar bloka:

static void Main()
{
    int godine = 17;

    Console.WriteLine(godine);
}

Promenljiva godine je definisana unutar bloka metode Main().

Ona se može koristiti u tom bloku.

static void Main()
{
    int godine = 17;

    Console.WriteLine(godine);
    Console.WriteLine(godine + 1);
}

Rezultat:

17
18

3. Šta znači „nivo bloka“?

Kada kažemo da je podatak definisan na nivou bloka, to znači da je promenljiva definisana unutar određenog bloka i da je njena oblast važenja (scope) vezana za taj blok.

Na primer:

static void Main()
{
    int broj = 10;

    Console.WriteLine(broj);
}

Promenljiva broj postoji u okviru ovog bloka.

Možemo je koristiti:

Console.WriteLine(broj);

ali samo dok se nalazimo u odgovarajućem bloku.


4. Primer sa unutrašnjim blokom

Pogledajmo malo složeniji primer:

static void Main()
{
    int broj = 10;

    {
        int rezultat = broj * 2;

        Console.WriteLine(rezultat);
    }
}

Ovde imamo dva bloka.

Spoljašnji:

{
    int broj = 10;

    {
        int rezultat = broj * 2;

        Console.WriteLine(rezultat);
    }
}

i unutrašnji:

{
    int rezultat = broj * 2;

    Console.WriteLine(rezultat);
}

Promenljiva broj je definisana u spoljašnjem bloku, pa joj možemo pristupiti i iz unutrašnjeg bloka.

Promenljiva rezultat je definisana u unutrašnjem bloku.

Zato je možemo koristiti unutar tog bloka.


5. Zapamtiti:

Promenljiva definisana u nekom bloku može se koristiti u tom bloku i njegovim unutrašnjim blokovima, ali ne i izvan tog bloka.

Primer:

static void Main()
{
    int broj = 10;

    {
        int rezultat = broj * 2;

        Console.WriteLine(rezultat);
    }

    Console.WriteLine(broj);
}

Ovo je ispravno.

broj možemo koristiti i unutar unutrašnjeg bloka i nakon njega, jer je definisan u spoljašnjem bloku.

Ali:

static void Main()
{
    {
        int rezultat = 20;

        Console.WriteLine(rezultat);
    }

    Console.WriteLine(rezultat); // GREŠKA
}

Ovo nije ispravno.

Zašto?

Zato što je rezultat definisan u unutrašnjem bloku i izvan tog bloka više nije dostupan.


6. Veza sa metodama

Ovo je posebno važno kada radimo sa metodama.

Na primer:

static void Main()
{
    int broj = 10;

    Console.WriteLine(broj);
}

Promenljiva broj pripada bloku metode Main().

Ako imamo drugu metodu:

static void Main()
{
    int broj = 10;

    Console.WriteLine(broj);
}

static void Test()
{
    Console.WriteLine(broj); // GREŠKA
}

Test() ne može direktno da koristi promenljivu broj.

Zašto?

Zato što je broj definisan unutar bloka metode Main().

Možemo reći:

Main()
 └── broj

Test()
 └── ne vidi promenljivu broj

7. Primer sa if naredbom

Blokovi se ne pojavljuju samo kod metoda.

Na primer, if naredba takođe može imati svoj blok:

int broj = 10;

if (broj > 5)
{
    string poruka = "Broj je veći od 5";

    Console.WriteLine(poruka);
}

Promenljiva poruka postoji samo u okviru if bloka.

Zato ovo nije ispravno:

int broj = 10;

if (broj > 5)
{
    string poruka = "Broj je veći od 5";
}

Console.WriteLine(poruka); // GREŠKA

8. Zašto je ovo korisno?

Definisanje podataka na nivou bloka omogućava da promenljive koristimo samo tamo gde su nam potrebne.

Na taj način:

  • program je pregledniji;

  • smanjuje se mogućnost grešaka;

  • različiti delovi programa mogu imati svoje promenljive;

  • lakše je održavati program.

Zamislite da imamo veliki program sa mnogo promenljivih.  Ne želimo da svaka promenljiva bude dostupna u svakom delu programa.

Zato koristimo oblast važenja promenljive (scope).


9. Primer koji povezuje sve ovo

using System;

class Program
{
    static void Main()
    {
        Console.Write("Unesite broj: ");
        double broj = double.Parse(Console.ReadLine());

        double koren = Math.Sqrt(broj);

        Console.WriteLine("Kvadratni koren je: " + koren);
    }
}
 

Promenljive broj i koren definisane su unutar bloka metode Main().

Zato ih možemo koristiti u tom bloku.


10. Još jedan primer

using System;

class Program
{
    static void Main()
    {
        int broj = 10;

        if (broj > 0)
        {
            int rezultat = broj * 2;

            Console.WriteLine(rezultat);
        }

        Console.WriteLine(broj);
    }
}

Ovde imamo:

Main blok
│
├── broj
│
└── if blok
    │
    └── rezultat

broj možemo koristiti u oba bloka.

rezultat možemo koristiti samo u if bloku.


11. Pravilo za pamćenje

Što je promenljiva definisana „unutra“, dostupna je tom bloku i njegovim unutrašnjim blokovima. Kada izađemo iz tog bloka, promenljiva više nije dostupna.

Možemo zamisliti kutije:

+---------------------------+
| Spoljašnji blok           |
|                           |
|  broj                     |
|                           |
|  +---------------------+  |
|  | Unutrašnji blok     |  |
|  |                     |  |
|  | rezultat            |  |
|  +---------------------+  |
|                           |
+---------------------------+

Unutrašnji blok može da koristi ono što se nalazi u spoljašnjem bloku.

Ali spoljašnji blok ne može da koristi promenljivu koja postoji samo u unutrašnjem bloku.


12. Mini-zadatak

Šta će se desiti kada se izvrši sledeći program?

static void Main()
{
    int a = 5;

    {
        int b = 10;

        Console.WriteLine(a);
        Console.WriteLine(b);
    }

    Console.WriteLine(a);
}

Odgovor:

5
10
5

Zašto?

  • a je definisana u spoljašnjem bloku i dostupna je i unutrašnjem bloku.

  • b je definisana u unutrašnjem bloku i dostupna je samo tamo.


13. Zadatak za samostalan rad

Napisati program koji:

  1. učitava broj;

  2. ako je broj pozitivan, definiše promenljivu kvadrat;

  3. izračunava kvadrat broja;

  4. ispisuje rezultat.

Početak programa:

int broj = int.Parse(Console.ReadLine());

if (broj > 0)
{
    // ovde definisati promenljivu kvadrat
}
Pitanje za razmišljanje

Da li promenljivu kvadrat možemo koristiti ovde?

if (broj > 0)
{
    int kvadrat = broj * broj;
}

Console.WriteLine(kvadrat);

Ne.

Promenljiva kvadrat definisana je u if bloku i izvan njega više nije dostupna.


Zaključak

Kod definisanja podataka važno je da znamo gde je promenljiva definisana i gde može da se koristi.

To nazivamo oblašću važenja promenljive (scope).

Osnovno pravilo je:

Promenljiva definisana u bloku
        ↓
dostupna u tom bloku
        ↓
dostupna u unutrašnjim blokovima
        ↓
nije dostupna izvan tog bloka

Ovo pravilo će nam biti veoma važno kada budemo radili sa metodama, if naredbama, petljama i klasama.

Last modified: Friday, 18 September 2026, 10:20 AM