제네릭 확장 프로퍼티를 정의할 수도 있다. 다음은 ‘아톰 41, 제네릭스 소개’에서 본 firstOrNull() 함수를 프로퍼티로 다시 구현한 코드다.
ExtensionProperties/GenericListExt.kt
package extensionproperties
import atomictest.eq
val <T> List<T>.firstOrNull: T?
get() = if (isEmpty()) null else this[0]
fun main() {
listOf(1, 2, 3).firstOrNull eq 1
listOf<String>().firstOrNull eq null
}
코틀린 스타일 가이드6는 함수가 예외를 던질 경우 프로퍼티보다는 함수를 사용하는 것을 권장한다.