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 else

var 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
}

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 입니다.