Szukaj…


Składnia

  • jeśli wyrażenie ... koniec
  • jeśli wyrażenie ... inaczej ... koniec
  • if expression ... elseif expression ... end
  • jeśli wyrażenie ... elseif wyrażenie ... else ... koniec

Parametry

Parametr Opis
wyrażenie wyrażenie, które ma logiczne znaczenie

JEŻELI warunek

Warunki są podstawową częścią prawie każdej części kodu. Służą do wykonywania niektórych części kodu tylko w niektórych sytuacjach, ale nie w innych. Spójrzmy na podstawową składnię:

a = 5;
if a > 10    % this condition is not fulfilled, so nothing will happen
    disp('OK')
end

if a < 10    % this condition is fulfilled, so the statements between the if...end are executed
    disp('Not OK')
end

Wynik:

Not OK

W tym przykładzie widzimy if składa się z 2 części: warunek i kod do uruchomienia, jeśli warunek jest prawdziwy. Kod to wszystko, co napisano po warunku, a przed end tego, if . Pierwszy warunek nie został spełniony i dlatego kod w nim nie został wykonany.

Oto inny przykład:

a = 5;
if a ~= a+1        % "~=" means "not equal to"
    disp('It''s true!') % we use two apostrophes to tell MATLAB that the ' is part of the string
end

Powyższy warunek zawsze będzie prawdziwy i wyświetli wynik It's true! .

Możemy również napisać:

a = 5;
if a == a+1    % "==" means "is equal to", it is NOT the assignment ("=") operator
    disp('Equal')
end

Tym razem warunek jest zawsze fałszywy, więc nigdy nie otrzymamy wyjścia Equal .

Nie ma jednak większego zastosowania w przypadku warunków, które zawsze są prawdziwe lub fałszywe, ponieważ jeśli zawsze są one fałszywe, możemy po prostu usunąć tę część kodu, a jeśli zawsze są one prawdziwe, wówczas warunek nie jest potrzebny.

Warunek IF-ELSE

W niektórych przypadkach chcemy uruchomić alternatywny kod, jeśli warunek jest fałszywy, w tym celu używamy opcjonalnej części else :

a = 20;
if a < 10
    disp('a smaller than 10')
else
    disp('a bigger than 10')
end

Widzimy tutaj, że ponieważ a nie jest mniejsze niż 10 druga część kodu jest wykonywana po wykonaniu else i otrzymujemy wynik a bigger than 10 . Teraz spójrzmy na kolejną próbę:

a = 10;
if a > 10
    disp('a bigger than 10')
else
    disp('a smaller than 10')
end

W tym przykładzie pokazano, że nie sprawdziliśmy, czy a jest rzeczywiście mniejsze niż 10, i otrzymujemy zły komunikat, ponieważ warunek sprawdza tylko wyrażenie, jakie jest, i ŻADNY przypadek, który nie jest równy prawdzie ( a = 10 ) spowoduje druga część do wykonania.

Ten rodzaj błędu jest bardzo częstą pułapką zarówno dla początkujących, jak i doświadczonych programistów, szczególnie gdy warunki stają się złożone i należy o tym zawsze pamiętać

Warunek IF-ELSEIF

Za pomocą else możemy wykonać pewne zadanie, gdy warunek nie jest spełniony. Ale co, jeśli chcemy sprawdzić drugi warunek na wypadek, gdyby pierwszy był fałszywy. Możemy to zrobić w ten sposób:

a = 9;
if mod(a,2)==0   % MOD - modulo operation, return the remainder after division of 'a' by 2
    disp('a is even')
else
    if mod(a,3)==0
        disp('3 is a divisor of a')
    end
end

OUTPUT:
3 is a divisor of a

Jest to również nazywane „stanem zagnieżdżonym” , ale tutaj mamy przypadek speciel, który może poprawić czytelność kodu i zmniejszyć ryzyko wystąpienia błędu anr - możemy napisać:

a = 9;
if mod(a,2)==0
    disp('a is even')
elseif mod(a,3)==0
    disp('3 is a divisor of a')
end

OUTPUT:
3 is a divisor of a

za pomocą elseif jesteśmy w stanie sprawdzić inne wyrażenie w tym samym bloku warunków i nie jest to ograniczone do jednej próby:

a = 25;
if mod(a,2)==0
    disp('a is even')
elseif mod(a,3)==0
    disp('3 is a divisor of a')
elseif mod(a,5)==0
    disp('5 is a divisor of a')
end

OUTPUT:
5 is a divisor of a

