코드 자체는 별로 복잡하지 않습니다. 깊은 중첩도, 조건 분기도 없고 심지어 변수명이나 메서드명도 의미를 지닙니다. 그런데도 읽기 어렵습니다. 더하기와 따옴표, 공백이 많아 실제로 어떻게 처리되는지 혼란스럽죠(일반적으로 인간은 기호의 조합보다 자연어 속 단어를 이해하는 데 더 능합니다). 그래서 코드는 읽기 어려워졌고 작성할 때 실수할 가능성도 커졌습니다.
게다가 int 값을 합치는 인라인 계산 실행도 혼란을 가중시킵니다. + 연산자는 String과 int일 때 시맨틱이 서로 다르니까요. 하나의 행에서 + 연산자를 서로 다른 시맨틱으로 사용하면 전체적으로 무엇을 하는 코드인지 알기 더 어렵습니다. 그렇게 하면 안 됩니다!
코드를 대폭 간소화할 수 있습니다. 아래 코드를 보세요.
class Mission { Logbook logbook; LocalDate start; void update(String author, String message) { final LocalDate today = LocalDate.now(); String entry = String.format("%S: [%tm-%<te-%<tY](Day %d)> %s%n", author, today, ChronoUnit.DAYS.between(start, today) + 1, message); logbook.write(entry); } }