무엇입니까? : 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"
}
이 경우의 계산 된 값이 getPotentialNullnull이 아니면 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
'developer tip' 카테고리의 다른 글
| 조각 추가 또는 교체가 작동하지 않음 (0) | 2020.12.28 |
|---|---|
| AngularJS ngRepeat 요소 제거 (0) | 2020.12.28 |
| 주어진 횟수만큼 다른 문자열을 반복하여 NSString 만들기 (0) | 2020.12.28 |
| Python 스크립트에서 셸 명령을 실행하고 종료를 기다린 후 스크립트로 돌아갑니다. (0) | 2020.12.28 |
| 헤더없이 (반복적 인 함수 선언) C ++ 코드를 작성할 수 있습니까? (0) | 2020.12.28 |
