This commit is contained in:
Alexander Zhirov 2023-03-04 19:53:44 +03:00
parent 67c944400c
commit 7214d3045f
1 changed files with 21 additions and 21 deletions

View File

@ -1,26 +1,26 @@
# 12. Перегрузка операторов
[12.1. Перегрузка операторов в D](#12-1-перегрузка-операторов-в-d)
[12.2. Перегрузка унарных операторов](#12-2-перегрузка-унарных-операторов)
[12.2.1. Объединение определений операторов с помощью выражения mixin](#12-2-1-объединение-определений-операторов-с-помощью-выражения-mixin)
[12.2.2. Постфиксный вариант операторов увеличения и уменьшения на единицу](#12-2-2-постфиксный-вариант-операторов-увеличения-и-уменьшения-на-единицу)
[12.2.3. Перегрузка оператора cast](#12-2-3-перегрузка-оператора-cast)
[12.2.4. Перегрузка тернарной условной операции и ветвления](#12-2-4-перегрузка-тернарной-условной-операции-и-ветвления)
[12.3. Перегрузка бинарных операторов](#12-3-перегрузка-бинарных-операторов)
[12.3.1. Перегрузка операторов в квадрате](#12-3-1-перегрузка-операторов-в-квадрате)
[12.3.2. Коммутативность](#12-3-2-коммутативность)
[12.4. Перегрузка операторов сравнения](#12-4-перегрузка-операторов-сравнения)
[12.5. Перегрузка операторов присваивания](#12-5-перегрузка-операторов-присваивания)
[12.6. Перегрузка операторов индексации](#12-6-перегрузка-операторов-индексации)
[12.7. Перегрузка операторов среза](#12-7-перегрузка-операторов-среза)
[12.8. Оператор $](#12-8-оператор)
[12.9. Перегрузка foreach](#12-9-перегрузка-foreach)
[12.9.1. foreach с примитивами перебора](#12-9-1-foreach-с-примитивами-перебора)
[12.9.2. foreach с внутренним перебором](#12-9-2-foreach-с-внутренним-перебором)
[12.10. Определение перегруженных операторов в классах](#12-10-определение-перегруженных-операторов-в-классах)
[12.11. Кое-что из другой оперы: opDispatch](#12-11-кое-что-из-другой-оперы-opdispatch)
[12.11.1. Динамическое диспетчирование с opDispatch](#12-11-1-динамическое-диспетчирование-с-opdispatch)
[12.12. Итоги и справочник](#12-12-итоги-и-справочник)
- [12.1. Перегрузка операторов в D](#12-1-перегрузка-операторов-в-d)
- [12.2. Перегрузка унарных операторов](#12-2-перегрузка-унарных-операторов)
- [12.2.1. Объединение определений операторов с помощью выражения mixin](#12-2-1-объединение-определений-операторов-с-помощью-выражения-mixin)
- [12.2.2. Постфиксный вариант операторов увеличения и уменьшения на единицу](#12-2-2-постфиксный-вариант-операторов-увеличения-и-уменьшения-на-единицу)
- [12.2.3. Перегрузка оператора cast](#12-2-3-перегрузка-оператора-cast)
- [12.2.4. Перегрузка тернарной условной операции и ветвления](#12-2-4-перегрузка-тернарной-условной-операции-и-ветвления)
- [12.3. Перегрузка бинарных операторов](#12-3-перегрузка-бинарных-операторов)
- [12.3.1. Перегрузка операторов в квадрате](#12-3-1-перегрузка-операторов-в-квадрате)
- [12.3.2. Коммутативность](#12-3-2-коммутативность)
- [12.4. Перегрузка операторов сравнения](#12-4-перегрузка-операторов-сравнения)
- [12.5. Перегрузка операторов присваивания](#12-5-перегрузка-операторов-присваивания)
- [12.6. Перегрузка операторов индексации](#12-6-перегрузка-операторов-индексации)
- [12.7. Перегрузка операторов среза](#12-7-перегрузка-операторов-среза)
- [12.8. Оператор $](#12-8-оператор)
- [12.9. Перегрузка foreach](#12-9-перегрузка-foreach)
- [12.9.1. foreach с примитивами перебора](#12-9-1-foreach-с-примитивами-перебора)
- [12.9.2. foreach с внутренним перебором](#12-9-2-foreach-с-внутренним-перебором)
- [12.10. Определение перегруженных операторов в классах](#12-10-определение-перегруженных-операторов-в-классах)
- [12.11. Кое-что из другой оперы: opDispatch](#12-11-кое-что-из-другой-оперы-opdispatch)
- [12.11.1. Динамическое диспетчирование с opDispatch](#12-11-1-динамическое-диспетчирование-с-opdispatch)
- [12.12. Итоги и справочник](#12-12-итоги-и-справочник)
Мы, программисты, не очень любим слишком уж отделять встроенные типы от пользовательских. Магические свойства встроенных типов мешают открытости и расширяемости любого языка, поскольку при этом пользовательские типы обречены оставаться второсортными. Тем не менее у проектировщиков языка есть все законные основания относиться к встроенным типам с большим почтением. Одно из таких оснований: более настраиваемый язык сложнее выучить, а также сложнее выполнять его синтаксический анализ как человеку, так и машине. Каждый язык по-своему определяет приемлемое соотношение между встроенным и настраиваемым, что для некоторых языков означает впадение в одну из этих двух крайностей.