Глава 3 закончена

This commit is contained in:
Alexander Zhirov 2023-01-25 10:36:32 +03:00
parent 3f69cd0457
commit b4d0e2b178
1 changed files with 31 additions and 31 deletions

View File

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