if/else 대신 사용하기 - java
-> java에서는 3항 식을 사용할 수 있다.
String temp = null;
int size = temp != null ? temp.length() : 0;
if/else 대신 사용하기 - kotlin
var temp : String? = null
// val size = if (temp != null) temp.length else 0
->
val size = temp?.length
var temp : String? = ""
val size = temp?.length
- 결과 : length 또는 null
Elvis Operator을 사용하여 null인 경우 값을 지정하자
- Elvis Operator : ?:
var temp : String? = null
// val size = if (temp != null) temp.length else 0
// val size = temp?.length
->
val size = temp?.length ?: 0
- 결과 : 0 또는 length
fun getSize (a : String?):Int = a?.length ?: 0
fun test() {
val temp : String? = null
println("size ${getSize(temp)}")
}
// 0 출력
Elvis Operator 유용하게 사용하기 - java
String temp = null;
textView.setText(temp != null ? temp : "") // temp가 null이 아니면 그대로 출력하고 null 일 시에는 "" 출력
Elvis Operator 유용하게 사용하기 - kotlin
val temp : String? = null
textView.text = if (temp != null) temp else ""
textView.text = temp ?: "" // 위와 같은 식 더 간단하게 나타낼 수 있다.
NPE(Null Pointer Exception)
-> java
String temp = null;
int size = temp.length();
// NPE 발생
-> kotlin
val temp : String? = null
val size = temp?.length
!! Operator을 사용하자
- null 인 경우 자동으로 NullPointerException을 발생시킨다.
val temp : String? = null
val size = temp!!.length
-> try/catch가 필요한 경우
val size = try {
temp!!.length
} catch (e : NullPointerException) {
0
}
-> Elvis Operator을 이용하여 Exception 발생시키기
var temp : String? = null
val size = temp!!.length
-> or
val size = temp?.length ?: throw NullPointerException("temp is null")
java와 kotlin을 같이 쓸 때 주의점
-> kotlin
class Sample {
fun sumString(a : String, b : String) = "$a $b"
}
-> kotlin
class ExampleUnitTest {
lateinit var sample : Sample
private var a : String? = ""
@Before
fun setUp() {
sample = Sample()
a = null
}
@Test
@Throws (Exception::class)
fun test() {
sample.sumString(a, "B") // a가 null 이면 오류 발생 Sample의 sumString 함수의 파라미터가 null 허용하지 않음!!
}
}
-> java
public class ExampleUnitTest {
private Sample sample;
private String a;
@Before
public void setUp() {
sample = new Sample();
a = null;
}
@Test
fun test() {
sample.sumString(a, "bbb")
// 파라미터에 null을 그대로 대입하면 컴파일시 에러가 뜨지만 a가 null 이여도 컴파일시 에러뜨지 않음!! 실행하면 에러뜸!!
}
}
-> 1번째 방법
-> java
public class ExampleUnitTest {
private Sample sample;
private String a;
@Before
public void setUp() {
sample = new Sample();
a = null;
}
@Test
fun test() {
if( a != null) {
sample.sumString(a, "bbb")
// a가 null인지 if문으로 확인하는 방법. 하지만 개발자가 여러명일때 일일이 확인하기는 쉽지 않다.
}
}
-> 2번째 방법
-> kotlin
class Sample {
fun sumString(a : String?, b : String?) = "length ${a?.length ?: 0} $a $b"
}
// 코틀린 코드에서 null을 허용한 다음 elvis operator를 사용해서 지정해주는 방법
'# 02 > 코틀린' 카테고리의 다른 글
[Kotlin] Class Inheritance (0) | 2019.07.11 |
---|---|
[Kotlin] Null 예외처리 - etc (0) | 2019.07.11 |
[Kotlin] Null 처리 방법 (0) | 2019.07.11 |
[Kotlin] return and jumps and This-expressions (0) | 2019.07.11 |
[Kotlin] Lambda (0) | 2019.07.11 |