Zoeken…


Syntaxis

  • als expressie ... einde
  • als expressie ... anders ... einde
  • als expressie ... anders expressie ... einde
  • als expressie ... anders expressie ... anders ... einde

parameters

Parameter Beschrijving
uitdrukking een uitdrukking die logische betekenis heeft

ALS staat

Voorwaarden zijn een fundamenteel onderdeel van bijna elk deel van de code. Ze worden gebruikt om sommige delen van de code alleen in sommige situaties uit te voeren, maar niet in andere. Laten we eens kijken naar de basissyntaxis:

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

Output:

Not OK

In dit voorbeeld zien we dat het if uit 2 delen bestaat: de voorwaarde en de code die moet worden uitgevoerd als de voorwaarde waar is. De code is alles geschreven na de voorwaarde en vóór het end daarvan if . Aan de eerste voorwaarde is niet voldaan en daarom is de code erin niet uitgevoerd.

Hier is nog een voorbeeld:

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

De bovenstaande voorwaarde is altijd waar en geeft de uitvoer weer. It's true! .

We kunnen ook schrijven:

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

Deze keer is de voorwaarde altijd onwaar, dus we zullen de uitvoer nooit Equal .

Er is echter niet veel gebruik voor voorwaarden die altijd waar of onwaar zijn, want als ze altijd onwaar zijn, kunnen we dit deel van de code eenvoudig verwijderen en als ze altijd waar zijn, is de voorwaarde niet nodig.

ALS-ELSE staat

In sommige gevallen willen we een alternatieve code uitvoeren als de voorwaarde false is, hiervoor gebruiken we het optionele else gedeelte:

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

Hier zien we dat omdat a niet kleiner is dan 10 het tweede deel van de code, nadat de else is uitgevoerd en we de uitvoer a bigger than 10 . Laten we nu eens kijken naar een andere poging:

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

In dit voorbeeld wordt getoond dat we niet hebben gecontroleerd of a inderdaad kleiner is dan 10, en we krijgen een verkeerd bericht omdat de voorwaarde alleen de expressie controleert zoals deze is, en ELK geval dat niet gelijk is aan waar ( a = 10 ) zal de tweede deel uit te voeren.

Dit type fout is een veel voorkomende valkuil voor zowel beginners als ervaren programmeurs, vooral wanneer de omstandigheden complex worden, en moet altijd in gedachten worden gehouden

IF-ELSEIF staat

else we een taak uitvoeren als niet aan de voorwaarde is voldaan. Maar wat als we een tweede voorwaarde willen controleren voor het geval dat de eerste fout was. We kunnen het op deze manier doen:

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

Dit wordt ook wel "geneste voorwaarde" genoemd , maar hier hebben we een speciel geval dat de leesbaarheid van de code kan verbeteren en de kans op een anr-fout kan verminderen - we kunnen schrijven:

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

met behulp van de elseif we een andere uitdrukking binnen hetzelfde blok van voorwaarden controleren, en dit is niet beperkt tot één poging:

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

Wees extra voorzichtig als u ervoor kiest om elseif op een rij te gebruiken, omdat slechts één ervan wordt uitgevoerd vanuit het if to end blok. Dus als we in ons voorbeeld alle delers van a (van degenen die we expliciet controleren) willen weergeven, is het bovenstaande voorbeeld niet goed:

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

niet alleen 3, maar ook 5 is een deler van 15, maar het deel dat de deling door 5 controleert, wordt niet bereikt als een van de bovenstaande uitdrukkingen waar was.

Ten slotte kunnen we een toe te voegen else (en slechts één) nadat alle elseif voorwaarden om een code wanneer geen van de bovenstaande voorwaarden wordt voldaan uit te voeren:

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

Geneste voorwaarden

Wanneer we een voorwaarde binnen een andere voorwaarde gebruiken, zeggen we dat de voorwaarden "genest" zijn. Een speciaal geval van geneste voorwaarden wordt gegeven door de elseif optie, maar er zijn talloze andere manieren om geneste voorwaarden te gebruiken. Laten we de volgende code bekijken:

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 

Voor a=2 is de uitvoer a is even , wat correct is. Voor a=3 is de uitvoer a is odd , wat ook correct is, maar mist de controle of 3 een deler is van a . Dit komt omdat de voorwaarden genest zijn, dus alleen als de eerste true , gaan we naar de binnenste en als a oneven is, worden geen van de innerlijke voorwaarden zelfs gecontroleerd. Dit is enigszins tegengesteld aan het gebruik van elseif waar alleen als de eerste voorwaarde false dan controleren we de volgende. Hoe zit het met het controleren van de verdeling door 5? alleen een getal met 6 als deler (zowel 2 als 3) wordt gecontroleerd op de deling door 5 en we kunnen testen en zien dat voor a=30 de uitvoer is:

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

We moeten ook twee dingen opmerken:

  1. De positie van het end op de juiste plaats voor elke if is cruciaal voor de set voorwaarden om te werken zoals verwacht, dus inspringen is meer dan een goede aanbeveling hier.
  2. De positie van de else verklaring is ook van cruciaal belang, want we moeten weten in welke if (en er een aantal van hen zou kunnen zijn) we iets willen doen in het geval van de expressie als false .

Laten we een ander voorbeeld bekijken:

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

En de output zal zijn:

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

we zien dat we slechts 6 regels voor 6 nummers hebben, omdat de voorwaarden zijn genest op een manier die slechts één afdruk per nummer garandeert, en ook (hoewel niet direct vanuit de uitvoer te zien) geen extra controles worden uitgevoerd, dus als een getal is niet eens, het heeft geen zin om te controleren of 4 een van de delers is.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow