Оглавление

Выражения

Присваивания

lvalue = rvalue;

lvalue - переменная, куда мы сохраняем данные из rvalue, она должна быть такого же самого типа. Выражение справа вычисляется перед выражением слева.

Составные присваивания

Составное присваивание - комбинация действия оператора и присваивания: += -= *= /= = &= |= ^= <<= >>= >>>=

Вызов функции

func();
func(arg);
func(arg1, arg2);
lvalue = func();

Функции выполняют действие и могут возвращать результат. Если функция имеет больше одного аргумента, то аргументы вычисляются в обратном порядке, начиная с последнего.

Приведение типов

// неявное
i  intf @a = @clss();
// явное
clss @b = cast(a);

Хендлы приводятся оператором cast. В случае неудачного приведения cast вернет null. Приведение ссылок работает только для обьектов, которые поддерживают хендлы, для остальных обьектов будет создаваться копия приведенного обьекта.

// неявное
int a = 1.0f;
// явное
float b = float(a)/2;

В большинстве случаев приведение типов не обязательно для примитивных типов, так как компилятор делает это самостоятельно.

Математические операторы

c = -(a + b);

операторописаниеслевасправарезультат
+ унарный плюс NUM NUM
- унарный минус NUM NUM
+ сложениеNUM NUM NUM
- вычитаниеNUM NUM NUM
* умножениеNUM NUM NUM
/ делениеNUM NUM NUM
% модульNUM NUM NUM

Плюс и минус могут использоваться в качестве унарных операторов. NUM - любой числовой тип (например int или float). Результат всегда имеет тип первоначальных условий. Исключение - унарный минус, который не доступен для uint.

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

  c = ~(a | b);

операторописаниеслевасправарезультат
~ побитовое отрицание NUMNUM
& побитовое ИNUMNUMNUM
| побитовое ИЛИNUMNUMNUM
^ побитовое исключающее ИЛИNUMNUMNUM
<< сдвиг влевоNUMNUMNUM
>> сдвиг вправоNUMNUMNUM
>>>арифметический сдвиг вправоNUMNUMNUM

Логические операторы

if( a and b or not c )
{
  // ... что-то делаем
}

операторописаниеслевасправарезультат
notлогическое НЕ boolbool
andлогическое И boolboolbool
or логическое ИЛИboolboolbool
xorлогическое исключающее ИЛИboolboolbool

Булевы операторы только оценивают условия.

Каждая логическая операция может быть записана символами : || - or, && - and, ^^ - xor, ! - not.

Операторы равенства

if( a == b )
{
  // ... что-то делаем
}

Операторы == и != используются для сравнения двух значений, и выдают результат в булевом значении.

Операторы отношения

if( a > b )
{
  // ... что-то делаем
}

Операторы <, >, <=, и >= используются для определения отношений между двум значениями, и выдают результат в булевом значении.

Операторы идентификации

if( a is null )
{
  // ... что-то делаем
}
else if( a is b )
{
  // ... что-то делаем
}

Операторы is и !is используются для определения одинаковых обьектов. Действительны только для ссылочных типов, так как они проверяют адреса обьектов. Результат - булевое значение.

Операторы инкремента

a = i++; // значит a = i; i = i + 1;
b = --i; // значит i = i - 1; b = i;

Эти операторы могут ставиться перед (для действия до присвоения) или после (для действия после присвоения) правого значения для увеличения\уменьшения на единицу.

Оператор индексирования

arr[i] = 1;

Данный оператор используется для доступа к элементу в обьекте. В зависимости от типа обьекта выражение между [] требует разных типов.

Выражение условий

choose ? a : b;

Если значение в choose равно true тогда выражение вернет a, иначе - b. a и b должны быть одного типа.

Доступ к членам

object.property = 1;
object.method();

object - обьект.

property - имя переменной, к которой есть доступ вне класса.

method - имя метода, который может быть вызван из обьекта.

Хендлы

// Создаем ссылку на обьект
@handle = @object;
// очищаем хендл, и удаляем обьект на который он ссылался
@handle = null;

Хендлы ссылаются на обьекты. На один обьект могут ссылаться много хендлов, обьект удаляется, когда на него не ссылается ни один хендл. Члены обьекта, на который ссылается хендл, доступны из хендла с помощью .-оператора.

Скобки

a = c * (a + b);
if( (a or b) and c )
{
  // ... что-то делаем
}

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

Область видимости

int value;
void function()
{
  int value;        // локальная переменная перегружает глобальную
  ::value = value;  // используйте :: для доступа к глобальной переменной
} 

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


Перевод - arroy.one@gmail.com. При копировании материалов указывайте ссылку на источник.