9. Expression(if-else)
• Java와 다르게 Kotlin 에서는 if, else도 표현식입니다. 따라
서 if else는 항상 반환값이 있습니다.
• {} 블럭으로 있을 경우에는 마지막 줄의 값을 반환합니다.
• if, else을 표현식으로 사용 할경우에는 if가 있으면 else도
항상 있어야 합니다.
11. Expression(when)
/* Java */
int x = 1;
switch (x) {
case 1: {
System.out.println("1");
break;
}
case 2: {
System.out.println("2");
break;
}
default: {
System.out.println("default");
break;
}
}
12. Expression(when)
val x = 1
when {
x == 1 -> print("x == 1")
x == 2 -> print("x == 2")
else -> { // Note the block
print("x is neither 1 nor 2")
}
}
13. Expression(when)
val x = 1
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> { // Note the block
print("x is neither 1 nor 2")
}
}
14. Expression(when)
val x = 1
when (x) {
0, 1 -> print("x == 0 or x == 1")
else -> print("otherwise")
}
15. Expression(when)
val s = "1"
val x = 1
when (x) {
parseInt(s) -> print("s encodes x")
else -> print("s does not encode x")
}
}
fun parseInt(value : String) : Int {
return 1
}
16. Expression(when)
val x = 129
val validNumbers = 100..120
when (x) {
in 1..10 -> print("x is in the range")
in validNumbers -> print("x is valid")
!in 10..20 -> print("x is outside the range")
else -> print("none of the above")
}
17. Expression(when)
/* Java */
public void test(Object obj) {
if (obj instanceof String) {
System.out.println(((String)obj)
.startsWith(“preFix"));
} else if (obj instanceof Integer) {
Integer.valueOf(String.valueOf(obj));
} else if (obj instanceof JavaPerson) {
((JavaPerson) obj).getName();
}
}
18. Expression(when)
/* Java */
public void test(Object obj) {
if (obj instanceof String) {
System.out.println(((String)obj)
.startsWith(“preFix"));
} else if (obj instanceof Integer) {
Integer.valueOf(String.valueOf(obj));
} else if (obj instanceof JavaPerson) {
((JavaPerson) obj).getName();
}
}
19. Expression(when)
/* Kotlin */
fun test(x: Any) : Any = when(x) {
is String -> x.startsWith("prefix")
is Int -> x + 3
is Person -> x.name
else -> false
}
20. Expression(when)
/* Kotlin */
fun test(x: Any) : Any = when(x) {
is String -> x.startsWith("prefix")
is Int -> x + 3
is Person -> x.name
else -> false
}
smartCasting
23. Expression(when)
• Java의 switch case와 비슷합니다. 하지만 표현식으로 활용
할수 있어 값을 할당 할 수 있습니다.
• Kotlin의 is는 Java의 instanceOf 와 비슷합니다.
• {} 블럭으로 있을 경우에는 마지막 라인의 값을 반환합니다
.
24. Expression(when)
• Java의 switch case와 비슷합니다. 하지만 표현식으로 활용
할수 있어 값을 할당 할 수 있습니다.
• Kotlin의 is는 Java의 instanceOf 와 비슷합니다.
• {} 블럭으로 있을 경우에는 마지막 라인의 값을 반환합니다
.
• when을 표현식으로 사용 할경우에는 else도 항상 있어야
합니다.(enum제외)
25. Expression(when)
• Java의 switch case와 비슷합니다. 하지만 표현식으로 활용
할수 있어 값을 할당 할 수 있습니다.
• Kotlin의 is는 Java의 instanceOf 와 비슷합니다.
• {} 블럭으로 있을 경우에는 마지막 라인의 값을 반환합니다
.
• when을 표현식으로 사용 할경우에는 else도 항상 있어야
합니다.(enum제외)
• when으로 type을 분기 하면 별도로 casting을 하지 않아도
됩니다.
26. 실습
• when을 이용해 String value를 입력받아 아래의 조건들로
분리
• 1. test 로 시작하는지 (startsWith)
• 2. length 가 3보다 작은지
30. Expression(try-catch)
• Java의 try catch 와 비슷합니다. 하지만 표현식으로 활용
할수 있어 값을 할당 할 수 있습니다.
• 정상적인 케이스에는 try 값이 exception이 발생하면 catch
값이 할당 됩니다.
31. Expression(try-catch)
• Java의 try catch 와 비슷합니다. 하지만 표현식으로 활용
할수 있어 값을 할당 할 수 있습니다.
• 정상적인 케이스에는 try 값이 exception이 발생하면 catch
값이 할당 됩니다.
• try, catch 는 {}의 마지막 줄의 값을 반환합니다.
32. Expression(try-catch)
• Java의 try catch 와 비슷합니다. 하지만 표현식으로 활용
할수 있어 값을 할당 할 수 있습니다.
• 정상적인 케이스에는 try 값이 exception이 발생하면 catch
값이 할당 됩니다.
• try, catch 는 {}의 마지막 줄의 값을 반환합니다.
• Java와 마찬가지로 finally 도 제공하지만 optional 입니다.