![]() | ![]() |
![]() |
#1 |
Pandora Directive
|
![]() JASS - Выражения Выражение - это часть кода, которая вычиляется, а затем вместо него подставляется вычисленное значение (конечно, у него есть тип). Большинство операторов используются вместе с выражениями. Переменные могут быть иницилизированны с выражением. Выражения могут "вкладываться" друг в друга. Этот раздел покажет все возможные выражения в JASS. Прим. переводчика: следует приметить, что даже одно число может считаться выражением, хоть и не попадает под определение, данное тут. Также хочу сказать, что слова "оператор" и "операция" тут будут значить одно и то же почти везде. Может и будут исключения. Арифметические операции code: expression + expression expression - expression expression * expression expression / expression - expression + expression Эти выражение производят складывание, вычитание, умножение и деление двух операндов, а также отрицание и тождество одного операнда. Умножение и деление имеет более высокий приоритет; у каждей "пары" одинаковый приоритет, и выполняются с лево на право. Таким образом: code: a + b * c - d / e Равняется: code: ( a + (b * c) ) - (d / e) Операнды должны быть либо integer, либо real. Если хотя бы один из них real, то и результат будет real, в других случая результат integer. Операции сравнения code: expression == expression expression != expression expression >= expression expression <= expression expression > expression expression < expression Эти выражения проверяют следующие условия: равно, не равно, больше или равно, меньше или равно, строго больше, строго меньше. Операнды операторов == и != могут быть любого подобного типа (т.е., оба должны быть числами / строками, один юнит, а другой destructable и т.д.). Возможен один особый случай - сравнение real и integer. У типов integer, real, boolean и string проверяются значения. У handle-подобных типов проверяются ссылки (т.е., проверяется ссылаются ли они на одно и то же). Примичание: это для первых двух проверок: == и !=. Все остальные операторы могут брать только integer и real. Все они возвращают boolean (случаи когда и что возвращают можно не рассматривать - и так понятно). Логические сравнения code: expression and expression expression or expression not expression Эти выражения производят логические операции и возвращают, соответственно, boolean. Операции "и", "или" и "не". У них самый низкий приоритет. code: a == b and c > d + e or f Равняется этому: code: ( (a == b) and (c > d + e) ) or f Строковые операторы code: expression + expression + используется для склеивание двух строк (как в Java). Учтите что тут имеются в виду любые данные типа строки, т.е., можно поставить любую функцию (всмысле, то что функция вернет) и т.п.. Тип результата будет string. Вызов функции code: func_name(arguments) Это примерно то же самое что и call (но не совсем). Параметры передаются тем же способом. Функция должна что-то вернуть, что и будет подставлено в выражение. Обращение к массивам code: array_variable[index] Это подставит значение, хранимое в ячейке массива. index, соответственно, номер ячейки. Это может быть любым выражением, которое даст integer, он и будет номером вызываемой ячейки массива. Обращение у функции code: function func_name Это выражение обращается к функции. Он вернет ссылку на эту функцию типа code. Она может быть передана функциям с параметром code (например, StartThread). Название переменной code: variable_name Это выражение вернет значение переменной. Название переменной составляется из цифр, букв и подчеркиваний. Должно начаться с буквы, и не может закончится подчеркиванием. Константы Константы могут быть числами (integer и real), строками и булинами. Также значение может быть null - ссылка никуда - для handle-подобных или строк. Константы integer это 32-битные целые числа. Например - 0, 1, 2, 4, 10, 14, 1000, 1234, 3245. Если первый знак числа 0 (например 016), то число принимается как восьмиричное. Если есть префикс 0x (например, 0xA15F), тогда число интерпретируется как шестнадцатиричное, и может содержать знаки a-f, которые будут приниматься за цифры. Целочисленные могут быть выражены строкой в кавычках (одинарных), в этом случае сохраняются биты знаков по таблице ASCII (4 байта = 32 бит). Такие значения исползуются для обозначения объектов (юнитов / способностей и т.д.) которые храняться в таблице объектов (.slk файлы в mpq). Там юниты обозначаются как раз такими четырех-значными кодами, например, 'abcd', 'AhGn', 'EEEE'. Числа типа real также 32-битные (с плавающей запятой, соответственно). Например, 1.0, 0.0, .34, 1.5, 1000.3, 324.32, 0.35. Константы булевых значений, это, соответственно, true и false. Строковые константы записываются в двойных кавычках, например "This is a string". Значение переменной string может быть null, в этом случае она ничего не вернет и не может быть использована (ей можно только дать значение). В строковой константе, обратный слэш используется, также как в C или Java, для написания "некоторых" символов. Например, для того чтобы в строке написать кавычки, мы напишем "This is a \"string\"". Прим. переводчика: хочу напомнить, что переменная-константа, и константы, про которые рассказано выше - не одно и то же. Тут имеются в виду константные данные! То есть, вот есть число 3, ведь оно всегда будет равно 3, значит - оно константа... Впрочем, это довольно сложно понять. Считайте, что тут я просто рассказал, как оперировать с этими данными. Круглые скобки code: (expression) Ставя скобки вокруг выражения, выражение получает более высокий приоритет по сравнению с тем, что находится прямо за скобками (возможны несколько скобок). Например: code: (1 * (2 + 3) != a) == (b or GetSomeBoolean()) Таким образом, 2 + 3 выполнится до *, и b or GetSomeBoolean() выполнится до ==. Автор: Raz © WC3.RU, 2002-2010 гг Нашли ошибки и недоработки в статье? Сообщите нам в раздел Поддержки! С уважением, WC3.RU
__________________
Смотри подругому ! |
![]() |