Обычно пелёнка условных выражений (особенно многоуровневая) является сигналом о возможности использовать паттерн
состояние. Так же полезно выполнить декомпозицию кода принимающего решения и кода выполняющего вычисления, то есть возвращать не результат вычислений, а выполняющее их
поведение. Совсем хорошо, если завернуть его в
maybe-тип, чтобы вызывающий код мог
делегировать получение значения по умолчанию другому коду.