TIL

아이템 11 가독성을 목표로 설계하라

개발자가 코드를 작성하는 데는 1분 걸리지만, 이를 읽는 데는 10분이 걸린다.

인식 부하 감소

// 구현 A
if (person != null && person.isAdult) {
	view.showPerson(person)
} else {
	view.showError()
}

// 구현 B
person?.takeIf { it.isAdult }
	?.let(view::showPerson)
	?: view.showError()
// 구현 A
if (person != null && person.isAdult) {
	view.showPerson(person)
	view.hideProgressWithSuccess()
} else {
	view.showError()
	view.hideProgress()
}

// 구현 B
person?.takeIf { it.isAdult }
	?.let {
		view.showPerson(person)
		view.hideProgressWithSuccess()
	} ?: run {
		view.showError()
		view.hideProgress()
	}

극단적이 되지 않기

class Person(val name: String)
var person: Person? = null

person?.let {
	print(it.name)
}
students
	.filter { itresult >= 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

컨벤션

val abc = "A" { "B" } and "C"
print(abc) // ABC
operator fun String.invoke(f: () -> String): String = 
	this + f()
	
infix fun String.add(s: String) = this + s