Я бы не сказал, что это более эффективный, более полезный или более умный способ сделать то же самое, но, конечно, я думаю, что код будет более чистым и тестируемым, если делегировать фактическое выбранное разрешение кода другому методу:
public void saveContent() throws Exception {
String choosenCode = getChoosenCode(book);
book.setChoosen(choosenCode);
}
static String getChoosenCode(Book book) throws Exception {
if (book.isColored()) {
return “1234”;
}
if (book.isAvailable()) {
return “23498”;
}
if (book.isAdults()) {
return “0562”;
}
ReaderResponse response = reader.getReaderResponse();
return (response != null)
? response.getName()
: “4587”;
}
Как видите, нет необходимости в бесконечных блоках if-else из-за подхода раннего возврата. Это также обеспечивает возможность модульного тестирования выбранной части кода, что немного сложнее, если у вас есть void
метод возврата.