MQL4 УРОК 4 – Операции и выражения в MQL4
Что такое операции и выражения?
На самом деле Вы прекрасно знаете, что такое операции. Если я Вам
скажу, что +,-,*,/ – элементарные арифметические операции, Вы очень
быстро вспомните, что означает слово "операция”.
Я уже слышу, как Вы говорите: "О! Так я же знаю, что такое операции, расскажи, что же такое тогда выражения?”
Идентификаторы (Вы их ещё помните? Если нет, то гляньте в урок СИНТАКСИС) совместно с Операциями образуют Выражения.
Запутались? Рассмотрим это на примере:
Здесь:
x,y,z и w – идентификаторы.
=,* и / – операции.
А вся строчка – это выражение.
Если в конце выражения поставить символ ";”, то оно превращается в оператор:
Комбинации выражений формируют оператор.
Комбинации операторов формируют функцию.
Комбнации функций формируют программу.
В оставшейся части урока мы будем говорить про типы операций в MQL4.
Начнём с элементарных математических операций:
1 – Арифметические операции
В MQL4 существует 9 арифметических операций:
Замечание: Нельзя комбинировать операция инкремента и декремента с другими выражениями.
Например, следующая строчка некорректна:
Но можно так:
2 – Операции присваивания
Смысл любого выражения в формировании результата, а затем присваивания этого результата левому операнду.
Например:
Здесь мы умножаем B на C и присваиваем результат A.
В MQL4 существует 11 операций присваивания:
3 – Операции сравнения
Операции сравнения сравнивают два значения (два операнда) и возвращают либо True, либо False.
Это как ответить на вопрос "Вася выше Саши ? Да/Нет ?”
Например:
|
4 == 4; //true 4 < 4; //false 4 <= 4 //true; |
В MQL4 существует 6 операций сравнения:
4 – Логические операции
Логические операторы заимствованы из Булевой алгебры, которая суть
манипулирование верностью концептуальных абстрактных высказываний, не
вдаваясь в истинный смысл концепций. Значние верности в Булевой алгебре
может принимать лишь два значения: верно или неверно (true OR false).
В MQL4 логические операции также называются Булевыми операциями.
В MQL4 используются три основных логических операции:
Замечание: Логические операции выполняются слева
направо. Поэтому, если в операторе A && B; левый операнд равен
нулю, то правый операнд даже не рассматривается. Аналогично, если в
операторе A || B; левый оператор не равен нулю, то правый операнд даже
не рассматривается.
5 – Битовые операции
Битовые (или побитовые) операции очень похожи на логические операции,
но они работают на более низком уровне – бинарном уровне представления
данных.
В MQL4 доступны следующие битовые операции:
Замечание: Оба операнда, учавствующих в побитовых операциях, должны быть типа int.
6 – Другие операции
Есть несколько операций в MQL4, которые не входят ни в одну из предыдущих категорий:
- Операция индексирования массива []
- Операция вызова функции ()
- Операция разделения аргументов функций , (запятая)
Мы подробнее узнаем про массивы и функции в следующем уроке. Так что просто запомните эти операции, как "Другие операции”.
Приоритеты операций. Моё любимое ;)
Если у Вас есть оператор, состоящий из нескольких выражений, и Вы
явно не указываете, в каком порядке Вы хотите их выполнения, то порядок
выполнения определяется исходя из приоритетов операций, входящих в
оператор. Операции с более высоким приоритетом выполняются первыми.
Например, все мы из школы знаем, что операция деления имеет более
высокий приоритет, чем операция сложения. Поэтому, следующие два
выражения эквивалентны:
|
x + y / 100 x + (y / 100) //недвусмысленно, рекомендую писать так |
Используя составные операторы необходимо быть точным и указывать
порядок выполнения операций явно с помощью скобок (). Такая практика
сделает Ваш код более лёгким для прочтения и редактирования. *
Далее следует список операций. Чем выше операция в списке, тем выше
её приоритет. Операции с более высоки приоритетом выполняются раньше
операций с более низким приоритетом. Если выбор стоит между двумя
одинаковыми операциями, то следует помнить, что все бинарные операции
(те, в которых учавствуют два операнда) выполняются слева направо, а все
операции присваивания – наоборот – справа налево.
Оставляю список на английском. Заодно будете знать, как называются операции на ‘родном’ языке ;)
() Function call From left to right
[] Array element selection
! Negation From left to right
~ Bitwise negation
- Sign changing operation
* Multiplication From left to right
/ Division
% Module division
+ Addition From left to right
- Subtraction
<< Left shift From left to right >> Right shift
< Less than From left to right
<= Less than or equals > Greater than
>= Greater than or equals
== Equals From left to right
!= Not equal
& Bitwise AND operation From left to right
^ Bitwise exclusive OR From left to right
&& Logical AND From left to right
|| Logical OR From left to right
= Assignment From right to left
+= Assignment addition
-= Assignment subtraction
*= Assignment multiplication
/= Assignment division
%= Assignment module
>>= Assignment right shift
<<= Assignment left shift
&= Assignment bitwise AND
|= Assignment bitwise OR
^= Assignment exclusive OR
, Comma From left to right
* А теперь немного развлечения.
Обожаю приоритеты, потому что их почти никто никога наизусть не помнит.
Достаточно выучить парочку и ты уже царь среди равных тебе
программистов.
Например, можно спросить результат такого оператора ++ i ++; (но это уже
больше к C/C++, где есть правый и левый инкремент). Или такого: i +++
i;
А вообще, приоритеты – один из хороших козырей в IOCCC – International
Obfuscated C Code Contest — «международный конкурс запутанного кода на
Си».
|