test 4 link

This commit is contained in:
Alexander Zhirov 2023-02-08 23:54:38 +03:00
parent 5d52fd8bdc
commit 141dd624b1
3 changed files with 131 additions and 131 deletions

View File

@ -1182,70 +1182,70 @@ int c = (a = b, b = 7, 8);
|Выражение|Описание|
|-|-|
|`<идентификатор>`|Идентификатор ([см. раздел 2.1](#2-1-идентификаторы))|
|`.<идентификатор>`|Идентификатор, доступный в пространстве имен модуля (в обход всех друг пространств имен) ([см. раздел 2.1](#2-1-идентификаторы))|
|`this`|Текущий объект внутри метода ([см. раздел 2.1.1](#2-1-1-ключевые-слова))|
|`super`|Направляет поиск идентификаторов и динамический поиск методов в пространство имен объекта-родителя ([см. раздел 2.1.1](#2-1-1-ключевые-слова))|
|`$`|Текущий размер массива (допустимо использовать `$` внутри индексирующего выражения или выражения получения среза) ([см. раздел 2.1.1](#2-1-1-ключевые-слова))|
|`null`|«Нулевая» ссылка, массив или указатель ([см. раздел 2.1.1](#2-1-1-ключевые-слова))|
|`typedi(T)`|Получить объект `TypeInfo`, ассоциированный с `T` ([см. раздел 2.1.1](#2-1-1-ключевые-слова))|
|`true`|Логическое значение «истина» ([см. раздел 2.2.1](#2-2-1-логические-литералы))|
|`false`|Логическое значение «ложь» ([см. раздел 2.2.1](#2-2-1-логические-литералы))|
|`<число>`|Числовой литерал ([см. раздел 2.2.2](#2-2-2-целые-литералы), [см. раздел 2.2.3](#2-2-3-литералы-с-плавающей-запятой))|
|`<знак>`|Знаковый литерал ([см. раздел 2.2.4](#2-2-4-знаковые-литералы))|
|`<строка>`|Строковый литерал ([см. раздел 2.2.5](#2-2-5-строковые-литералы))|
|`<массив>`|Литерал массива ([см. раздел 2.2.6](#2-2-6-литералы-массивов-и-ассоциативных-массивов))|
|`<функция>`|Функциональный литерал ([см. раздел 2.2.7](#2-2-7-функциональные-литералы))|
|`assert(a)`|В режиме отладки, если a не является ненулевым значением, выполнение программы прерывается; в режиме итоговой сборки (release) ничего не происходит ([см. раздел 2.3.4.1](#2-3-4-1-выражение-assert))|
|`assert(a, b)`|То же, но к сообщению об ошибке добавляется `b` ([см. раздел 2.3.4.1](#2-3-4-1-выражение-assert))|
|`mixin(a)`|Выражение `mixin` ([см. раздел 2.3.4.2](#2-3-4-2-выражение-mixin))|
|`<IsExpr>`|Выражение `is` ([см. раздел 2.3.4.3](#2-3-4-3-выражения-is))|
|`( a )`|Выражение в круглых скобках ([см. раздел 2.3.4.4](#2-3-4-4-выражения-в-круглых-скобках))|
|`a.b`|Доступ к вложенным элементам ([см. раздел 2.3.5.1](#2-3-5-1-доступ-ко-внутренним-элементам))|
|`a++`|Постфиксный вариа нт операции увеличения на единицу ([см. раздел 2.3.5.2](#2-3-5-2-увеличение-и-уменьшение-на-единицу))|
|`a--`|Постфиксный вариант операции уменьшения на единицу ([см. раздел 2.3.5.2](#2-3-5-2-увеличение-и-уменьшение-на-единицу))|
|`a(<арг>опционально)`|Оператор вызова функции (`<арг>опционально = ` необязательный список аргументов, разделенных запятыми) ([см. раздел 2.3.5.3](#2-3-5-3-вызов-функции))|
|`a[<арг>]`|Оператор индексации (`<арг> = ` список аргументов, разделенных запятыми) ([см. раздел 2.3.5.4](#2-3-5-4-индексация))|
|`a[]`|Срез в размере всего массива ([см. раздел 2.3.5.5](#2-3-5-5-срезы-массивов))|
|`a[b .. c]`|Срез ([см. раздел 2.3.5.5](#2-3-5-5-срезы-массивов))|
|`a.<выражение new>`|Создание экземпляра вложенного класса ([см. раздел 2.3.5.6](#2-3-5-6-создание-вложенного-класса))|
|`&a`|Получение адреса ([см. раздел 2.3.6.2](#2-3-6-2-получение-адреса-и-разыменование))|
|`++a`|Префиксный вариант операции увеличения на единицу ([см. раздел 2.3.6.3](#2-3-6-3-увеличение-и-уменьшение-на-единицу-префиксный-вариант))|
|`--a`|Префиксный вариант операции уменьшения на единицу ([см. раздел 2.3.6.3](#2-3-6-3-увеличение-и-уменьшение-на-единицу-префиксный-вариант))|
|`*a`|Разыменование ([см. раздел 2.3.6.2](#2-3-6-2-получение-адреса-и-разыменование))|
|`-a`|Унарный минус ([см. раздел 2.3.6.5](#2-3-6-5-унарный-плюс-и-унарный-минус))|
|`+a`|Унарный плюс ([см. раздел 2.3.6.5](#2-3-6-5-унарный-плюс-и-унарный-минус))|
|`!a`|Отрицание ([см. раздел 2.3.6.6](#2-3-6-6-отрицание))|
|`~a`|Поразрядное отрицание ([см. раздел 2.3.6.4](#2-3-6-4-поразрядное-отрицание))|
|`<идентификатор>`|Идентификатор (см. раздел [2.1](#2-1-идентификаторы))|
|`.<идентификатор>`|Идентификатор, доступный в пространстве имен модуля (в обход всех друг пространств имен) (см. раздел [2.1](#2-1-идентификаторы))|
|`this`|Текущий объект внутри метода (см. раздел [2.1.1](#2-1-1-ключевые-слова))|
|`super`|Направляет поиск идентификаторов и динамический поиск методов в пространство имен объекта-родителя (см. раздел [2.1.1](#2-1-1-ключевые-слова))|
|`$`|Текущий размер массива (допустимо использовать `$` внутри индексирующего выражения или выражения получения среза) (см. раздел [2.1.1](#2-1-1-ключевые-слова))|
|`null`|«Нулевая» ссылка, массив или указатель (см. раздел [2.1.1](#2-1-1-ключевые-слова))|
|`typedi(T)`|Получить объект `TypeInfo`, ассоциированный с `T` (см. раздел [2.1.1](#2-1-1-ключевые-слова))|
|`true`|Логическое значение «истина» (см. раздел [2.2.1](#2-2-1-логические-литералы))|
|`false`|Логическое значение «ложь» (см. раздел [2.2.1](#2-2-1-логические-литералы))|
|`<число>`|Числовой литерал (см. раздел [2.2.2](#2-2-2-целые-литералы), см. раздел [2.2.3](#2-2-3-литералы-с-плавающей-запятой))|
|`<знак>`|Знаковый литерал (см. раздел [2.2.4](#2-2-4-знаковые-литералы))|
|`<строка>`|Строковый литерал (см. раздел [2.2.5](#2-2-5-строковые-литералы))|
|`<массив>`|Литерал массива (см. раздел [2.2.6](#2-2-6-литералы-массивов-и-ассоциативных-массивов))|
|`<функция>`|Функциональный литерал (см. раздел [2.2.7](#2-2-7-функциональные-литералы))|
|`assert(a)`|В режиме отладки, если a не является ненулевым значением, выполнение программы прерывается; в режиме итоговой сборки (release) ничего не происходит (см. раздел [2.3.4.1](#2-3-4-1-выражение-assert))|
|`assert(a, b)`|То же, но к сообщению об ошибке добавляется `b` (см. раздел [2.3.4.1](#2-3-4-1-выражение-assert))|
|`mixin(a)`|Выражение `mixin` (см. раздел [2.3.4.2](#2-3-4-2-выражение-mixin))|
|`<IsExpr>`|Выражение `is` (см. раздел [2.3.4.3](#2-3-4-3-выражения-is))|
|`( a )`|Выражение в круглых скобках (см. раздел [2.3.4.4](#2-3-4-4-выражения-в-круглых-скобках))|
|`a.b`|Доступ к вложенным элементам (см. раздел [2.3.5.1](#2-3-5-1-доступ-ко-внутренним-элементам))|
|`a++`|Постфиксный вариа нт операции увеличения на единицу (см. раздел [2.3.5.2](#2-3-5-2-увеличение-и-уменьшение-на-единицу))|
|`a--`|Постфиксный вариант операции уменьшения на единицу (см. раздел [2.3.5.2](#2-3-5-2-увеличение-и-уменьшение-на-единицу))|
|`a(<арг>опционально)`|Оператор вызова функции (`<арг>опционально = ` необязательный список аргументов, разделенных запятыми) (см. раздел [2.3.5.3](#2-3-5-3-вызов-функции))|
|`a[<арг>]`|Оператор индексации (`<арг> = ` список аргументов, разделенных запятыми) (см. раздел [2.3.5.4](#2-3-5-4-индексация))|
|`a[]`|Срез в размере всего массива (см. раздел [2.3.5.5](#2-3-5-5-срезы-массивов))|
|`a[b .. c]`|Срез (см. раздел [2.3.5.5](#2-3-5-5-срезы-массивов))|
|`a.<выражение new>`|Создание экземпляра вложенного класса (см. раздел [2.3.5.6](#2-3-5-6-создание-вложенного-класса))|
|`&a`|Получение адреса (см. раздел [2.3.6.2](#2-3-6-2-получение-адреса-и-разыменование))|
|`++a`|Префиксный вариант операции увеличения на единицу (см. раздел [2.3.6.3](#2-3-6-3-увеличение-и-уменьшение-на-единицу-префиксный-вариант))|
|`--a`|Префиксный вариант операции уменьшения на единицу (см. раздел [2.3.6.3](#2-3-6-3-увеличение-и-уменьшение-на-единицу-префиксный-вариант))|
|`*a`|Разыменование (см. раздел [2.3.6.2](#2-3-6-2-получение-адреса-и-разыменование))|
|`-a`|Унарный минус (см. раздел [2.3.6.5](#2-3-6-5-унарный-плюс-и-унарный-минус))|
|`+a`|Унарный плюс (см. раздел [2.3.6.5](#2-3-6-5-унарный-плюс-и-унарный-минус))|
|`!a`|Отрицание (см. раздел [2.3.6.6](#2-3-6-6-отрицание))|
|`~a`|Поразрядное отрицание (см. раздел [2.3.6.4](#2-3-6-4-поразрядное-отрицание))|
|`(T).a`|Доступ к статическим внутренним элементам|
|`cast(T) a`|Приведение выражения `a` к типу `T`|
|`<выражение new>`|Создание объекта ([см. раздел 2.3.6.1](#2-3-6-1-выражение-new))|
|`a ^^ b`|Возведение в степень ([см. раздел 2.3.7](#2-3-7-возведение-в-степень))|
|`a * b`|Умножение ([см. раздел 2.3.8](#2-3-8-мультипликативные-операции))|
|`a / b`|Деление ([см. раздел 2.3.8](#2-3-8-мультипликативные-операции))|
|`a % b`|Получение остатка от деления ([см. раздел 2.3.8](#2-3-8-мультипликативные-операции))|
|`a + b`|Сложение ([см. раздел 2.3.9](#2-3-9-аддитивные-операции))|
|`a - b`|Вычитание ([см. раздел 2.3.9](#2-3-9-аддитивные-операции))|
|`a ~ b`|Конкатенация([см. раздел 2.3.9](#2-3-9-аддитивные-операции))|
|`a << b`|Сдвиг влево ([см. раздел 2.3.10](#2-3-10-сдвиг))|
|`a >> b`|Сдвиг вправо ([см. раздел 2.3.10](#2-3-10-сдвиг))|
|`a >>> b`|Беззнаковый сдвиг вправо (старший разряд сбрасывается независимо от типа и значения `a`) ([см. раздел 2.3.10](#2-3-10-сдвиг))|
|`a in b`|Проверка на принадлежность для ассоциативных массивов ([см. раздел 2.3.11](#2-3-11-выражения-in))|
|`a == b`|Проверка на равенство; все операторы этой группы неассоциативны; например, выражение `a == b == c` некорректно ([см. раздел 2.3.12.1](#2-3-12-1-проверка-на-равенство))|
|`a != b`|Проверка на неравенство ([см. раздел 2.3.12.1](#2-3-12-1-проверка-на-равенство))|
|`a is b`|Проверка на идентичность (`true`, если и только если `a` и `b` ссылаются на один и тот же объект) ([см. раздел 2.3.12.1](#2-3-12-1-проверка-на-равенство))|
|`<выражение new>`|Создание объекта (см. раздел [2.3.6.1](#2-3-6-1-выражение-new))|
|`a ^^ b`|Возведение в степень (см. раздел [2.3.7](#2-3-7-возведение-в-степень))|
|`a * b`|Умножение (см. раздел [2.3.8](#2-3-8-мультипликативные-операции))|
|`a / b`|Деление (см. раздел [2.3.8](#2-3-8-мультипликативные-операции))|
|`a % b`|Получение остатка от деления (см. раздел [2.3.8](#2-3-8-мультипликативные-операции))|
|`a + b`|Сложение (см. раздел [2.3.9](#2-3-9-аддитивные-операции))|
|`a - b`|Вычитание (см. раздел [2.3.9](#2-3-9-аддитивные-операции))|
|`a ~ b`|Конкатенация(см. раздел [2.3.9](#2-3-9-аддитивные-операции))|
|`a << b`|Сдвиг влево (см. раздел [2.3.10](#2-3-10-сдвиг))|
|`a >> b`|Сдвиг вправо (см. раздел [2.3.10](#2-3-10-сдвиг))|
|`a >>> b`|Беззнаковый сдвиг вправо (старший разряд сбрасывается независимо от типа и значения `a`) (см. раздел [2.3.10](#2-3-10-сдвиг))|
|`a in b`|Проверка на принадлежность для ассоциативных массивов (см. раздел [2.3.11](#2-3-11-выражения-in))|
|`a == b`|Проверка на равенство; все операторы этой группы неассоциативны; например, выражение `a == b == c` некорректно (см. раздел [2.3.12.1](#2-3-12-1-проверка-на-равенство))|
|`a != b`|Проверка на неравенство (см. раздел [2.3.12.1](#2-3-12-1-проверка-на-равенство))|
|`a is b`|Проверка на идентичность (`true`, если и только если `a` и `b` ссылаются на один и тот же объект) (см. раздел [2.3.12.1](#2-3-12-1-проверка-на-равенство))|
|`a !is b`|То же, что `!(a is b)`|
|`a < b`|Меньше ([см. раздел 2.3.12.2](#2-3-12-2-сравнение-для-упорядочивания))|
|`a <= b`|Меньше или равно ([см. раздел 2.3.12.2](#2-3-12-2-сравнение-для-упорядочивания))|
|`a > b`|Больше ([см. раздел 2.3.12.2](#2-3-12-2-сравнение-для-упорядочивания))|
|`a >= b`|Больше или равно ([см. раздел 2.3.12.2](#2-3-12-2-сравнение-для-упорядочивания))|
|`a \| b`|Поразрядное **ИЛИ** ([см. раздел 2.3.13](#2-3-13-поразрядные-или-исключающее-или-и-и))|
|`a ^ b`|Поразрядное **ИСКЛЮЧАЮЩЕЕ ИЛИ** ([см. раздел 2.3.13](#2-3-13-поразрядные-или-исключающее-или-и-и))|
|`a & b`|Поразрядное **И** ([см. раздел 2.3.13](#2-3-13-поразрядные-или-исключающее-или-и-и))|
|`a && b`|Логическое **И** (`b` может иметь тип `void`) ([см. раздел 2.3.14](#2-3-14-логическое-и))|
|`a \|\| b`|Логическое **ИЛИ** (`b` может иметь тип `void`) ([см. раздел 2.3.15](#2-3-15-логическое-или))|
|`a ? b : c`|Тернарная условная операция; если операнд `a` имеет ненулевое значение, то `b`, иначе `с` ([см. раздел 2.3.16](#2-3-16-тернарная-условная-операция))|
|`a = b`|Присваивание; все операторы присваивания этой группы ассоциативны справа; например `a *= b += c` то же, что и `a *= (b += c)` ([см. раздел 2.3.17](#2-3-17-присваивание))|
|`a < b`|Меньше (см. раздел [2.3.12.2](#2-3-12-2-сравнение-для-упорядочивания))|
|`a <= b`|Меньше или равно (см. раздел [2.3.12.2](#2-3-12-2-сравнение-для-упорядочивания))|
|`a > b`|Больше (см. раздел [2.3.12.2](#2-3-12-2-сравнение-для-упорядочивания))|
|`a >= b`|Больше или равно (см. раздел [2.3.12.2](#2-3-12-2-сравнение-для-упорядочивания))|
|`a \| b`|Поразрядное **ИЛИ** (см. раздел [2.3.13](#2-3-13-поразрядные-или-исключающее-или-и-и))|
|`a ^ b`|Поразрядное **ИСКЛЮЧАЮЩЕЕ ИЛИ** (см. раздел [2.3.13](#2-3-13-поразрядные-или-исключающее-или-и-и))|
|`a & b`|Поразрядное **И** (см. раздел [2.3.13](#2-3-13-поразрядные-или-исключающее-или-и-и))|
|`a && b`|Логическое **И** (`b` может иметь тип `void`) (см. раздел [2.3.14](#2-3-14-логическое-и))|
|`a \|\| b`|Логическое **ИЛИ** (`b` может иметь тип `void`) (см. раздел [2.3.15](#2-3-15-логическое-или))|
|`a ? b : c`|Тернарная условная операция; если операнд `a` имеет ненулевое значение, то `b`, иначе `с` (см. раздел [2.3.16](#2-3-16-тернарная-условная-операция))|
|`a = b`|Присваивание; все операторы присваивания этой группы ассоциативны справа; например `a *= b += c` то же, что и `a *= (b += c)` (см. раздел [2.3.17](#2-3-17-присваивание))|
|`a += b`|Сложение «на месте»; выражения со всеми операторами вида `a ω= b`, работающими по принципу «вычислить и присвоить», вычисляются в следующем порядке: **1)** `a` (должно быть l-значением), **2)** `b` и **3)** `al = al ω b`, где `al` l-значение, получившееся в результате вычисления `a`|
|`a -= b`|Вычитание «на месте»|
|`a *= b`|Умножение «на месте»|
@ -1258,7 +1258,7 @@ int c = (a = b, b = 7, 8);
|`a <<= b`|Сдвиг влево «на месте»|
|`a >>= b`|Сдвиг вправо «на месте»|
|`a >>>= b`|Беззнаковый сдвиг вправо «на месте»|
|`a, b`|Последовательность выражений; выражения вычисляются слева направо, результатом операции становится самое правое выражение ([см. раздел 2.3.18](#2-3-18-выражения-с-запятой))|
|`a, b`|Последовательность выражений; выражения вычисляются слева направо, результатом операции становится самое правое выражение (см. раздел [2.3.18](#2-3-18-выражения-с-запятой))|
[В начало ⮍](#2-4-итоги-и-справочник) [Наверх ⮍](#2-основные-типы-данных-выражения)

View File

@ -1097,37 +1097,37 @@ D предоставляет все ожидаемые обычные инстр
|Инструкция|Описание|
|-|-|
|`‹в›;`|Вычисляет `‹в›`. Ничего не изменяющие выражения, включающие лишь встроенные типы и операторы, запрещены ([см. раздел 3.1](#3-1-инструкция-выражение))|
|`{и1 ... и2}`|Выполняет инструкции от `и1` до `и2` по порядку, пока управление не будет явно передано в другую область видимости (например, инструкцией `return`) ([см. раздел 3.2](#3-2-составная-инструкция))|
|`asm ‹и›`|Машиннозависимый ассемблерный код (здесь `‹и›` обозначает ассемблерный код, а не инструкцию на языке D). В настоящее время поддерживается ассемблер x86 с единым синтаксисом для всех поддерживаемых операционных систем ([см. раздел 3.15](#3-15-конструкция-asm))|
|`break;`|Прерывает выполнение инструкции `switch`, `for`, `foreach`, `while` или `do-while` с переходом к инструкции, следующей сразу за ней ([см. раздел 3.7.6](#3-7-6-инструкции-continue-и-break))|
|`break x;`|Прерывает выполнение инструкции `switch`, `for`, `foreach`, `while` или `do-while`, имеющей метку `x:`, с переходом к инструкции, следующей сразу за ней ([см. раздел 3.7.6](#3-7-6-инструкции-continue-и-break))|
|`continue;`|Начинает новую итерацию текущего (ближайшего к ней) цикла `for`, `foreach`, `while` или `do-while` с пропуском оставшейся части этого цикла ([см. раздел 3.7.6](#3-7-6-инструкции-continue-и-break))|
|`continue x;`|Начинает новую итерацию цикла `for`, `foreach`, `while` или `do-while`, снабженного меткой `x:`, с пропуском оставшейся части этого цикла ([см. раздел 3.7.6](#3-7-6-инструкции-continue-и-break))|
|`do ‹и› while (‹в›);`|Выполняет `‹и›` один раз и продолжает ее выполнять, пока `‹в›` истинно ([см. раздел 3.7.2](#3-7-2-инструкция-do-while-цикл-с-постусловием))|
|`for (и1 в1; в2) и2`|Выполняет `и1`, которая может быть инструкцией-выражением, определением значения или просто точкой с запятой, и пока `в1` истинно, выполняет `и2`, после чего вычисляет `в2` ([см. раздел 3.7.2](#3-7-3-инструкция-for-цикл-со-счетчиком))|
|`foreach (x; в1 .. в2) ‹и›`|Выполняет `‹и›`, инициализируя переменную `x` значением `в1` и затем последовательно увеличивая ее на 1, пока `x в2`. Цикл не выполняется, если `в1 = в2`. Как `в1`, так и `в2` вычисляются всего один раз ([см. раздел 3.7.4](#3-7-4-инструкция-foreach-цикл-просмотра))|
|`foreach (refопц x; ‹в›) ‹и›`|Выполняет `‹и›`, объявляя переменную `x` и привязывая ее к каждому из элементов `‹в›` поочередно. Результатом вычисления `‹в›` должен быть массив или любой пользовательский тип-диапазон. Если присутствует ключевое слово `ref`, изменения `x` будут отражаться и на просматриваемой сущности ([см. раздел 3.7.5](#3-7-5-цикл-просмотра-для-работы-с-массивами))|
|`foreach (x1, refопц x2; ‹в›) ‹и›`|Аналогична предыдущей, но вводит дополнительное значение `x1`. Если `‹в›` это ассоциативный массив, то `x1` привязывается к ключу, а `x2` к рассматриваемому значению. Иначе `x1` привязывается к целому числу, показывающему количество проходов цикла (начиная с 0) ([см. раздел 3.7.5](#3-7-5-цикл-просмотра-для-работы-с-массивами))|
|`goto x;`|Выполняет переход к метке `x`, которая должна быть определена в текущей функции как `x:` ([см. раздел 3.8](#3-8-инструкция-goto-безусловный-переход))|
|`goto case;`|Выполняет переход к следующей метке `case` текущей инструкции `switch` ([см. раздел 3.8](#3-8-инструкция-goto-безусловный-переход))|
|`goto case x;`|Выполняет переход к метке `case x` текущей инструкции `switch` ([см. раздел 3.8](#3-8-инструкция-goto-безусловный-переход))|
|`goto default;`|Выполняет переход к метке обработчика по умолчанию `default` текущей инструкции `switch` ([см. раздел 3.8](#3-8-инструкция-goto-безусловный-переход))|
|`if (‹в›) ‹и›`|Выполняет `‹и›`, если `‹в›` ненулевое ([см. раздел 3.3](#3-3-инструкция-if))|
|`if (‹в›) и1 else и2`|Выполняет `и1`, если `‹в›` ненулевое, иначе выполняет `и2`. Компонент `else`, расположенный в конце, относится к последней инструкции `if` или `static if` ([см. раздел 3.3](#3-3-инструкция-if))|
|`static if (‹в›)о/и›`|Вычисляет `‹в›` во время компиляции и, если `‹в›` ненулевое, компилирует объявление или инструкцию `о/и›`. Если объявление или инструкция `о/и›` заключены в `{` и `}`, то одна пара таких скобок срезается ([см. раздел 3.4](#3-4-инструкция-static-if))|
|`static if (‹в›)о/и1 else о/и2`|Аналогична предыдущей плюс в случае ложности `‹в›` компилирует `о/и2`. Часть `else`, расположенная в конце, относится к последней инструкции `if` или `static if` ([см. раздел 3.4](#3-4-инструкция-static-if))|
|`return ‹в›опц;`|Возврат из текущей функции. Возвращаемое значение должно быть таким, чтобы его можно было неявно преобразовать к объявленному возвращаемому типу. `‹в›` может быть опущено, если возвращаемый тип функции `void` ([см. раздел 3.10](#3-10-инструкция-return))|
|`scope(exit) ‹и›`|Выполняет `‹и›`, каким бы образом ни был осуществлен выход из текущего контекста (то есть с помощью `return`, из-за необработанной ошибки или по исключительной ситуации). Вложенные инструкции `scope` (в том числе с ключевыми словами `failure` и `success`) выполняются в порядке, обратном их определению в коде программы ([см. раздел 3.13](#3-13-инструкция-scope))|
|`scope(failure) ‹и›`|Выполняет `‹и›`, если выход из текущего контекста осуществлен по исключительной ситуации ([см. раздел 3.13](#3-13-инструкция-scope))|
|`scope(success) ‹и›`|Выполняет `‹и›` при нормальном выходе из текущего контекста (через `return` или по достижении конца контекста) ([см. раздел 3.13](#3-13-инструкция-scope))|
|`switch (‹в›) ‹и›`|Вычисляет `‹в›` и выполняет переход к метке `case`, соответствующей `‹в›` и расположенной внутри `‹и›` ([см. раздел 3.5](#3-5-инструкция-switch))|
|`final switch (‹в›) ‹и›`|Аналогична предыдущей, но работает только с перечисляемым и значениями и во время компиляции проверяет, обработаны ли все возможные значения с помощью меток `case` ([см. раздел 3.6](#3-6-инструкция-final-switch))|
|`synchronized (в1, в2…)‹и›`|Выполняет `‹и›`, в то время как объекты, возвращаемые `в1`, `в2` и т.д., заблокированы. Выражения `вi` должны возвращать объект типа `class` ([см. раздел 3.14](#3-14-инструкция-synchronized))|
|`throw (‹в›);`|Вычисляет `‹в›` и порождает соответствующее исключение с переходом в ближайший подходящий обработчик `catch`. `‹в›` должно иметь тип `Throwable` или наследующий от него ([см. раздел 3.11](#3-11-обработка-исключительных-ситуаций))|
|`try ‹и› catch(Т1 x1) и1 ... catch(Тn xn) иn finally иf`|Выполняет `‹и›`. Если при этом возникает исключение, пытается сопоставить его тип с типами `Т1`, `...`, `Тn` по порядку. Если `k`-е сопоставление оказалось удачным, то далее сопоставления не производятся и выполняется `иk`. В любом случае (завершилось выполнение `‹и›` исключением или нет) перед выходом из `try` выполняется `иf`. Все компоненты `catch` и `finally` (но не то и другое одновременно) могут быть опущены ([см. раздел 3.11](#3-11-обработка-исключительных-ситуаций))|
|`while (‹в›) ‹и›`|Выполняет `‹и›`, пока `‹в›` ненулевое (цикл не выполняется, если уже при первом вычислении `‹в›` оказывается нулевым) ([см. раздел 3.13](#3-7-1-инструкция-while-цикл-с-предусловием))|
|`with (‹в›) ‹и›`|Вычисляет `‹в›`, затем выполняет `‹и›`, как если бы она была членом типа `‹в›`: все используемые в `‹и›` идентификаторы сначала ищутся в пространстве имен, определенном `‹в›` ([см. раздел 3.9](#3-9-инструкция-with))|
|`‹в›;`|Вычисляет `‹в›`. Ничего не изменяющие выражения, включающие лишь встроенные типы и операторы, запрещены (см. раздел [3.1](#3-1-инструкция-выражение))|
|`{и1 ... и2}`|Выполняет инструкции от `и1` до `и2` по порядку, пока управление не будет явно передано в другую область видимости (например, инструкцией `return`) (см. раздел [3.2](#3-2-составная-инструкция))|
|`asm ‹и›`|Машиннозависимый ассемблерный код (здесь `‹и›` обозначает ассемблерный код, а не инструкцию на языке D). В настоящее время поддерживается ассемблер x86 с единым синтаксисом для всех поддерживаемых операционных систем (см. раздел [3.15](#3-15-конструкция-asm))|
|`break;`|Прерывает выполнение инструкции `switch`, `for`, `foreach`, `while` или `do-while` с переходом к инструкции, следующей сразу за ней (см. раздел [3.7.6](#3-7-6-инструкции-continue-и-break))|
|`break x;`|Прерывает выполнение инструкции `switch`, `for`, `foreach`, `while` или `do-while`, имеющей метку `x:`, с переходом к инструкции, следующей сразу за ней (см. раздел [3.7.6](#3-7-6-инструкции-continue-и-break))|
|`continue;`|Начинает новую итерацию текущего (ближайшего к ней) цикла `for`, `foreach`, `while` или `do-while` с пропуском оставшейся части этого цикла (см. раздел [3.7.6](#3-7-6-инструкции-continue-и-break))|
|`continue x;`|Начинает новую итерацию цикла `for`, `foreach`, `while` или `do-while`, снабженного меткой `x:`, с пропуском оставшейся части этого цикла (см. раздел [3.7.6](#3-7-6-инструкции-continue-и-break))|
|`do ‹и› while (‹в›);`|Выполняет `‹и›` один раз и продолжает ее выполнять, пока `‹в›` истинно (см. раздел [3.7.2](#3-7-2-инструкция-do-while-цикл-с-постусловием))|
|`for (и1 в1; в2) и2`|Выполняет `и1`, которая может быть инструкцией-выражением, определением значения или просто точкой с запятой, и пока `в1` истинно, выполняет `и2`, после чего вычисляет `в2` (см. раздел [3.7.2](#3-7-3-инструкция-for-цикл-со-счетчиком))|
|`foreach (x; в1 .. в2) ‹и›`|Выполняет `‹и›`, инициализируя переменную `x` значением `в1` и затем последовательно увеличивая ее на 1, пока `x в2`. Цикл не выполняется, если `в1 = в2`. Как `в1`, так и `в2` вычисляются всего один раз (см. раздел [3.7.4](#3-7-4-инструкция-foreach-цикл-просмотра))|
|`foreach (refопц x; ‹в›) ‹и›`|Выполняет `‹и›`, объявляя переменную `x` и привязывая ее к каждому из элементов `‹в›` поочередно. Результатом вычисления `‹в›` должен быть массив или любой пользовательский тип-диапазон. Если присутствует ключевое слово `ref`, изменения `x` будут отражаться и на просматриваемой сущности (см. раздел [3.7.5](#3-7-5-цикл-просмотра-для-работы-с-массивами))|
|`foreach (x1, refопц x2; ‹в›) ‹и›`|Аналогична предыдущей, но вводит дополнительное значение `x1`. Если `‹в›` это ассоциативный массив, то `x1` привязывается к ключу, а `x2` к рассматриваемому значению. Иначе `x1` привязывается к целому числу, показывающему количество проходов цикла (начиная с 0) (см. раздел [3.7.5](#3-7-5-цикл-просмотра-для-работы-с-массивами))|
|`goto x;`|Выполняет переход к метке `x`, которая должна быть определена в текущей функции как `x:` (см. раздел [3.8](#3-8-инструкция-goto-безусловный-переход))|
|`goto case;`|Выполняет переход к следующей метке `case` текущей инструкции `switch` (см. раздел [3.8](#3-8-инструкция-goto-безусловный-переход))|
|`goto case x;`|Выполняет переход к метке `case x` текущей инструкции `switch` (см. раздел [3.8](#3-8-инструкция-goto-безусловный-переход))|
|`goto default;`|Выполняет переход к метке обработчика по умолчанию `default` текущей инструкции `switch` (см. раздел [3.8](#3-8-инструкция-goto-безусловный-переход))|
|`if (‹в›) ‹и›`|Выполняет `‹и›`, если `‹в›` ненулевое (см. раздел [3.3](#3-3-инструкция-if))|
|`if (‹в›) и1 else и2`|Выполняет `и1`, если `‹в›` ненулевое, иначе выполняет `и2`. Компонент `else`, расположенный в конце, относится к последней инструкции `if` или `static if` (см. раздел [3.3](#3-3-инструкция-if))|
|`static if (‹в›)о/и›`|Вычисляет `‹в›` во время компиляции и, если `‹в›` ненулевое, компилирует объявление или инструкцию `о/и›`. Если объявление или инструкция `о/и›` заключены в `{` и `}`, то одна пара таких скобок срезается (см. раздел [3.4](#3-4-инструкция-static-if))|
|`static if (‹в›)о/и1 else о/и2`|Аналогична предыдущей плюс в случае ложности `‹в›` компилирует `о/и2`. Часть `else`, расположенная в конце, относится к последней инструкции `if` или `static if` (см. раздел [3.4](#3-4-инструкция-static-if))|
|`return ‹в›опц;`|Возврат из текущей функции. Возвращаемое значение должно быть таким, чтобы его можно было неявно преобразовать к объявленному возвращаемому типу. `‹в›` может быть опущено, если возвращаемый тип функции `void` (см. раздел [3.10](#3-10-инструкция-return))|
|`scope(exit) ‹и›`|Выполняет `‹и›`, каким бы образом ни был осуществлен выход из текущего контекста (то есть с помощью `return`, из-за необработанной ошибки или по исключительной ситуации). Вложенные инструкции `scope` (в том числе с ключевыми словами `failure` и `success`) выполняются в порядке, обратном их определению в коде программы (см. раздел [3.13](#3-13-инструкция-scope))|
|`scope(failure) ‹и›`|Выполняет `‹и›`, если выход из текущего контекста осуществлен по исключительной ситуации (см. раздел [3.13](#3-13-инструкция-scope))|
|`scope(success) ‹и›`|Выполняет `‹и›` при нормальном выходе из текущего контекста (через `return` или по достижении конца контекста) (см. раздел [3.13](#3-13-инструкция-scope))|
|`switch (‹в›) ‹и›`|Вычисляет `‹в›` и выполняет переход к метке `case`, соответствующей `‹в›` и расположенной внутри `‹и›` (см. раздел [3.5](#3-5-инструкция-switch))|
|`final switch (‹в›) ‹и›`|Аналогична предыдущей, но работает только с перечисляемым и значениями и во время компиляции проверяет, обработаны ли все возможные значения с помощью меток `case` (см. раздел [3.6](#3-6-инструкция-final-switch))|
|`synchronized (в1, в2…)‹и›`|Выполняет `‹и›`, в то время как объекты, возвращаемые `в1`, `в2` и т.д., заблокированы. Выражения `вi` должны возвращать объект типа `class` (см. раздел [3.14](#3-14-инструкция-synchronized))|
|`throw (‹в›);`|Вычисляет `‹в›` и порождает соответствующее исключение с переходом в ближайший подходящий обработчик `catch`. `‹в›` должно иметь тип `Throwable` или наследующий от него (см. раздел [3.11](#3-11-обработка-исключительных-ситуаций))|
|`try ‹и› catch(Т1 x1) и1 ... catch(Тn xn) иn finally иf`|Выполняет `‹и›`. Если при этом возникает исключение, пытается сопоставить его тип с типами `Т1`, `...`, `Тn` по порядку. Если `k`-е сопоставление оказалось удачным, то далее сопоставления не производятся и выполняется `иk`. В любом случае (завершилось выполнение `‹и›` исключением или нет) перед выходом из `try` выполняется `иf`. Все компоненты `catch` и `finally` (но не то и другое одновременно) могут быть опущены (см. раздел [3.11](#3-11-обработка-исключительных-ситуаций))|
|`while (‹в›) ‹и›`|Выполняет `‹и›`, пока `‹в›` ненулевое (цикл не выполняется, если уже при первом вычислении `‹в›` оказывается нулевым) (см. раздел [3.13](#3-7-1-инструкция-while-цикл-с-предусловием))|
|`with (‹в›) ‹и›`|Вычисляет `‹в›`, затем выполняет `‹и›`, как если бы она была членом типа `‹в›`: все используемые в `‹и›` идентификаторы сначала ищутся в пространстве имен, определенном `‹в›` (см. раздел [3.9](#3-9-инструкция-with))|
[В начало ⮍](#3-16-итоги-и-справочник) [Наверх ⮍](#3-инструкции)

View File

@ -1240,64 +1240,64 @@ y += 100; // Хм...
|Выражение|Тип|Описание|
|-|-|-|
|`new T[n]`|`T[]`|Создает массив ([см. раздел 4.1](#4-1-динамические-массивы))|
|`new T[n]`|`T[]`|Создает массив (см. раздел [4.1](#4-1-динамические-массивы))|
|`[t1,t2, ..., tk]`|`T[]`|Литерал массива; `T` определяется по типу `t1` (см. разделы [2.2.6](../02-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5-%D1%82%D0%B8%D0%BF%D1%8B-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F#2-2-6-литералы-массивов-и-ассоциативных-массивов) и [4.1](#4-1-динамические-массивы))|
|`a = b`|`T[]`|Присваивает один массив другому ([см. раздел 4.1.4](#4-1-4-копирование))|
|`a[‹в›]`|`ref T`|Предоставляет доступ к элементу по индексу (символ `$` в выражении `‹в›` заменяется на `a.length`, `‹в›` должно быть приводимым к типу `размер_t`; кроме того, должно соблюдаться условие `‹в› < a.length`) ([см. раздел 4.1](#4-1-динамические-массивы))|
|`a[в1 .. в2]`|`T[]`|Получает срез массива `a` (знак `$` в `в1` и `в2` заменяется на `a.length`, `в1` и `в2` должны быть приводимыми к типу `размер_t`, также должно соблюдаться условие `в1 <= в2 && в2 <= a.length`) ([см. раздел 4.1.3](#4-1-3-срезы))|
|`a[]`|`T[]`|Поэлементная операция ([см. раздел 4.1.7](#4-1-7-поэлементные-операции)) или альтернативное написание выражения `a[0 .. $]`, возвращающего содержимое всего массива|
|`a.dup`|`T[]`|Получает дубликат массива ([см. раздел 4.1](#4-1-динамические-массивы))|
|`a.length`|`размер_t`|Читает длину массива ([см. раздел 4.1.10](#4-1-10-присваивание-значения-свойству-length))|
|`a.length = n`|`размер_t`|Изменяет длину массива ([см. раздел 4.1.1](#4-1-1-длина))|
|`a = b`|`T[]`|Присваивает один массив другому (см. раздел [4.1.4](#4-1-4-копирование))|
|`a[‹в›]`|`ref T`|Предоставляет доступ к элементу по индексу (символ `$` в выражении `‹в›` заменяется на `a.length`, `‹в›` должно быть приводимым к типу `размер_t`; кроме того, должно соблюдаться условие `‹в› < a.length`) (см. раздел [4.1](#4-1-динамические-массивы))|
|`a[в1 .. в2]`|`T[]`|Получает срез массива `a` (знак `$` в `в1` и `в2` заменяется на `a.length`, `в1` и `в2` должны быть приводимыми к типу `размер_t`, также должно соблюдаться условие `в1 <= в2 && в2 <= a.length`) (см. раздел [4.1.3](#4-1-3-срезы))|
|`a[]`|`T[]`|Поэлементная операция (см. раздел [4.1.7](#4-1-7-поэлементные-операции)) или альтернативное написание выражения `a[0 .. $]`, возвращающего содержимое всего массива|
|`a.dup`|`T[]`|Получает дубликат массива (см. раздел [4.1](#4-1-динамические-массивы))|
|`a.length`|`размер_t`|Читает длину массива (см. раздел [4.1.10](#4-1-10-присваивание-значения-свойству-length))|
|`a.length = n`|`размер_t`|Изменяет длину массива (см. раздел [4.1.1](#4-1-1-длина))|
|`a is b`|`bool`|Проверяет, идентичны ли массивы друг другу (см. разделы [4.1.5](#4-1-5-проверка-на-равенство) и [2.3.4.3](../02-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5-%D1%82%D0%B8%D0%BF%D1%8B-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F#2-3-4-3-выражения-is))|
|`a !is b`|`bool`|То же, что `!(a is b)`|
|`a == b`|`bool`|Поэлементно сравнивает массивы на равенство ([см. раздел 4.1.5](#4-1-5-проверка-на-равенство))|
|`a == b`|`bool`|Поэлементно сравнивает массивы на равенство (см. раздел [4.1.5](#4-1-5-проверка-на-равенство))|
|`a != b`|`bool`|То же, что `!(a == b)`|
|`a ~ t`|`T[]`|Конкатенирует массив и отдельное значение ([см. раздел 4.1.6](#4-1-6-конкатенация))|
|`t ~ a`|`T[]`|Конкатенирует отдельное значение и массив ([см. раздел 4.1.6](#4-1-6-конкатенация))|
|`a ~ b`|`T[]`|Конкатенирует два массива ([см. раздел 4.1.6](#4-1-6-конкатенация))|
|`a ~= t`|`T[]`|Присоединяет элемент к массиву ([см. раздел 4.1.6](#4-1-6-конкатенация))|
|`a ~= b`|`T[]`|Присоединяет один массив к другому ([см. раздел 4.1.6](#4-1-6-конкатенация))|
|`a.ptr`|`T*`|Возвращает адрес первого элемента массива `a` (небезопасная операция) ([см. раздел 4.6](#4-6-опасный-собрат-массива-указатель))|
|`a ~ t`|`T[]`|Конкатенирует массив и отдельное значение (см. раздел [4.1.6](#4-1-6-конкатенация))|
|`t ~ a`|`T[]`|Конкатенирует отдельное значение и массив (см. раздел [4.1.6](#4-1-6-конкатенация))|
|`a ~ b`|`T[]`|Конкатенирует два массива (см. раздел [4.1.6](#4-1-6-конкатенация))|
|`a ~= t`|`T[]`|Присоединяет элемент к массиву (см. раздел [4.1.6](#4-1-6-конкатенация))|
|`a ~= b`|`T[]`|Присоединяет один массив к другому (см. раздел [4.1.6](#4-1-6-конкатенация))|
|`a.ptr`|`T*`|Возвращает адрес первого элемента массива `a` (небезопасная операция) (см. раздел [4.6](#4-6-опасный-собрат-массива-указатель))|
*Таблица 4.4. Операции над массивами фиксированной длины (`a` и `b` два значения типа `T[]`; `t`, `t1`, ..., `tk` значения типа `T`; `n` значение, приводимое к типу `размер_t`)*
|Выражение|Тип|Описание|
|-|-|-|
|`[t1, ..., tk]`|`T[k]`|Литерал массива, но только если тип `T[k]` запрошен явно; `T` определяется по типу `t1` ()|
|`a = b`|`ref T[n]`|Копирует содержимое одного массива в другой ()|
|`a[‹в›]`|`ref T`|Предоставляет доступ к элементу по индексу (символ `$` в `‹в›` заменяется на `a.length`, `‹в›` должно быть приводимым к типу `размер_t`; кроме того, должно соблюдаться условие `‹в› < a.length`) ()|
|`a[в1 .. в2]`|`T[]/T[k]`|Получает срез массива `a` (символ `$` в `в1` и `в2` заменяется на `a.length`, `в1` и `в2` должны быть приводимыми к типу `размер_t`, также должно соблюдаться условие `в1 <= в2 && в2 <= a.length`) ())|
|`a[]`|`T[]`|Поэлементная операция () или приведение `a` (массива фиксированной длины) к типу динамического массива, то же, что и `a[0 .. $]`|
|`a.dup`|`T[]`|Получает дубликат массива ()|
|`a.length`|`размер_t`|Читает длину массива ()|
|`a is b`|`bool`|Проверяет, идентичны ли массивы друг другу ()|
|`[t1, ..., tk]`|`T[k]`|Литерал массива, но только если тип `T[k]` запрошен явно; `T` определяется по типу `t1` (см. разделы [2.2.6](../02-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5-%D1%82%D0%B8%D0%BF%D1%8B-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F#2-2-6-литералы-массивов-и-ассоциативных-массивов) и [4.1](#4-1-динамические-массивы))|
|`a = b`|`ref T[n]`|Копирует содержимое одного массива в другой (см. раздел [4.2.4](#4-2-4-копирование-и-неявные-преобразования))|
|`a[‹в›]`|`ref T`|Предоставляет доступ к элементу по индексу (символ `$` в `‹в›` заменяется на `a.length`, `‹в›` должно быть приводимым к типу `размер_t`; кроме того, должно соблюдаться условие `‹в› < a.length`) (см. раздел [4.1](#4-1-динамические-массивы))|
|`a[в1 .. в2]`|`T[]/T[k]`|Получает срез массива `a` (символ `$` в `в1` и `в2` заменяется на `a.length`, `в1` и `в2` должны быть приводимыми к типу `размер_t`, также должно соблюдаться условие `в1 <= в2 && в2 <= a.length`) (см. раздел [4.2.3](#4-2-3-получение-срезов)))|
|`a[]`|`T[]`|Поэлементная операция (см. раздел [4.1.7](#4-1-7-поэлементные-операции)) или приведение `a` (массива фиксированной длины) к типу динамического массива, то же, что и `a[0 .. $]`|
|`a.dup`|`T[]`|Получает дубликат массива (см. раздел [4.2.4](#4-2-4-копирование-и-неявные-преобразования))|
|`a.length`|`размер_t`|Читает длину массива (см. раздел [4.2.1](#4-2-1-длина))|
|`a is b`|`bool`|Проверяет, идентичны ли массивы друг другу (см. разделы [4.2.5](#4-2-5-проверка-на-равенство) и [2.3.4.3](../02-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5-%D1%82%D0%B8%D0%BF%D1%8B-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F#2-3-4-3-выражения-is))|
|`a !is b`|`bool`|То же, что и `!(a is b)`|
|`a == b`|`bool`|Поэлементно сравнивает массивы на равенство ()|
|`a == b`|`bool`|Поэлементно сравнивает массивы на равенство (см. разделы [4.2.5](#4-2-5-проверка-на-равенство) и [2.3.12](../02-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5-%D1%82%D0%B8%D0%BF%D1%8B-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F#2-3-12-сравнение))|
|`a != b`|`bool`|То же, что и `!(a == b)`|
|`a ~ t`|`T[]`|Конкатенирует массив и отдельное значение ()|
|`t ~ a`|`T[]`|Конкатенирует отдельное значение и массив ()|
|`a ~ b`|`T[]`|Конкатенирует два массива ()|
|`a ~ t`|`T[]`|Конкатенирует массив и отдельное значение (см. раздел [4.2.6](#4-2-6-конкатенация))|
|`t ~ a`|`T[]`|Конкатенирует отдельное значение и массив (см. раздел [4.2.6](#4-2-6-конкатенация))|
|`a ~ b`|`T[]`|Конкатенирует два массива (см. раздел [4.2.6](#4-2-6-конкатенация))|
|`a.ptr`|`T*`|Возвращает адрес первого элемента массива `a` (небезопасная операция)|
*Таблица 4.5. Операции над ассоциативными массивами (`a` и `b` два значения типа `V[K]`; `k`, `k1`, ..., `ki` значения типа `K`; `v`, `v1`, ..., `vk` значения типа `V`)*
|Выражение|Тип|Описание|
|-|-|-|
|`[t1:v1, ..., ti:vi]`|`V[K]`|Литерал ассоциативного массива; `K` определяется по типу `k1`, а `V` по типу `v1` ()|
|`a = b`|`V[K]`|Присваивает ассоциативный массив `b` переменной a типа «ассоциативный массив» ()|
|`a[k]`|`V`|Предоставляет доступ к элементу по индексу (если ключ `k` не найден, возникает исключение) ()|
|`a[k] = v`|`V`|Ставит в соответствие ключу `k` значение `v` (переопределяет предыдущее соответствие, если оно уже было назначено) ()|
|`k in a`|`V*`|Ищет `k` в `a`, возвращает `null`, если не находит, иначе указатель на значение, ассоциированное с `k` ()|
|`[t1:v1, ..., ti:vi]`|`V[K]`|Литерал ассоциативного массива; `K` определяется по типу `k1`, а `V` по типу `v1` (см. разделы [2.2.6](../02-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5-%D1%82%D0%B8%D0%BF%D1%8B-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F#2-2-6-литералы-массивов-и-ассоциативных-массивов) и [4.4](#4-4-ассоциативные-массивы))|
|`a = b`|`V[K]`|Присваивает ассоциативный массив `b` переменной a типа «ассоциативный массив» (см. раздел [4.4.3](#4-4-3-копирование))|
|`a[k]`|`V`|Предоставляет доступ к элементу по индексу (если ключ `k` не найден, возникает исключение) (см. раздел [4.4.2](#4-4-2-чтение-и-запись-ячеек))|
|`a[k] = v`|`V`|Ставит в соответствие ключу `k` значение `v` (переопределяет предыдущее соответствие, если оно уже было назначено) (см. раздел [4.4.2](#4-4-2-чтение-и-запись-ячеек))|
|`k in a`|`V*`|Ищет `k` в `a`, возвращает `null`, если не находит, иначе указатель на значение, ассоциированное с `k` (см. раздел [4.4.2](#4-4-2-чтение-и-запись-ячеек))|
|`k !in a`|`bool`|То же, что и `!(k in a)`|
|`a.length`|`размер_t`|Читает значение, соответствующее числу элементов в `a` ()|
|`a is b`|`bool`|Проверяет, идентичны ли массивы друг другу ()|
|`a.length`|`размер_t`|Читает значение, соответствующее числу элементов в `a` (см. раздел [4.4.1](#4-4-1-длина))|
|`a is b`|`bool`|Проверяет, идентичны ли массивы друг другу (см. разделы [4.4.4](#4-4-4-проверка-на-равенство) и [2.3.4.3](../02-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5-%D1%82%D0%B8%D0%BF%D1%8B-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F#2-3-4-3-выражения-is))|
|`a !is b`|`bool`|То же, что и `!(a is b)`|
|`a == b`|`bool`|Поэлементно сравнивает массивы на равенство ()|
|`a == b`|`bool`|Поэлементно сравнивает массивы на равенство (см. разделы [4.4.4](#4-4-4-проверка-на-равенство) и [2.3.12](../02-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5-%D1%82%D0%B8%D0%BF%D1%8B-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F#2-3-12-сравнение))|
|`a != b`|`bool`|То же, что и `!(a == b)`|
|`a.remove(k)`|`bool`|Удаляет пару с ключом `k`, если такая есть; возвращает `true`, если и только если ключ `k` присутствовал в `a` ()|
|`a.dup`|`V[K]`|Создает дубликат ассоциативного массива `a` ()|
|`a.get(k, v)`|`V`|Возвращает значение из `a`, соответствующее ключу `k`; по умолчанию возвращается значение `v` ()|
|`a.remove(k)`|`bool`|Удаляет пару с ключом `k`, если такая есть; возвращает `true`, если и только если ключ `k` присутствовал в `a` (см. раздел [4.4.5](#4-4-5-удаление-элементов))|
|`a.dup`|`V[K]`|Создает дубликат ассоциативного массива `a` (см. раздел [4.4.3](#4-4-3-копирование))|
|`a.get(k, v)`|`V`|Возвращает значение из `a`, соответствующее ключу `k`; по умолчанию возвращается значение `v` (см. раздел [4.4.2](#4-4-2-чтение-и-запись-ячеек))|
|`a.byKey()`|`int delegate(int delegate(ref K))`|Возвращает делегат, пригодный для использования в цикле `foreach` для итерации по ключам|
|`a.byValue()`|`int delegate(int delegate(ref V))`|Возвращает делегат, пригодный для использования в цикле `foreach` для итерации по значениям|