Раздел 45 · Python backend: Тарбадель

Алгебраические типы

middle-senior~30 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

После честного стража из прошлого урока на столе осталось семь подделок. Лорра берёт верхнюю, контракт 0308, и кладёт её под лампу. Все поля правильные по отдельности. Неправильно то, что они стоят вместе.

До сих пор типы защищали поля: номер не строка, статус из трёх слов, у словаря нет лишних ключей. Подделка 0308 прошла мимо всех этих защит, потому что ложь не в поле, а в сочетании полей. Проверять сочетания можно бесконечно: каждое новое поле умножает их число.

Есть другой путь. Не описывать одну запись с флажками, а описать каждое состояние контракта отдельно, только с теми полями, которые в нём точно есть. Тогда у черновика нет поля «кто подписал», и «подписан и отозван без подписи» нечем записать. Это середина раздела и главный приём проектирования типов: недопустимые состояния непредставимы.

урок из курса

Урок из курса «Python backend: Тарбадель». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.