[Kotlin] null + null = ?

sundays·2023년 3월 12일
0

kotlin 은 null safe 언어이기 때문에 plus 기호로 연결된 경우에도 에러를 만들지 않습니다. 그러나 의도와 다른 코드를 만들 가능성이 있습니다.

// 이 문자열을 지정된 다른 개체의 문자열 표현과 연결합니다.
// 수신자 또는 다른 객체가 null이면 문자열 "null"로 표시됩니다.
public operator fun String?.plus(other: Any?): String

fun main() {
    val sum = null + null
    println(sum)
}

[실행결과]

nullnull

그래서 다음과 같은 코드 추가로 작성합니다

data class Vec2(val value: Int, val value2: Int)

operator fun Vec2?.plus(other: Vec2?) : Vec2 {
	val vec1 = this ?: Vec2(0, 0)
    val vec2 = other ?: Vec2(0, 0)
    return Vec2(vec1.value + vac2.value, vec1.value2 + vec2.value2)
}

fun main() {
    val sum = null + null
    println(sum)
}

[실행결과]

Vec2(value=0, value2=0)

operator override (연산자 오버로딩) 을 이용하여 저의 의도에 맞는 코드를 작성해주었습니다. operator override로 nullable 클래스로 변경한 후 값이 존재 하지 않으면 0이라는 값을 사용하게 하였습니다.

Reference

profile
develop life

0개의 댓글