Что такое операции и выражения?
На самом деле Вы прекрасно знаете, что такое операции. Если я Вам скажу, что +,-,*,/ — элементарные арифметические операции, Вы очень быстро вспомните, что означает слово "операция".
Я уже слышу, как Вы говорите: "О! Так я же знаю, что такое операции, расскажи, что же такое тогда выражения?"
Идентификаторы (Вы их ещё помните? Если нет, то гляньте в урок Синтаксис) совместно с Операциями образуют Выражения.
Запутались? Рассмотрим это на примере:
x = (y*z)/w
Здесь:
x,y,z и w — идентификаторы.
=,* и / — операции.
А вся строчка — это выражение.
Если в конце выражения поставить символ ";", то оно превращается в оператор:
x = (y*z)/w;
Комбинации выражений формируют оператор.
Комбинации операторов формируют функцию.
Комбнации функций формируют программу.
В оставшейся части урока мы будем говорить про типы операций в MQL4.
Начнём с элементарных математических операций:
1 — Арифметические операции
В MQL4 существует 9 арифметических операций:
Замечание: Нельзя комбинировать операция инкремента и декремента с другими выражениями.
Например, следующая строчка некорректна:
A=(B++)*5;
Но можно так:
A++; B=A*5;
2 — Операции присваивания
Смысл любого выражения в формировании результата, а затем присваивания этого результата левому операнду.
Например:
A = B * C;
Здесь мы умножаем 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;
До встречи на следующем уроке!