Добавлен исходный код к главе 3

This commit is contained in:
Alexander Zhirov 2023-01-25 10:46:19 +03:00
parent b4d0e2b178
commit e0caa7caab
8 changed files with 179 additions and 0 deletions

View file

@ -386,6 +386,8 @@ Error: final switch statement must handle all values
Инструкция `final switch` требует, чтобы все значения типа `enum` были явно обработаны. Метки с интервалами вида `case в1: .. case в2:`, а также метку `default`: использовать запрещено.
[Исходный код](src/chapter-3-6/)
[В начало ⮍](#3-6-инструкция-final-switch) [Наверх ⮍](#3-инструкции)
## 3.7. Циклы
@ -473,6 +475,8 @@ void main()
}
```
[Исходный код](src/chapter-3-7-4/)
[В начало ⮍](#3-7-4-инструкция-foreach-цикл-просмотра) [Наверх ⮍](#3-инструкции)
### 3.7.5. Цикл просмотра для работы с массивами
@ -576,6 +580,8 @@ array['Луна'] = 1.283;
- *Изменение размера массива*. Цикл повторяется, пока не будет просмотрено столько элементов массива, сколько в нем было до входа в цикл. Возможно, в результате изменения размера массив будет перемещен в другую область памяти; в этом случае последующее изменение массива не видно во время итерации, а также последующие изменения, вызванные во время самой итерации, не отразятся на массиве. Использовать такую технику не рекомендуется, поскольку правила перемещения массива в памяти зависят от реализации.
- *Освобождение выделенной под массив памяти (полное или частичное; в последнем случае говорят о «сжатии» массива) с помощью низкоуровневых функций управления памятью*. Желая получить полный контроль и достичь максимальной эффективности, вы не пожалели времени на изучение низкоуровневого управления памятью по документации к своей реализации языка. Все, что можно предположить: 1) вы знаете, что творите, и 2) не скучно с вами лишь тому, кто написал собственный сборщик мусора.
[Исходный код](src/chapter-3-7-5/)
[В начало ⮍](#3-7-5-цикл-просмотра-для-работы-с-массивами) [Наверх ⮍](#3-инструкции)
### 3.7.6. Инструкции continue и break
@ -741,6 +747,8 @@ with (выр1) with (выр2) ... with (вырn) ‹инстр
При использовании вложенных инструкций `with` нет угрозы неопределенности, так как язык запрещает во внутренней инструкции `with` перекрывать идентификатор, определенный во внешней инструкции `with`. В двух словах: в D локальному идентификатору запрещено перекрывать другой локальный идентификатор.
[Исходный код](src/chapter-3-9/)
[В начало ⮍](#3-9-инструкция-with) [Наверх ⮍](#3-инструкции)
## 3.10. Инструкция return
@ -788,6 +796,8 @@ finally инструкцияf
Инструкция `goto` (см. раздел 3.8) не может совершить переход внутрь инструкций `‹инструкция›`, `инструкция1`, `...`, `инструкцияn` и `инструкцияf`, кроме случая, когда `goto` находится внутри самой инструкции.
[Исходный код](src/chapter-3-11/)
[В начало ⮍](#3-11-обработка-исключительных-ситуаций) [Наверх ⮍](#3-инструкции)
## 3.12. Инструкция mixin
@ -854,6 +864,8 @@ mixin(import("widget.d"));
Выражение `import` считывает текст файла `widget.d` в строковый литерал, который выражение `mixin` тут же преобразует в код. Используйте этот трюк, только если действительно считаете, что без него ваша честь хакера поставлена на карту.
[Исходный код](src/chapter-3-12/)
[В начало ⮍](#3-12-инструкция-mixin) [Наверх ⮍](#3-инструкции)
## 3.13. Инструкция scope
@ -1043,6 +1055,8 @@ void transactionalCreate(string filename)
Большой плюс такого стиля программирования состоит в том, что весь код обработки ошибок собран в начале функции `transactionalCreate` и никак не затрагивает основной код. При всей своей простоте функция `transactionalCreate` очень надежна: вы получаете или готовый файл, или временный файл-фрагмент, но только не «битый» файл, который кажется нормальным.
[Исходный код](src/chapter-3-13/)
[В начало ⮍](#3-13-инструкция-scope) [Наверх ⮍](#3-инструкции)
## 3.14. Инструкция synchronized