TIL

아이템 5 예외를 활용해 코드에 제한을 걸어라

fun pop(num: Int = 1): List<T> {
	require(num <= size) {
		"Cannot remove more element than current size"
	}
	// ...
}

아규먼트

fun factorial(n: Int): Long {
	require(n >= 0)
	return if (n <= 1) 1 else factorial(n - 1) * n
}

상태

fun speak(text: String) {
	check(isInitialized)
	// ...
}

nullability와 스마트 캐스팅

fun changeDress(person: Person) {
	require(person.outfit is Dress)
	val dress: Dress = person.outfit
}
class Person(val email: String?)

fun sendEmail(person: Person, message: String) {
	require(person.email != null)
	val email: String = person.email
	// ...
}
fun sendEmail(person: Person, message: String) {
	val email: String = requireNotNull(person.email)
	// ...
}
fun sendEmail(person: Person, message: String) {
	val email: String = person.email ?: return
	// ...
}
fun sendEmail(person: Person, message: String) {
	val email: String = person.email ?: run {
		log("Email not sent, no email address")
		return
	}
	// ...
}

정리

이번 장에서의 내용을 통해