Языки
Идиомы и особенности языков. Тема здесь содержит реализацию только на своём языке, а в статье по абзацу о том, как то же решают остальные три.
Группы
php/- PHPgo/- Gopython/- Pythonts/- TypeScript
Темы
PHP
- Readonly и перечисления в PHP (Readonly classes and enums) - статус заказа как тип, деньги как неизменяемое значение
Go
- Ошибки как значения в Go (Errors and wrapping) - сентинелы, свои типы,
%w,errors.Is/As,errors.Joinна импорте прайса
Python
- Protocol и ABC в Python (Protocols vs abstract base classes) - что нужно вызывающему коду и что обязаны уметь наследники
TypeScript
- Размеченные объединения в TypeScript (Discriminated unions) - ответы платёжного шлюза, сужение по
kind, проверка черезnever,Resultвместо исключений
php/PHP
- 01-readonly-and-enums/Readonly и перечисления в PHP Readonly classes and enumsСтатус заказа становится типом, а деньги - неизменяемым значением: опечатку в статусе и тихую правку суммы ловит язык, а не код-ревью.
go/Go
- 01-errors-and-wrapping/Ошибки как значения в Go Errors and wrappingОшибка в Go - обычное значение, которое можно обернуть контекстом, проверить по смыслу и сложить с другими: так импорт прайса сообщает обо всех плохих строках сразу, а вызывающий код решает, что делать, без разбора текста.
python/Python
- 01-protocols-vs-abc/Protocol и ABC в Python Protocols vs abstract base classesProtocol описывает, что нужно вызывающему коду, и принимает любой объект подходящей формы; ABC описывает, что обязаны уметь наследники, и делится с ними общим кодом. Хранилищам файлов нужны оба, но в разных местах.
ts/TypeScript
- 01-discriminated-unions/Размеченные объединения в TypeScript Discriminated unionsОтвет платёжного шлюза описывается объединением вариантов с общим полем kind: компилятор сам сужает тип в каждой ветке, ловит забытый вариант через never, а ошибки разбора возвращаются как значение Result, а не летят исключением.