코틀린은 간결성을 목표로 설계된 프로그래밍 언어가 아니라, 가독성을 좋게 하는 데 목표를 두고 설계된 프로그래밍 언어입니다.
간결성과 가독성을 혼동하지 말자. (책에서 말하는)간결성은 ‘짧음’과 조금 더 관계가 있다. 가독성은 ‘읽기 좋음’과 관계가 있다.
가독성을 목표로 설계하라 #
프로그래밍은 쓰기보다 읽기가 중요하다. (e.g. " 개발자가 코드를 작성하는 데는 1분 걸리지만, 이를 읽는 데는 10분이 걸린다. “)
인식 부하 감소 #
사용 빈도가 적은 관용구는 코드를 복잡하게 만든다. 이런 관용구들을 한 문장 내부에 조합해서 사용하면 복잡성은 훨씬 빠르게 증가한다.
// A
if(person != null && person.isAdult) {
view.showPerson(person)
} else {
view.showError()
}
// B
person?.takeIf { it.isAdult }
?.let(view::showPerson)
?: view.showError()
기본적으로 ‘인지 부하’를 줄이는 방향으로 코드를 작성하자.
뇌는 짧은 코드를 빠르게 읽을 수 있지만, 익숙한 코드는 더 빠르게 읽을 수 있다. 👍
극단적이 되지 않기 #
students.filter { it.result >= 50 }
.joinToString(separator = "\n") {
"${it.name} ${it.surname}, ${it.result}"
}
.let(::print)
var obj = FileInputStream("/file.gz")
.let(::BufferedInputStream)
.let(::ZipInputStream)
.let(::ObjectInputStream)
.readObject() as SomeObject
위 코드는 디버그하기 어렵고, 경험이 적은 코틀린 개발자는 이해하기 어렵다. 따라서 비용이 발생한다.
하지만 이 비용은 지불할만한 가치가 있으므로 사용해도 괜찮다.
문제가 되는 경우는 지불할 만한 가치가 없는 코드에 비용을 지불하는 경우(= 정당한 이유 없이 복잡성을 추가할 때)이다.