Урок №4 Операции и выражения в MQL4

Уроки

             И снова здравствуйте! Сегодня мы с Вами продолжим осваивать язык MQL4. В этом уроке мы рассмотрим такое понятие как операции и выражения в MQL4. Что такое операции и выражения? На самом деле Вы прекрасно знаете, что такое операции. Если я Вам скажу, что +,-,*,/ – элементарные арифметические операции, Вы очень быстро вспомните, что означает слово “операция”.

              Я уже слышу, как Вы говорите: “О! Так я же знаю, что такое операции, расскажи, что же такое тогда выражения?”

            Идентификаторы (Вы их ещё помните? Если нет, то гляньте в урок СИНТАКСИС) совместно с Операциями образуют Выражения.

Запутались? Рассмотрим это на примере:

Untitled-1

Здесь:

x,y,z и w – идентификаторы.
=,* и / – операции.
А вся строчка – это выражение.

           Если в конце выражения поставить символ “;”, то оно превращается в оператор:

Untitled-2

Комбинации выражений формируют оператор.

Комбинации операторов формируют функцию.

Комбнации функций формируют программу.

В оставшейся части урока мы будем говорить про типы операций в MQL4.

Начнём с элементарных математических операций:

Арифметические операции

В MQL4 существует 9 арифметических операций:

1

          Замечание: Нельзя комбинировать операция инкремента и декремента с другими выражениями.

Например, следующая строчка некорректна:

Untitled-3

Но можно так:

Untitled-4

Операции присваивания

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

Например:

Untitled-5

             Здесь мы умножаем B на C и присваиваем результат A.

В MQL4 существует 11 операций присваивания:

2

Операции сравнения

        Операции сравнения сравнивают два значения (два операнда) и возвращают либо True, либо False. Это как ответить на вопрос “Вася выше Саши ? Да/Нет ?”

Например:

Untitled-6

В MQL4 существует 6 операций сравнения:

3

Логические операции

         Логические операторы заимствованы из Булевой алгебры, которая суть манипулирование верностью концептуальных абстрактных высказываний, не вдаваясь в истинный смысл концепций. Значение верности в Булевой алгебре может принимать лишь два значения: верно или неверно (true OR false).

          В MQL4 логические операции также называются Булевыми операциями.

В MQL4 используются три основных логических операции:

4

         Замечание: Логические операции выполняются слева направо. Поэтому, если в операторе A && B; левый операнд равен нулю, то правый операнд даже не рассматривается. Аналогично, если в операторе A || B; левый оператор не равен нулю, то правый операнд даже не рассматривается.

Битовые операции

          Битовые (или побитовые) операции очень похожи на логические операции, но они работают на более низком уровне – бинарном уровне представления данных.

В MQL4 доступны следующие битовые операции:

5

            Замечание: Оба операнда, участвующих в побитовых операциях, должны быть типа int.

 Другие операции

         Есть несколько операций в MQL4, которые не входят ни в одну из предыдущих категорий:

  • Операция индексирования массива []
  • Операция вызова функции ()
  • Операция разделения аргументов функций , (запятая)

               Мы подробнее узнаем про массивы и функции в следующем уроке. Так что просто запомните эти операции, как “Другие операции”.

Приоритеты операций

             Если у Вас есть оператор, состоящий из нескольких выражений, и Вы явно не указываете, в каком порядке Вы хотите их выполнения, то порядок выполнения определяется исходя из приоритетов операций, входящих в оператор. Операции с более высоким приоритетом выполняются первыми.

            Например, все мы из школы знаем, что операция деления имеет более высокий приоритет, чем операция сложения. Поэтому, следующие два выражения эквивалентны:

Untitled-7

            Используя составные операторы необходимо быть точным и указывать порядок выполнения операций явно с помощью скобок (). Такая практика сделает Ваш код более лёгким для прочтения и редактирования. *

           Далее следует список операций. Чем выше операция в списке, тем выше её приоритет. Операции с более высоки приоритетом выполняются раньше операций с более низким приоритетом. Если выбор стоит между двумя одинаковыми операциями, то следует помнить, что все бинарные операции (те, в которых участвуют два операнда) выполняются слева направо, а все операции присваивания – наоборот – справа налево.

        Оставляю список на английском. Заодно будете знать, как называются операции на ‘родном’ языке 😉

() 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 — «международный конкурс запутанного кода на Си».

                 http://en.wikipedia…._C_Code_Contest – на это стоит посмотреть. Всегда улыбаюсь.

             Вот и сейчас наш урок подошел к завершению. Очень надеюсь, что и этот материал был не слишком сложным. Ну а в  следующем уроке мы рассмотрим Циклы и Условия (часть 1).

Добавить комментарий