Příkazy (Průvodce programováním v C#)
Akce, které program provádí, jsou vyjádřeny v příkazech. Mezi běžné akce patří deklarování proměnných, přiřazování hodnot, volání metod, procházení kolekcí a větvení do jednoho nebo jiného bloku kódu v závislosti na dané podmínce. Pořadí, ve kterém se příkazy spouští v programu, se nazývá tok řízení nebo toku provádění. Tok řízení se může při každém spuštění programu lišit v závislosti na tom, jak program reaguje na vstup, který přijímá za běhu.
Příkaz se může skládat z jednoho řádku kódu, který končí středníkem, nebo řady jednořádkových příkazů v bloku. Blok příkazu je uzavřený v {} hranatých závorkách a může obsahovat vnořené bloky. Následující kód ukazuje dva příklady jednořádkových příkazů a blok víceřádkového příkazu:
public static void Main()
{
// Declaration statement.
int counter;
// Assignment statement.
counter = 1;
// Error! This is an expression, not an expression statement.
// counter + 1;
// Declaration statements with initializers are functionally
// equivalent to declaration statement followed by assignment statement:
int[] radii = [15, 32, 108, 74, 9]; // Declare and initialize an array.
const double pi = 3.14159; // Declare and initialize constant.
// foreach statement block that contains multiple statements.
foreach (int radius in radii)
{
// Declaration statement with initializer.
double circumference = pi * (2 * radius);
// Expression statement (method invocation). A single-line
// statement can span multiple text lines because line breaks
// are treated as white space, which is ignored by the compiler.
System.Console.WriteLine("Radius of circle #{0} is {1}. Circumference = {2:N2}",
counter, radius, circumference);
// Expression statement (postfix increment).
counter++;
} // End of foreach statement block
} // End of Main method body.
} // End of SimpleStatements class.
/*
Output:
Radius of circle #1 = 15. Circumference = 94.25
Radius of circle #2 = 32. Circumference = 201.06
Radius of circle #3 = 108. Circumference = 678.58
Radius of circle #4 = 74. Circumference = 464.96
Radius of circle #5 = 9. Circumference = 56.55
*/
Typy příkazů
Následující tabulka uvádí různé typy příkazů v jazyce C# a jejich přidružená klíčová slova s odkazy na témata, která obsahují další informace:
Kategorie | Klíčová slova jazyka C# / poznámky |
---|---|
Příkazy deklarace | Příkaz deklarace zavádí novou proměnnou nebo konstantu. Deklarace proměnné může volitelně přiřadit hodnotu proměnné. V konstantní deklaraci je požadováno přiřazení. |
Příkazy výrazů | Příkazy výrazů, které vypočítají hodnotu, musí uložit hodnotu do proměnné. |
Příkazy výběru | Příkazy výběru umožňují větvet do různých částí kódu v závislosti na jedné nebo více zadaných podmínkách. Další informace najdete v následujících tématech: |
Příkazy iterace | Příkazy iterace umožňují procházet kolekce, jako jsou pole, nebo opakovaně provádět stejnou sadu příkazů, dokud nebude splněna zadaná podmínka. Další informace najdete v následujících tématech: |
Jump – příkazy | Příkazy Jump přenesou řízení do jiné části kódu. Další informace najdete v následujících tématech: |
Příkazy zpracování výjimek | Příkazy zpracování výjimek umožňují řádné zotavení z výjimečných podmínek, ke kterým dochází za běhu. Další informace najdete v následujících tématech: |
checked a unchecked |
unchecked Příkazy checked umožňují určit, zda mají číselné operace celočíselného typu povoleno způsobit přetečení, když je výsledek uložen v proměnné, která je příliš malá, aby mohla obsahovat výslednou hodnotu. |
Příkaz await |
Pokud metodu označíte modifikátorem async , můžete v metodě použít operátor await . Když ovládací prvek dosáhne await výrazu v asynchronní metodě, ovládací prvek se vrátí volajícímu a průběh v metodě se pozastaví, dokud se neskončí očekávaný úkol. Po dokončení úlohy může provádění v metodě pokračovat.Jednoduchý příklad najdete v části Asynchronní metody metody. Další informace naleznete v tématu Asynchronní programování pomocí async a await. |
Příkaz yield return |
Iterátor provádí vlastní iteraci v kolekci, například seznam nebo pole. Iterátor používá příkaz yield return k vrácení každého prvku vždy po druhém. yield return Po dosažení příkazu se aktuální umístění v kódu zapamatuje. Při příštím volání iterátoru se z daného umístění restartuje spuštění.Další informace najdete v tématu Iterátory. |
Příkaz fixed |
Pevný příkaz zabraňuje uvolnění paměti v přemístění pohyblivé proměnné. Další informace najdete v opravené části. |
Příkaz lock |
Příkaz lock umožňuje omezit přístup k blokům kódu pouze na jedno vlákno najednou. Další informace najdete v tématu Zámek. |
Příkazy s popiskem | Můžete zadat popisek a pak pomocí klíčového slova goto přejít na příkaz s popiskem. (Viz příklad na následujícím řádku.) |
Prázdný příkaz | Prázdný příkaz se skládá z jednoho středníku. Nedělá nic a dá se použít na místech, kde se vyžaduje příkaz, ale není nutné provádět žádnou akci. |
Příkazy deklarace
Následující kód ukazuje příklady deklarací proměnných s počátečním přiřazením a bez počátečního přiřazení a konstantní deklaraci s nezbytnou inicializací.
// Variable declaration statements.
double area;
double radius = 2;
// Constant declaration statement.
const double pi = 3.14159;
Příkazy výrazů
Následující kód ukazuje příklady příkazů výrazů, včetně přiřazení, vytvoření objektu s přiřazením a vyvolání metody.
// Expression statement (assignment).
area = 3.14 * (radius * radius);
// Error. Not statement because no assignment:
//circ * 2;
// Expression statement (method invocation).
System.Console.WriteLine();
// Expression statement (new object creation).
System.Collections.Generic.List<string> strings =
new System.Collections.Generic.List<string>();
Prázdný příkaz
Následující příklady ukazují dvě použití pro prázdný příkaz:
void ProcessMessages()
{
while (ProcessMessage())
; // Statement needed here.
}
void F()
{
//...
if (done) goto exit;
//...
exit:
; // Statement needed here.
}
Vložené příkazy
Některé příkazy, například příkazy iterace, mají vždy vložený příkaz, který je následuje. Tento vložený příkaz může být buď jeden příkaz, nebo více příkazů uzavřených {} závorkami v bloku příkazu. Dokonce i jednořádkové vložené příkazy lze uzavřít do {} závorek, jak je znázorněno v následujícím příkladu:
// Recommended style. Embedded statement in block.
foreach (string s in System.IO.Directory.GetDirectories(
System.Environment.CurrentDirectory))
{
System.Console.WriteLine(s);
}
// Not recommended.
foreach (string s in System.IO.Directory.GetDirectories(
System.Environment.CurrentDirectory))
System.Console.WriteLine(s);
Vložený příkaz, který není uzavřený v {} hranatých závorkách, nemůže být příkaz deklarace ani příkaz s popiskem. Toto je znázorněno v následujícím příkladu:
if(pointB == true)
//Error CS1023:
int radius = 5;
Vložte vložený příkaz do bloku, který chybu opraví:
if (b == true)
{
// OK:
System.DateTime d = System.DateTime.Now;
System.Console.WriteLine(d.ToLongDateString());
}
Vnořené bloky příkazů
Bloky příkazů je možné vnořit, jak je znázorněno v následujícím kódu:
foreach (string s in System.IO.Directory.GetDirectories(
System.Environment.CurrentDirectory))
{
if (s.StartsWith("CSharp"))
{
if (s.EndsWith("TempFolder"))
{
return s;
}
}
}
return "Not found.";
Nedostupné příkazy
Pokud kompilátor zjistí, že tok řízení nemůže za žádných okolností dosáhnout konkrétního příkazu, vytvoří upozornění CS0162, jak je znázorněno v následujícím příkladu:
// An over-simplified example of unreachable code.
const int val = 5;
if (val < 4)
{
System.Console.WriteLine("I'll never write anything."); //CS0162
}
specifikace jazyka C#
Další informace najdete v části Příkazy specifikace jazyka C#.