무엇입니까? : Kotlin에서 수행합니까? (엘비스 오퍼레이터)
?:
예를 들어이 경우에서 무엇을하는지 알 수 없습니다.
val list = mutableList ?: mutableListOf()
왜 이것을 수정할 수 있습니까?
val list = if (mutableList != null) mutableList else mutableListOf()
TL; DR : 결과 개체 참조 [첫 번째 피연산자]가 아닌 null
경우 반환됩니다. 그렇지 않으면 두 번째 피연산자의 값 (일 수 있음 null
)이 반환됩니다.
엘비스 운영자는 많은 프로그래밍 언어, 예를 들어 코 틀린뿐만 아니라 그루비 또는 C #의 일부입니다. 나는 찾을 위키 백과의 정의는 매우 정확한 :
특정 컴퓨터 프로그래밍 언어에서 Elvis 연산자
?:
는 피연산자가 인 경우 첫 번째 피연산자를 반환 하고 그렇지 않으면 두 번째 피연산자를 평가하여 반환 하는 이항 연산자 입니다true
. 이는 해당 언어 (및 기타 여러 언어)에서 발견 되는 삼항 조건 연산자 , 의 변형입니다? :
. Elvis 연산자는 두 번째 피연산자가 생략 된 삼항 연산자입니다 .
특히 Kotlin의 경우 다음 사항이 적용됩니다.
일부 컴퓨터 프로그래밍 언어는이 연산자에 대해 다른 의미를 가지고 있습니다. 첫 번째 피연산자가 부울을 생성하는 대신 객체 참조를 생성해야합니다 . 결과 객체 참조가가 아닌
null
경우 반환됩니다. 그렇지 않으면 두 번째 피연산자의 값 (일 수 있음null
)이 반환됩니다.
예 :
x ?: y // yields `x` if `x` is not null, `y` otherwise.
엘비스 운영자는 다음에 콜론 물음표로 표시됩니다 : ?:
그것은이 구문을 사용할 수 있습니다 :
first operand ?: second operand
간결한 코드를 작성할 수 있으며 다음과 같이 작동합니다.
경우 first operand
null가 아닌 , 다음이 반환됩니다. 이 경우 null 인 경우 , 다음이 second operand
반환됩니다. 제공된 값이 null 인 경우 nullable이 아닌 값을 제공하므로식이 null 값을 반환하지 않도록 보장하는 데 사용할 수 있습니다.
예 (Kotlin에서) :
fun retrieveString(): String { //Notice that this type isn't nullable
var nullableVariable: String? = getPotentialNull() //This variable may be null
return nullableVariable ?: "Secondary Not-Null String"
}
이 경우의 계산 된 값이 getPotentialNull
null이 아니면 retrieveString
; 널이면 두 번째 표현식 "Secondary Not-Null String"
이 대신 리턴됩니다.
또한 오른쪽 표현식은 왼쪽이 null 인 경우 에만 평가 됩니다 .
코 틀린, 당신은 같은 표현을 사용할 수 second operand
등으로, throw Exception
표현
return nullVariable ?: throw IllegalResponseException("My inner function returned null! Oh no!")
Elvis Operator라는 이름은 유명한 미국 가수 Elvis Presley 에서 유래했습니다 . 그의 헤어 스타일은 물음표와 비슷합니다.
출처 : Wojda, I. Moskala, M. Android Development with Kotlin. 2017. Packt 출판
이것은 Elvis 연산자 라고 불리며 그것은 ... 정확히 당신이 질문에서 설명한 것과 같습니다. 왼쪽이 null
값이면 대신 오른쪽을 반환합니다. 그렇지 않으면 왼쪽에있는 값을 반환합니다.
a ?: b
의 약어입니다 if (a != null) a else b
.
유형이있는 더 많은 예 :
val x: String? = "foo"
val y: String = x ?: "bar" // "foo", because x was non-null
val a: String? = null
val b: String = a ?: "bar" // "bar", because a was null
의를 살펴 보자 (고화질)를 :
nullable 참조 r이있을 때 "r이 null이 아니면 사용하고, 그렇지 않으면 null이 아닌 값 x를 사용"이라고 말할 수 있습니다.
?:
(엘비스) 연산자는 상세를 방지하고 정말 간결한 코드를 만든다.
예를 들어, 많은 컬렉션 확장 함수 null
가 폴백으로 반환 됩니다.
listOf(1, 2, 3).firstOrNull { it == 4 } ?: throw IllegalStateException("Ups")
?:
여러 계층의 폴 백이있는 경우에도 폴백 케이스를 효율적으로 처리 할 수있는 방법을 제공합니다. 그렇다면 다음과 같이 Elvis 연산자를 곱하기 만하면됩니다.
val l = listOf(1, 2, 3)
val x = l.firstOrNull { it == 4 } ?: l.firstOrNull { it == 5 } ?: throw IllegalStateException("Ups")
만약 그렇지 않다면 똑같이 표현한다면 읽기가 더 어려운 코드가 될 것입니다.
간단히 우리는 두 손을 가지고 있다고 말할 수 있습니다. 당신은 알고 싶어요, 당신의 왼손이 지금 작동하고 있습니까?. 왼손이 작동하지 return
empty
않으면busy
Java의 예 :
private int a;
if(a != null){
println("a is not null, Value is: "+a)
}
else{
println("a is null")
}
Kotlin의 예 :
val a : Int = 5
val l : Int = if (a != null) a.length else "a is null"
기본적으로 Elvis의 왼쪽이 어떤 이유로 null을 반환하면 대신 오른쪽이 반환됩니다.
즉
val number: Int? = null
println(number ?: "Number is null")
따라서 number가 NOT null이면 숫자 를 인쇄하고 그렇지 않으면 "Number is null"을 인쇄합니다.
참조 URL : https://stackoverflow.com/questions/48253107/what-does-do-in-kotlin-elvis-operator
'IT TIP' 카테고리의 다른 글
Android : 터치 이벤트가 뷰에서 그 아래에있는 뷰로 전달되는 것을 방지하는 방법은 무엇입니까? (0) | 2020.12.26 |
---|---|
AngularJS ngRepeat 요소 제거 (0) | 2020.12.26 |
주어진 횟수만큼 다른 문자열을 반복하여 NSString 만들기 (0) | 2020.12.26 |
Python 스크립트에서 셸 명령을 실행하고 종료를 기다린 후 스크립트로 돌아갑니다. (0) | 2020.12.26 |
헤더없이 (반복적 인 함수 선언) C ++ 코드를 작성할 수 있습니까? (0) | 2020.12.26 |