Příkazy a smyčky jazyka C# if
– kurz podmíněné logiky
V tomto kurzu se naučíte, jak napsat kód jazyka C#, který prozkoumá proměnné a na základě těchto proměnných změní cestu provádění. Napíšete kód jazyka C# a zobrazíte výsledky jeho kompilace a spuštění. Tento kurz obsahuje řadu lekcí, které se zabývají konstrukty větvení a smyček v jazyce C#. V těchto kurzech se seznámíte se základy jazyka C#.
Tip
Pokud chcete vložit fragment kódu do detailního režimu , měli byste použít klávesovou zkratku (Ctrl + v nebo cmd + v).
Požadavky
Kurz očekává, že máte počítač nastavený pro místní vývoj. Pokyny k instalaci a přehled vývoje aplikací v .NET najdete v tématu Nastavení místního prostředí .
Pokud dáváte přednost spuštění kódu, aniž byste museli nastavovat místní prostředí, projděte si interaktivní verzi tohoto kurzu v prohlížeči.
Rozhodování pomocí příkazu if
Vytvořte adresář s názvem branches-tutorial. Nastavte ho jako aktuální adresář a spusťte následující příkaz:
dotnet new console -n BranchesAndLoops -o .
Důležité
Šablony jazyka C# pro .NET 6 používají příkazy nejvyšší úrovně. Pokud jste už upgradovali na .NET 6, vaše aplikace nemusí odpovídat kódu v tomto článku. Další informace najdete v článku o nových šablonách jazyka C# generování příkazů nejvyšší úrovně.
Sada .NET SDK 6 také přidává sadu implicitníchglobal using
direktiv pro projekty, které používají následující sady SDK:
- Microsoft.NET.Sdk
- Microsoft.NET.Sdk.Web
- Microsoft.NET.Sdk.Worker
Tyto implicitní global using
direktivy zahrnují nejběžnější obory názvů pro typ projektu.
Další informace najdete v článku o implicitních direktivách using.
Tento příkaz vytvoří novou konzolovou aplikaci .NET v aktuálním adresáři. Ve svém oblíbeném editoru otevřete soubor Program.cs a nahraďte obsah následujícím kódem:
int a = 5;
int b = 6;
if (a + b > 10)
Console.WriteLine("The answer is greater than 10.");
Vyzkoušejte tento kód zadáním dotnet run
v okně konzoly. Na konzoli by se měla zobrazit zpráva "Odpověď je větší než 10". Upravte deklaraci b
, aby součet byl menší než 10:
int b = 3;
Zadejte dotnet run
znovu. Protože odpověď je menší než 10, nic se nevytiskne. Testovaná podmínka není splněná. Nemáte žádný kód, který by bylo možné provést, protože jste zatím napsali jenom jednu z možných větví příkazu if
: větev pro splnění podmínky.
Tip
Když se budete učit pracovat s C# (nebo každým jiným programovacím jazykem), budete při psaní kódu dělat chyby. Kompilátor najde a nahlásí chyby. Pečlivě si prohlédněte výstup chyby a kód, který chybu vygeneroval. S nalezením problému vám obvykle může pomoct chyba kompilátoru.
Tato první ukázka ukazuje sílu logických if
typů a . Logická hodnota je proměnná, která může mít jednu ze dvou hodnot: true
nebo false
. Jazyk C# definuje speciální typ bool
pro logické proměnné. Příkaz if
kontroluje hodnotu typu bool
. Pokud je tato hodnota true
, provede se příkaz následující za if
. Jinak se přeskočí. Tento proces kontroly podmínek a spouštění příkazů na základě těchto podmínek je účinný.
Spolupráce if a else
Chcete-li ve větvích True a False provést různý kód, vytvoříte větev else
, která se provede, když podmínka není splněná. else
Zkuste větev. Přidejte poslední dva řádky v kódu níže (měli byste už mít první čtyři):
int a = 5;
int b = 3;
if (a + b > 10)
Console.WriteLine("The answer is greater than 10");
else
Console.WriteLine("The answer is not greater than 10");
Příkaz následující za klíčovým slovem else
se provede jen tehdy, když má testovaná podmínka hodnotu false
. Kombinace if
a s logickými podmínkami poskytuje veškerý výkon, který potřebujete ke zpracování podmínek a true
false
.else
Důležité
Důvodem odsazení pod příkazy if
a else
je snadnější čtení pro uživatele. Jazyk C# považuje odsazení nebo prázdné znaky za významné. Příkaz následující za klíčovým slovem if
nebo else
se provede na základě podmínky. Všechny ukázky v tomto kurzu se řídí běžným postupem odsazení řádků na základě toku řízení příkazů.
Vzhledem k tomu, že odsazení není důležité, musíte použít {
a }
k označení, kdy chcete, aby více než jeden příkaz byl součástí bloku, který se spouští podmíněně. Programátoři v C# obvykle používají tyto složené závorky pro všechny klauzule if
a else
. Následující příklad je stejný jako ten, který jste vytvořili. Upravte výše uvedený kód tak, aby odpovídal následujícímu kódu:
int a = 5;
int b = 3;
if (a + b > 10)
{
Console.WriteLine("The answer is greater than 10");
}
else
{
Console.WriteLine("The answer is not greater than 10");
}
Tip
Ve zbývající části tohoto kurzu všechny ukázky kódu obsahují složené závorky a dodržují akceptované postupy.
Můžete testovat složitější podmínky. Za kód, který jste zatím napsali, přidejte následující kód:
int c = 4;
if ((a + b + c > 10) && (a == b))
{
Console.WriteLine("The answer is greater than 10");
Console.WriteLine("And the first number is equal to the second");
}
else
{
Console.WriteLine("The answer is not greater than 10");
Console.WriteLine("Or the first number is not equal to the second");
}
Symbol ==
testuje rovnost. Použití ==
odliší test rovnosti od přiřazení, které jste viděli v a = 5
.
Zápis &&
představuje „a zároveň“. To znamená, že když se má provést větev True, musí být splněny obě podmínky. Tyto příklady také ukazují, že můžete mít v každé podmíněné větvi víc příkazů, pokud je uzavřete mezi {
a }
. Můžete také použít ||
k reprezentaci "nebo". Za to, co jste zatím napsali, přidejte následující kód:
if ((a + b + c > 10) || (a == b))
{
Console.WriteLine("The answer is greater than 10");
Console.WriteLine("Or the first number is equal to the second");
}
else
{
Console.WriteLine("The answer is not greater than 10");
Console.WriteLine("And the first number is not equal to the second");
}
Upravte hodnoty a
, b
a c
a přepněte mezi &&
a ||
, abyste je mohli prozkoumat. Lépe porozumíte tomu, jak fungují operátory &&
a ||
.
Dokončili jste první krok. Než začnete s další částí, přesuneme aktuální kód do samostatné metody. To usnadňuje zahájení práce s novým příkladem. Vložte existující kód do metody s názvem ExploreIf()
. Volejte ji z horní části programu. Po dokončení těchto změn by váš kód měl vypadat takto:
ExploreIf();
void ExploreIf()
{
int a = 5;
int b = 3;
if (a + b > 10)
{
Console.WriteLine("The answer is greater than 10");
}
else
{
Console.WriteLine("The answer is not greater than 10");
}
int c = 4;
if ((a + b + c > 10) && (a > b))
{
Console.WriteLine("The answer is greater than 10");
Console.WriteLine("And the first number is greater than the second");
}
else
{
Console.WriteLine("The answer is not greater than 10");
Console.WriteLine("Or the first number is not greater than the second");
}
if ((a + b + c > 10) || (a > b))
{
Console.WriteLine("The answer is greater than 10");
Console.WriteLine("Or the first number is greater than the second");
}
else
{
Console.WriteLine("The answer is not greater than 10");
Console.WriteLine("And the first number is not greater than the second");
}
}
Zakomentujte volání na ExploreIf()
adresu . Výstup bude při práci v této části méně nepřehledný:
//ExploreIf();
Spustí //
komentář v jazyce C#. Komentáře jsou jakýkoli text, který chcete zachovat ve zdrojovém kódu, ale nespouštět jako kód. Kompilátor negeneruje z komentářů žádný spustitelný kód.
Použití smyček k opakování operací
V této části použijete smyčky k opakování příkazů. Za volání ExploreIf
přidejte tento kód :
int counter = 0;
while (counter < 10)
{
Console.WriteLine($"Hello World! The counter is {counter}");
counter++;
}
Příkaz while
zkontroluje podmínku a provede příkaz nebo blok příkazu následující za příkazem while
. Opakovaně kontroluje podmínku a spouští tyto příkazy, dokud není podmínka nepravdivá.
V tomto příkladu je ještě jeden nový operátor. Zápis ++
za proměnnou counter
je operátor inkrementace. Přidá hodnotu 1 k hodnotě counter
a uloží ji do counter
proměnné .
Důležité
Ujistěte se, že se while
podmínka smyčky při spuštění kódu změní na false. Jinak vytvoříte nekonečnou smyčku, ve které program nikdy neskončí. To není v této ukázce demonstrováno, protože musíte vynutit ukončení programu pomocí kombinace kláves CTRL-C nebo jiným způsobem.
Smyčka while
otestuje podmínku před spuštěním kódu, který následuje za while
. Smyčka do
... while
nejdřív spustí kód a potom zkontrolujte tuto podmínku. Smyčka do while se zobrazuje v následujícím kódu:
int counter = 0;
do
{
Console.WriteLine($"Hello World! The counter is {counter}");
counter++;
} while (counter < 10);
Tato do
smyčka a předchozí while
smyčka vygenerují stejný výstup.
Práce se smyčkou for
Smyčka for se běžně používá v jazyce C#. Vyzkoušejte tento kód:
for (int index = 0; index < 10; index++)
{
Console.WriteLine($"Hello World! The index is {index}");
}
Předchozí kód provede stejnou práci jako while
smyčka a smyčka, do
kterou jste už použili. Příkaz for
má tři části, které řídí jeho fungování.
První část je for initializer: int index = 0;
deklaruje, že index
je proměnná smyčky, a nastaví její počáteční hodnotu na 0
.
Prostřední část je for podmínka: index < 10
deklaruje, že tato for
smyčka pokračuje v provádění, dokud je hodnota čítače menší než 10.
Poslední částí je iterátor for: index++
určuje, jak upravit proměnnou smyčky po spuštění bloku za příkazem for
. V tomto případě určuje, že index
se má po každém provedení bloku zvýšit o 1.
Experimentujte sami. Vyzkoušejte každou z následujících variant:
- Změňte inicializační výraz, aby začínal jinou hodnotou.
- Změňte podmínku tak, aby se zastavila při jiné hodnotě.
Až skončíte, přejdeme k tomu, abyste si vyzkoušeli, co jste se naučili, a napsali kus kódu sami.
Existuje ještě jeden příkaz smyčky, který není v tomto kurzu popsaný: příkaz .foreach
Příkaz foreach
opakuje svůj příkaz pro každou položku v posloupnosti položek. Nejčastěji se používá s kolekcemi, takže se jí věnujeme v dalším kurzu.
Vytvoření vnořených smyček
Smyčku while
, do
nebo for
lze vnořit do jiné smyčky a vytvořit tak matici pomocí kombinace každé položky ve vnější smyčce s každou položkou ve vnitřní smyčce. Pojďme tak vytvořit sadu alfanumerických párů, které budou představovat řádky a sloupce.
Jedna for
smyčka může generovat řádky:
for (int row = 1; row < 11; row++)
{
Console.WriteLine($"The row is {row}");
}
Sloupce může vygenerovat jiná smyčka:
for (char column = 'a'; column < 'k'; column++)
{
Console.WriteLine($"The column is {column}");
}
Jednu smyčku můžete vnořit do druhé a vytvořit tak páry:
for (int row = 1; row < 11; row++)
{
for (char column = 'a'; column < 'k'; column++)
{
Console.WriteLine($"The cell is ({row}, {column})");
}
}
Vidíte, že vnější smyčka se zvýší jednou za každé úplné spuštění vnitřní smyčky. Otočte vnoření řádků a sloupců a prohlédněte si změny sami. Až budete hotovi, umístěte kód z této části do metody s názvem ExploreLoops()
.
Kombinace větví a smyček
Teď když jste viděli příkaz if
a konstruktory cyklů v jazyce C#, zkuste, jestli dokážete v jazyce C# napsat kód, který zjistí součet všech celých čísel od 1 do 20, která jsou dělitelná 3. Tady je několik tipů:
- Operátor
%
vrací zbytek po operaci dělení. - Příkaz
if
poskytuje podmínku pro zjištění, jestli konkrétní číslo má být součástí tohoto součtu. - Smyčka
for
pomůže zopakovat sérii kroků pro všechna čísla od 1 do 20.
Vyzkoušejte si to sami. A potom se podívejte, jak jste si vedli. Za odpověď byste měli dostat 63. Jednu z možných odpovědí uvidíte tak, že si zobrazíte dokončený kód na GitHubu.
Dokončili jste kurz "větve a smyčky".
V kurzu Pole a kolekce můžete pokračovat ve vlastním vývojovém prostředí.
Další informace o těchto konceptech najdete v těchto článcích: