Подумайте о своей аудитории. Чек стоит, когда он
- помогает вам, программист, обнаруживать ошибки,
- помогает другим программистам обнаруживать ошибки там, где их код соответствует вашему,
- позволяет программе восстанавливаться после неверного ввода или неверного состояния, или
- помогает сопровождающему избежать ошибок позже.
Если ваш null
чек, приведенный выше, не попадает в них, или существует более простой механизм, который сделал бы то же самое, то оставьте его.
Более простые механизмы часто включают
- юнит-тесты.
- аннотации, которые сообщают о намерениях читателю и могут быть проверены findbugs или аналогичными инструментами
assert
s, которые вызывают преждевременный сбой кода и сообщают о намерениях, не требуя от вас ввода кода обработки ошибок, который никогда не должен быть достигнут, и не вводя в заблуждение инструменты покрытия кода
- документация или встроенные комментарии
В этом случае я бы предложил добавить аннотацию
public @Nonnull ObjectABC funcABC(){
интеграция findbugs в ваш процесс сборки и, возможно, замена
if(o!=null){
//do something
}
с
assert o != null: "funcABC() should have allocated a new instance or failed."
Разве мы не проглотили какую-то фундаментальную проблему, поставив такие проверки?
Как правило,
- модульные тесты хороши для проверки поведения небольшого фрагмента кода. Если вы не можете написать модульные тесты для важных функций, то фундаментальная проблема заключается в том, что вы не пишете тестируемый код .
- аннотации хороши для передачи намерений рецензентам кода, сопровождающим и автоматизированным инструментам. Если вы не интегрировали эти инструменты в свой процесс, то основная проблема заключается в том, что вы не пользуетесь доступными инструментами качества кода.
assert
s хороши для двойной проверки ваших предположений. Если вы не можете внедрить утверждения в свой код и быстро определить, какие из них нарушены, тогда ваша основная проблема заключается в том, что у вас нет быстрого способа выполнить код для репрезентативных данных, чтобы устранить проблемы.
- документация и встроенные комментарии (в том числе комментарии контроля исходного кода) хороши для распространения знаний о системе среди команды - чтобы убедиться, что более чем один человек в команде может решить проблему в любой части кода. Если они постоянно отсутствуют или несинхронизированы, то основная проблема заключается в том, что вы не пишете код с учетом сопровождающих.
Наконец, проектирование по контракту - это методология программирования, которую многие сочли полезной для кода бизнес-логики. Даже если вы не можете убедить вашу команду принять конкретные инструменты и практики, чтение DbC может все же помочь вам понять и объяснить, как применять важные инварианты в вашей кодовой базе.