03 - fix table 3.1

This commit is contained in:
Тарас 2024-12-19 04:37:26 +01:00
parent d0026ae566
commit 8b2176ad8a
1 changed files with 33 additions and 33 deletions

View File

@ -1097,39 +1097,39 @@ D предоставляет все ожидаемые обычные инстр
*Таблица 3.1. Справочник по инструкциям (`‹и›` инструкция, `‹в›` выражение, `o` объявление, `х` идентификатор)*
|Инструкция|Описание|
|-|-|
|`‹в›;`|Вычисляет `‹в›`. Ничего не изменяющие выражения, включающие лишь встроенные типы и операторы, запрещены (см. раздел [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-инструкции)