android/Kotlin
Kotlin Expression
junmong
2020. 4. 16. 21:00
KotlinExpression
Expression(if-else)
/* java */
int a = 5;
int b = 10;int maxValue = a;
if (a > b) {
maxValue = a;} else {
maxValue = b;
}
/* kotlin */val a = 5
val b = 10
// Traditional usage
var maxValue = a
if (a < b) maxValue = b
// with elsevar max: Int
if (a > b) {max = a
} else {max = b
}val max = if (a > b) {
print("Choose a")
a} else {
print("Choose b")b
}
java와 다르게 kotlin 에서는 if, else도 표현식이다. 따라서 if else는 항상 반환값이 있다.{} 블럭으로 있을 경우에는 마지막 줄의 값을 반환합니다.
if, else을 표현식으로 사용 할경우에는 if가 있으면 else도 항상 있 어야 합니다.
Expression(when)
/* Java */
int x = 1;
switch (x) {
case 1: {
System.out.println("1");
break;
} case 2: {
System.out.println("2");
break;
} case: {
System.out.println("default");
break; }
}
/* Kotlin */
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")
}
}
val x = 1
when (x) {
0, 1 -> print("x == 0 or x == 1")
else -> print("otherwise")
}
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
}
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")
}
/* 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();
}
}
/* Kotlin */
fun test(x: Any) : Any = when(x) {
is String -> x.startsWith("prefix")
is Int -> x + 3
is Person -> x.name
else -> false
}
Java의 switch case와 비슷합니다. 하지만 표현식으로 활용 할수 있어 값을 할당 할 수 있습니다.
Kotlin의 is는 Java의 instanceOf 와 비슷합니다.
{} 블럭으로 있을 경우에는 마지막 라인의 값을 반환합니다.
when을 표현식으로 사용 할경우에는 else도 항상 있어야 합니다.(enum제외)
when으로 type을 분기 하면 별도로 casting을 하지 않아도 됩니다.
Expression(try-catch)
/* Java */
String value = "test";
int parsedInt;
try {
parsedInt = Integer.parseInt(value);
} catch (NumberFormatException e) {
e.printStackTrace(); parsedInt = -1;
}
System.out.println(parsedInt); // -1
/* Kotlin */
val value = "test"
val parsedInt: Int? = try {
value.toInt()
} catch (e: NumberFormatException) {
-1
}
println(parsedInt) //-1
Java의 try catch 와 비슷합니다. 하지만 표현식으로 활용 할수 있 어 값을 할당 할 수 있습니다.
정상적인 케이스에는 try 값이 exception이 발생하면 catch 값이 할당 됩니다.
try, catch 는 {}의 마지막 줄의 값을 반환합니다.
Java와 마찬가지로 finally 도 제공하지만 optional 입니다.