КАК ЗАРАБОТАТЬ НА ФОРЕКСЕ
Пятница, 03.05.2024, 08:21
Приветствую Вас Гость | RSS
 
Главная Учимся программировать на языке MQL4-Урок 4 - Операции и выражения в MQL4РегистрацияВход
<a href="http://instaforex.com/ru/">Форекс портал</a>
Меню сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Урок 4 - Операции и выражения в MQL4

Что такое операции и выражения?

На самом деле Вы прекрасно знаете, что такое операции. Если я Вам скажу, что +,-,*,/ - элементарные арифметические операции, Вы очень быстро вспомните, что означает слово "операция".

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

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

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

Код:
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;
А вообще, приоритеты - один из хороших козырей в IOCCC - International Obfuscated C Code Contest — «международный конкурс запутанного кода на Си».
http://en.wikipedia.org/wiki/International..._C_Code_Contest - на это стоит посмотреть. Всегда улыбаюсь
Поиск
<a href="http://instaforex.com/ru/">Форекс портал</a>
Copyright MyCorp © 2024
Бесплатный конструктор сайтов - uCoz