C# Language
Instrukcje warunkowe
Szukaj…
Instrukcja If-Else
Ogólnie rzecz biorąc, programowanie często wymaga decision
lub branch
w kodzie, aby uwzględnić sposób działania kodu w różnych danych wejściowych lub warunkach. W języku programowania C # (i większości języków programowania w tym zakresie) najprostszym, a czasem najbardziej użytecznym sposobem utworzenia gałęzi w programie jest If-Else
instrukcji If-Else
.
Załóżmy, że mamy metodę (inaczej funkcję), która przyjmuje parametr int, który będzie reprezentował wynik do 100, a metoda wydrukuje komunikat informujący, czy zdamy, czy nie.
static void PrintPassOrFail(int score)
{
if (score >= 50) // If score is greater or equal to 50
{
Console.WriteLine("Pass!");
}
else // If score is not greater or equal to 50
{
Console.WriteLine("Fail!");
}
}
Patrząc na tę metodę, możesz zauważyć ten wiersz kodu ( score >= 50
) w instrukcji If
. Można to postrzegać jako warunek boolean
, w którym jeśli warunek zostanie oceniony jako równy true
, wówczas uruchamiany jest kod znajdujący się pomiędzy if
{ }
.
Na przykład, jeśli ta metoda została wywołana w ten sposób: PrintPassOrFail(60);
, wynikiem tej metody byłby wydruk z konsoli z napisem Pass! ponieważ wartość parametru 60 jest większa lub równa 50.
Jednak jeśli metoda została wywołana jak: PrintPassOrFail(30);
, wynik metody wypisałby się z informacją Niepowodzenie! . Wynika to z faktu, że wartość 30 nie jest większa ani równa 50, dlatego zamiast instrukcji If
uruchamiany jest kod pomiędzy else
{ }
.
W tym przykładzie powiedzieliśmy, że wynik powinien wzrosnąć do 100, co w ogóle nie zostało uwzględnione. Aby uwzględnić wynik, który nie przekroczy 100 lub prawdopodobnie spadnie poniżej 0, zobacz przykład Instrukcja If-Else If-Else .
Instrukcja If-Else If-Else
Zgodnie z przykładem instrukcji If-Else nadszedł czas na wprowadzenie instrukcji Else If
. Instrukcja Else If
następuje bezpośrednio po instrukcji If
w strukturze If-Else If-Else , ale wewnętrznie ma podobną składnię jak instrukcja If
. Służy do dodawania do kodu większej liczby gałęzi niż to, co może zrobić prosta instrukcja If-Else .
W przykładzie z instrukcji If-Else w przykładzie określono, że wynik wzrasta do 100; jednak nigdy nie było na to żadnych kontroli. Aby to naprawić, zmodyfikujmy metodę z instrukcji If-Else, aby wyglądała następująco:
static void PrintPassOrFail(int score)
{
if (score > 100) // If score is greater than 100
{
Console.WriteLine("Error: score is greater than 100!");
}
else if (score < 0) // Else If score is less than 0
{
Console.WriteLine("Error: score is less than 0!");
}
else if (score >= 50) // Else if score is greater or equal to 50
{
Console.WriteLine("Pass!");
}
else // If none above, then score must be between 0 and 49
{
Console.WriteLine("Fail!");
}
}
Wszystkie te instrukcje będą działały w kolejności od góry do dołu, aż do spełnienia warunku. W tej nowej aktualizacji metody dodaliśmy dwie nowe gałęzie, aby uwzględnić wynik wykraczający poza granice .
Na przykład, jeśli teraz PrintPassOFail(110);
metodę w naszym kodzie jako PrintPassOFail(110);
, wyjściem byłby wydruk z konsoli z informacją o błędzie: wynik jest większy niż 100! ; a jeśli PrintPassOrFail(-20);
metodę w naszym kodzie, na przykład PrintPassOrFail(-20);
, wynik powiedziałby : Błąd: wynik jest mniejszy niż 0! .
Instrukcje zamiany
Instrukcja switch umożliwia testowanie zmiennej pod kątem równości z listą wartości. Każda wartość nazywana jest sprawą, a włączana zmienna jest sprawdzana dla każdej sprawy przełączającej.
Instrukcja switch
jest często bardziej zwięzła i zrozumiała niż if...else if... else..
instrukcje podczas testowania wielu możliwych wartości dla jednej zmiennej.
Składnia jest następująca
switch(expression) {
case constant-expression:
statement(s);
break;
case constant-expression:
statement(s);
break;
// you can have any number of case statements
default : // Optional
statement(s);
break;
}
istnieje kilka rzeczy, które należy wziąć pod uwagę podczas korzystania z instrukcji switch
- Wyrażenie użyte w instrukcji switch musi mieć typ integralny lub wyliczony lub musi być typu klasowego, w którym klasa ma jedną funkcję konwersji na typ integralny lub wyliczony.
- W przełączniku możesz mieć dowolną liczbę instrukcji. Po każdym przypadku następuje wartość do porównania i dwukropek. Wartości do porównania muszą być unikalne w każdej instrukcji switch.
- Instrukcja switch może mieć opcjonalną domyślną wielkość liter. Przypadku domyślnego można użyć do wykonania zadania, gdy żaden ze przypadków nie jest prawdziwy.
- Każda sprawa musi kończyć się instrukcją
break
, chyba że jest to pusta instrukcja. W takim przypadku wykonanie będzie kontynuowane w przypadku poniżej. Instrukcja break może być również pominięta, gdy używana jest instrukcjagoto case
return
,throw
lubgoto case
.
Przykład można podać z ocenami
char grade = 'B';
switch (grade)
{
case 'A':
Console.WriteLine("Excellent!");
break;
case 'B':
case 'C':
Console.WriteLine("Well done");
break;
case 'D':
Console.WriteLine("You passed");
break;
case 'F':
Console.WriteLine("Better try again");
break;
default:
Console.WriteLine("Invalid grade");
break;
}
Jeśli warunki instrukcji są standardowymi wyrażeniami i wartościami logicznymi
Poniższe oświadczenie
if (conditionA && conditionB && conditionC) //...
jest dokładnie równoważne z
bool conditions = conditionA && conditionB && conditionC;
if (conditions) // ...
innymi słowy, warunki w instrukcji „if” po prostu tworzą zwykłe wyrażenie boolowskie.
Częstym błędem podczas pisania instrukcji warunkowych jest bezpośrednie porównanie z true
i false
:
if (conditionA == true && conditionB == false && conditionC == true) // ...
Można to przepisać jako
if (conditionA && !conditionB && conditionC)