| Главная » Файлы » Мои файлы |
Учимся программировать на языке MQL4-Урок 4
| 09.10.2011, 02:20 | |
| Урок 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; В MQL4 существует 11 операций присваивания: ![]() 3 - Операции сравнения Операции сравнения сравнивают два значения (два операнда) и возвращают либо True, либо False. Это как ответить на вопрос "Вася выше Саши ? Да/Нет ?" Например: Код: 4 == 4; //true 4 < 4; //false 4 <= 4 //true; ![]() 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 - на это стоит посмотреть. Всегда улыбаюсь | |
| Просмотров: 502 | Загрузок: 0 | Комментарии: 1 | | |
| Всего комментариев: 0 | |