Należy zachować szczególną ostrożność, wybierając elseif z rzędu, ponieważ tylko jeden z nich zostanie wykonany ze wszystkich bloków if aby end blok. Tak więc w naszym przykładzie, jeśli chcemy, aby wyświetlić wszystkie dzielniki (z tych, które wyraźnie sprawdzić) powyższy przykład nie będzie dobre: a

a = 15;
if mod(a,2)==0
    disp('a is even')
elseif mod(a,3)==0
    disp('3 is a divisor of a')
elseif mod(a,5)==0
    disp('5 is a divisor of a')
end

OUTPUT:
3 is a divisor of a

nie tylko 3, ale także 5 jest dzielnikiem 15, ale część, która sprawdza podział przez 5, nie jest osiągana, jeśli którekolwiek z powyższych wyrażeń było prawdziwe.

Na koniec możemy dodać else jeden (i tylko jeden ) po wszystkich warunkach elseif , aby wykonać kod, gdy żaden z powyższych warunków nie jest spełniony:

a = 11;
if mod(a,2)==0
    disp('a is even')
elseif mod(a,3)==0
    disp('3 is a divisor of a')
elseif mod(a,5)==0
    disp('5 is a divisor of a')
else
    disp('2, 3 and 5 are not divisors of a')
end

OUTPUT:
2, 3 and 5 are not divisors of a

Warunki zagnieżdżone

Kiedy używamy warunku w innym warunku, mówimy, że warunki są „zagnieżdżone”. Jeden szczególny przypadek warunków zagnieżdżonych podano w opcji elseif , ale istnieje wiele innych sposobów korzystania z zagnieżdżonych warunków. Przeanalizujmy następujący kod:

a = 2;
if mod(a,2)==0    % MOD - modulo operation, return the remainder after division of 'a' by 2
    disp('a is even')
    if mod(a,3)==0
        disp('3 is a divisor of a')
        if mod(a,5)==0
            disp('5 is a divisor of a')
        end
    end
else
    disp('a is odd')
end 

Dla a=2 wyjście będzie a is even , co jest poprawne. Dla a=3 wyjście będzie a is odd , co również jest poprawne, ale pomija sprawdzenie, czy 3 jest dzielnikiem a . Wynika to z tego, że warunki są zagnieżdżone, więc tylko jeśli pierwsza jest true , wówczas przechodzimy do wewnętrznej, a jeśli a jest nieparzysta, żaden z warunków wewnętrznych nie jest nawet sprawdzany. Jest to nieco przeciwne do użycia elseif gdzie tylko jeśli pierwszy warunek jest false , sprawdzamy następny. Co powiesz na sprawdzenie podziału przez 5? tylko liczba, która ma 6 jako dzielnik (zarówno 2, jak i 3), zostanie sprawdzona pod kątem dzielenia przez 5, i możemy przetestować i zobaczyć, że dla a=30 wynikiem jest:

a is even
3 is a divisor of a
5 is a divisor of a

Powinniśmy również zauważyć dwie rzeczy:

  1. Pozycja end we właściwym miejscu dla każdego, if jest kluczowa dla zestawu warunków do działania zgodnie z oczekiwaniami, więc wcięcie jest więcej niż dobrą rekomendacją.
  2. Pozycja zdania else jest również kluczowa, ponieważ musimy wiedzieć, w którym if (a może być ich kilka) chcemy zrobić coś w przypadku, gdyby wyrażenie było false .

Spójrzmy na inny przykład:

for a = 5:10    % the FOR loop execute all the code within it for every a from 5 to 10
    ch = num2str(a);    % NUM2STR converts the integer a to a character
    if mod(a,2)==0
        if mod(a,3)==0
            disp(['3 is a divisor of ' ch])
        elseif  mod(a,4)==0
            disp(['4 is a divisor of ' ch])
        else
            disp([ch ' is even'])
        end
    elseif mod(a,3)==0
        disp(['3 is a divisor of ' ch])
        
    else
        disp([ch ' is odd'])
    end
end

Wyjście będzie:

5 is odd
3 is a divisor of 6
7 is odd
4 is a divisor of 8
3 is a divisor of 9
10 is even

widzimy, że mamy tylko 6 wierszy dla 6 liczb, ponieważ warunki są zagnieżdżone w sposób zapewniający tylko jeden wydruk na liczbę, a także (chociaż nie widać bezpośrednio z wyjścia) żadnych dodatkowych kontroli, więc jeśli liczba nie jest nawet nie ma sensu sprawdzać, czy 4 jest jednym z dzielników.



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