MQL4 УРОК 6 – Циклы и Условия (часть 2) Добро пожаловать на шестое занятие моего курса.
Надеюсь, что Вам понравились предыдущие уроки.
Мы уже поговорили про циклы. Теперь Вы знаете, что циклы – это один
из двух способов изменить обычный порядок выполнения программы сверху
вниз. Второй способ – это условия.
Условия могут провоцировать однократный прыжок в другую часть программы, в зависимости от значения некоторого выражения.
1 – Оператор if
Оператор if является самым простым среди операторов условия.
Пример:
|
if( x < 100 ) Print("hi"); |
После if идут круглые скобки, в которых записывается выражение проверки (в данном случае x < 100). Если результат выражение проверки является истиной (true),
то тело оператора if будет выполнено. В данном случае тело состоит из
одного оператора – Print("hi”); . А если результат выражения проверки
является ложью (false), то тело оператора if НЕ выполняется, а контроль переходит оператору, следующему за телом if.
Схема 1. Оператор if.
Несколько операторов в теле if
Точно, как и в циклах, тело оператора if может состоять из нескольких операторов, взятых в фигурные скобки.
Пример:
|
if(current_price==stop_loss) { Print("you have to close the order"); PlaySound("warning.wav"); } |
Обратите внимание на сумбол == и выражении проверки. Это одна из
операций сравнения, которые Вы изучали в уроке 4 "Операции и Выражения”.
Отсюда происходит очень много ошибок – когда Вы забываете символ ==, и вместо него используете символ операции присваивания =.
Вложенные циклы и условия
Циклы и условия можно вкладывать друг в друга.
Пример:
|
for(int i=2; i<10; i++) if(i%2==0) { Print("It's definetly not a prime number"); PlaySound("warning.wav"); } |
Заметьте, что тело цикла в данном примере НЕ нужно заключать в
фигурные скобки, потому что оператор if и все операторы внутри его тела
считаются как один оператор.
2 – Оператор if … else
Оператор if позволяет что-то сделать, если
определённое условие выполняется. Допустим, мы хотим сделать что-то
другое, если это условие не выполнено. Для этого есть оператор if … else. Он состоит из оператора if и его тела, после чего идёт ключевое слово else и его тело.
Пример:
|
if(current_price>stop_loss) Print("It’s not too late to stop, please stop!"); else Print("you're playing well today!"); |
Схема 2. Оператор if … else.
Вложенные операторы if…else
Операторы if … else и оператор if можно как угодно вкладывать друг в друга.
Пример:
|
if(current_price>stop_loss) Print("It’s not too late to stop, please stop!"); if(current_price==stop_loss) Print("It’s time to stop!"); else Print("you're playing well today!"); |
Есть опасность, связанная с вложенными операторами if … else. По невнимательности Вы можете случайно связать какой-то else не с тем if.
Чтобы избежать подобных ошибок, можно сделать одно из двух:
1 – всегда брать пары if … else в фигурные скобки.
Вот так:
|
if(current_price>stop_loss) { Print("It’s not too late to stop, please stop!"); if(current_price==stop_loss) Print("It’s time to stop!"); else Print("you're playing well today!"); } |
2 – Если Вам не подходит 1й вариант (слишком много этих if … else,
или Вам просто лень), то просто следуйте правилу: связывать else с
ближайшим if.
3 – Оператор switch
Если у Вас есть большое дерево условий, и все условия зависят от одного параметра, то можно применить оператор switch.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
switch(x) { case 'A': Print("CASE A"); break; case 'B': case 'C': Print("CASE B or C"); break; default: Print("NOT A, B or C"); break; } |
После ключевого слова switch идут круглые скобки. Внутри этих скобок
находится switch-константа. Внутри фигурных скобок находятся
case-константы – это проверяемые условия switch-константы. Они
записываются в виде case <значение>: <что делать>.
<Значение> может быть integer, character или неизменным
выражением. Неизменность выражения означает, что оно не зависит от
переменных. Например, выражение X+Y не является неизменным.
Как же работает указанный пример?
Оператор switch сравнивает switch-константу поочерёдно со всеми case-константами.
В случае x==’A’ программа напечатает "CASE A” и оператор break; прервёт оператор switch. Контроль передастся за пределы блока switch.
В случае x==’B’ или x==’C', программа напечатает "CASE B or C”. Это потому что нет оператора break; в case ‘B’: .
В случае x!= ни одной из case-констант, оператор switch выполнит блок default: и напечатает "NOT A, B jr C”.
Схема 3. Оператор switch.
|