Syntaxe a sémantika programovacího jazyka

Pojem proměnná, její deklarace a inicializace. Rozsah platnosti proměnných (lokální, statické). Syntaktická kategorie příkaz a výraz v programovacím jazyce

Syntaxe vs Sématika

  • Syntaxe je správnost gramatiky -> správnost napsaných slov, v programovacím jazyce příkazů a výrazů. Syntaxe se kontroluje syntaktickým analyzátorem.

  • Sématika je význam jednotlivých slov -> v programovacím jazyce význam příkazů nebo výrazů.

Proměnná

Proměnná je odkaz na hodnotu. Tato hodnota je uložená v paměti. Skrze proměnnou k této hodnotě přistupujeme.

V programování můžeme zápis proměnné rozdělit na deklaraci a inicializaci.

Deklarace

Jedná se o vytvoření odkazu do paměti, kde paměť ještě nenese žádnou hodnotu. Deklarace vytvoří proměnnou, ale hodnotu této proměnné přiřadíme až pomocí inicializace.

int number; // Deklarace primitivní proměnné typu int
Car car; // Deklarace objektové proměnné typu Car

Inicializace

Inicializací přiřadíme do paměťového místa, na které proměnná odkazuje, hodnotu. Tedy, přiřazujeme proměnné hodnotu. Můžeme to udělat ihned při deklaraci, nebo až později.

int number = 5; // Deklarace s inicializací
Car car; // Deklarace objektové proměnné typu Car
car = new Car(); // inicializace po deklaraci

Rozsah platnosti proměnných

Rozsah platnosti nám určuje, v jakých částech kódu můžeme k proměnné přistupovat vzhledem k tomu, kde byla vytvořena

Obecně platí, že pokud deklarujeme proměnnou v určitém bloků kódu, tak lze k této proměnné přistupovat pouze v tomto bloku a ve vnořených blocích.

while (a > 6){
   int value = a;
}

System.out.println(value); // Tady k proměnné již přistupit nelze. Není zde vidět. Paměť, která se vztahovala jak k referenci (jméno proměnná), tak k inicializované hodnotě již byla uvolměna.

Lokální proměnná

Jedná se o proměnnou, která je deklarována v rámci určitého bloku, funkce. Je tedy lokální, stejně jako na vesničce (bloku) je lokální jednota. Lidi ve vesničce o ni ví, ale ve vesnici vedle, nedej bože městě už nikdo netuší, že tam něco takového je.

Lokální proměnná je příklad výše. Je nepřístupná vně bloku. Lokální proměnná se značí private.

Statická proměnná

Tato proměnná náleží třídě. To znamená, že nezávisle na instanci třídy (objektu té samé třídy) se jedná o přístup do stejné paměti.

class People(){
   public static int peopleCount = 0;

   public People(){
       peopleCount++;
   }


}

class main{

   public static void main[String[] args]{
       People somePeople = new People(); 
       System.out.println(somePeople.peopleCount) // výsledek bude 1

      People someOtherPeople = new People(); 
       System.out.println(somePeople.peopleCount) // výsledek bude 2

   }

}

Proměnné třídy

Proměnná třídy může být několika typů :

  • private je viditelná pouze v rámci třídy (classA.variable nefunguje) -> potřebujeme getter
class ClassA(){
   private int variable = 5; // privátní proměnná

   public int getVariable(){ // public getter, který nám dá hodnotu privátní proměnné
       return variable; 
   }


}
  • public (viditelná i mimo třídu (classA.variable funguje))
  • protected (chová se jako private, ale pro potomky třídy se chová jako public)

Syntaktická kategorie příkaz a výraz (příkaz vs výraz)

Příkaz (Statement) vyjadřuje činnost, která má být provedena. Příkazy obsahují klíčová slova (while,if, new, return....) a určují vzhled programovacího jazyka Klíčová slova nelze použít jako názvy proměnných. Příkazy nám jsou také schopné vrátit hodnotu.

Výraz (Expression) na rozdíl od příkazu slouží k vyhodnocení. Jeho vedlejším účinkem, výstupem je true nebo false. Není nám schopný vrátit hodnotu a používá se k vyhodnocení, ergo vyhodnotí se na určitou hodnotu.

Např.: \(2+5\), \(y-6\), \(4\neq4\) se vyhodnotí jako NEPRAVDA

Zdroje