Comments 8
В этом напралении остаётся большой потенциал для роста. Например, нетривиальные ограничения на параметры метода хорошо бы сделать видимыми для программиста, его использующего (без анализа исходного кода). Если это делать вручную в комментариях, нет гарантии что проверка имплементирована и имплементирована правильно.
Просто брошенные Exceptions при нетривиальных проверках также могут быть малоинформативны.
"По сути, условия быстро перестают работать. Нет смысла запускать код, если в конце, вычисление завершится неудачно из-за неправильного предположения."
Я бы сказал не "условия перестают работать", они все таки не перестают.
А "условия прерывают работу".
Спасибо за перевод
Заинтересовавшимся программированием по контракту рекомендую почитать статьи Сергея Теплакова здесь.
Статья интересная, но меня немного смутил последний пример (я не пишу на котлине, хотя немного тыкал его):
require(amount <= BigDecimal.ZERO)
require(source.getBalance() <= BigDecimal.ZERO)
Мне кажется что логичнее было бы использовать >=
вместо <=
. Я, как человек не знающий как реализована функция require()
, прочитал это как "требуется чтобы сумма была меньше или равна нулю, и чтобы баланс переводящего был меньше или равен нулю".
Как по мне, поведение классической функции assert()
является более логичным.
google.github.io/guava/releases/21.0/api/docs/com/google/common/base/Preconditions.html
Программирование согласно контракту на JVM