Поиск…


Синтаксис

  • если выражение ... end
  • если выражение ... else ... end
  • если выражение ... elseif выражение ... end
  • if выражение ... elseif expression ... else ... end

параметры

параметр Описание
выражение выражение, имеющее логический смысл

Условие IF

Условия являются фундаментальной частью почти любой части кода. Они используются для выполнения некоторых частей кода только в некоторых ситуациях, но не для других. Давайте рассмотрим базовый синтаксис:

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

Выход:

Not OK

В этом примере мы видим, что if состоит из двух частей: условия и кода для запуска, если условие истинно. Код - это все, написанное после условия и до его end if . Первое условие не было выполнено, и, следовательно, код внутри него не был выполнен.

Вот еще один пример:

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

Приведенное выше условие всегда будет истинным и будет отображать вывод. It's true! ,

Мы также можем написать:

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

На этот раз условие всегда ложно, поэтому мы никогда не получим результат Equal .

Хотя условия, которые всегда бывают истинными или ложными, мало используются, потому что, если они всегда являются ложными, мы можем просто удалить эту часть кода, и если они всегда верны, то условие не требуется.

Условие IF-ELSE

В некоторых случаях мы хотим запустить альтернативный код, если условие ложно, для этого мы используем необязательную часть else :

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

Здесь мы видим, что, поскольку a не меньше 10 вторая часть кода, после выполнения else и мы получаем выход a bigger than 10 . Теперь давайте посмотрим на другую попытку:

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

В этом примере показано, что мы не проверяли, действительно ли a действительно меньше 10, и мы получаем неправильное сообщение, потому что условие проверяет только выражение как оно есть, а ЛЮБОЙ случай, который не равен true ( a = 10 ), приведет к вторая часть должна быть выполнена.

Этот тип ошибок является очень распространенной ловушкой для начинающих и опытных программистов, особенно когда условия становятся сложными и их всегда следует помнить

Условие IF-ELSEIF

Используя else мы можем выполнить некоторую задачу, когда условие не выполняется. Но что, если мы хотим проверить второе условие в случае, если первый был ложным. Мы можем сделать это так:

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

Это также называется «вложенным условием» , но здесь мы имеем спецификацию, которая может улучшить читаемость кода и уменьшить вероятность ошибки anr - мы можем написать:

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

используя elseif мы можем проверить другое выражение в одном блоке условий, и это не ограничивается одной попыткой:

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

Следует проявлять elseif осторожность при выборе использования elseif в строке, так как только один из них будет выполнен из всего блока if до end . Итак, в нашем примере, если мы хотим отобразить все делители 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

не только 3, но и 5 - делитель 15, но часть, которая проверяет деление на 5, не достигается, если какое-либо из выражений выше оно было истинным.

Наконец, мы можем добавить else один (и только один ) после всех условий elseif для выполнения кода, когда ни одно из приведенных выше условий не выполняется:

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

Вложенные условия

Когда мы используем условие в другом условии, мы говорим, что условия «вложены». Один частный случай вложенных условий задается опцией elseif , но существует множество других способов использования вложенных условий. Давайте рассмотрим следующий код:

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 

При a=2 выход будет a is even , что является правильным. При a=3 выход будет a is odd , что тоже правильно, но пропускает проверку, если 3 является делителем a . Это связано с тем, что условия вложены, так что только если первое true , то мы переходим во внутреннее, а если a нечетно, ни одно из внутренних условий не проверяется. Это несколько противоположно использованию elseif где только если первое условие false чем мы проверяем следующий. Как насчет проверки деления на 5? только число, которое имеет 6 как делитель (оба и 2), будет проверено для деления на 5, и мы можем проверить и увидеть, что при a=30 выход:

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

Мы также должны заметить две вещи:

  1. Положение end в нужном месте для каждого , if имеет решающее значение для набора условий для работы , как и следовало ожидать, так отступы больше , чем хорошая рекомендация здесь.
  2. Позиция инструкции else также имеет решающее значение, поскольку нам нужно знать, в каком if (и их может быть несколько) мы хотим что-то сделать, если выражение if false .

Давайте посмотрим на другой пример:

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

И выход будет:

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

мы видим, что у нас есть только 6 строк для 6 чисел, потому что условия вложены таким образом, чтобы обеспечить только одну печать на номер, а также (хотя не видно непосредственно из вывода) никаких дополнительных проверок не выполняется, поэтому если число даже не имеет смысла проверять, является ли 4 одним из его делителей.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow