diff --git a/12-перегрузка-операторов/README.md b/12-перегрузка-операторов/README.md index 984b71e..e202c4b 100644 --- a/12-перегрузка-операторов/README.md +++ b/12-перегрузка-операторов/README.md @@ -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-итоги-и-справочник) Мы, программисты, не очень любим слишком уж отделять встроенные типы от пользовательских. Магические свойства встроенных типов мешают открытости и расширяемости любого языка, поскольку при этом пользовательские типы обречены оставаться второсортными. Тем не менее у проектировщиков языка есть все законные основания относиться к встроенным типам с большим почтением. Одно из таких оснований: более настраиваемый язык сложнее выучить, а также сложнее выполнять его синтаксический анализ как человеку, так и машине. Каждый язык по-своему определяет приемлемое соотношение между встроенным и настраиваемым, что для некоторых языков означает впадение в одну из этих двух крайностей.