From 141dd624b119950e3c8b33c87cbd88dc88194c33 Mon Sep 17 00:00:00 2001 From: Alexander Date: Wed, 8 Feb 2023 23:54:38 +0300 Subject: [PATCH] test 4 link --- 02-основные-типы-данных-выражения/README.md | 124 +++++++++--------- 03-инструкции/README.md | 62 ++++----- .../README.md | 76 +++++------ 3 files changed, 131 insertions(+), 131 deletions(-) diff --git a/02-основные-типы-данных-выражения/README.md b/02-основные-типы-данных-выражения/README.md index daaab2c..a5a9401 100644 --- a/02-основные-типы-данных-выражения/README.md +++ b/02-основные-типы-данных-выражения/README.md @@ -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))| -|``|Выражение `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))| +|``|Выражение `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-основные-типы-данных-выражения) diff --git a/03-инструкции/README.md b/03-инструкции/README.md index f2d409e..e974b99 100644 --- a/03-инструкции/README.md +++ b/03-инструкции/README.md @@ -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-инструкции) diff --git a/04-массивы-ассоциативные-массивы-и-строки/README.md b/04-массивы-ассоциативные-массивы-и-строки/README.md index 2ec81bb..31c7885 100644 --- a/04-массивы-ассоциативные-массивы-и-строки/README.md +++ b/04-массивы-ассоциативные-массивы-и-строки/README.md @@ -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` для итерации по значениям|