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 instrukcja goto case return , throw lub goto 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)


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow