[Kotlin] 코틀린으로 보는 문(statement)과 식(expression)

by 스뎅(thDeng) on

statement 와 expression

자바의 if-else는 문(statement)이고, 코틀린의 if-else는 식(expression)이다.

은 무슨 차이가 있을까?? 은 값을 만들어낸다. 아주 간단히 값을 return을 한다고 생각해도 좋을 것 같다. 아래 코드는 코틀린의 if-else인데, 이기 때문에 if와 else 블럭의 값을 리턴해 주어서 바로 maxValue에 값으로 대입할 수 있다.

fun max(a: Int, b: Int) = if (a > b) a else b

fun main(args: Array<String>) {
  val maxValue = max(1, 2)
  println("Max is $maxValue")
}

자바였다면 아래처럼 if, else 블럭에 return을 명시해 줘야 한다. (위의 코틀린 코드와 아래 자바 코드는 똑같은 코드이다.)

private static int max(int a, int b) {
  if (a > b) {
    return a;
  } else {
    return b;
  }
}

public static void main(String[] args) {
  int maxValue = max(1, 2);
  System.out.println("Max is " + maxValue);
}

맨처음 샘플에서 처럼 코틀린의 if-else는 자바의 3항 연산자처럼 사용할 수 있기 때문에, 코틀린은 별도로 3항 연산자를 제공하지 않는다. (Elvis operator(?:)는 제공한다.) 그리고 저렇게 if-else를 사용하는 코드를 많이 볼 수 있다.

when (switch)

자바의 switch와 같은 역할을 하는 when도 값을 리턴하는 이다.

enum class Color {
    RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET
}

fun getMnemonic(color: Color) =
    when (color) {
      Color.RED -> "Richard"
      Color.ORANGE -> "Of"
      Color.YELLOW -> "York"
      Color.GREEN -> "Gave"
      Color.BLUE -> "Battle"
      Color.INDIGO -> "In"
      Color.VIOLET -> "Vain"
    }

println(getMnemonic(Color.RED))
// 결과 "Richard"

위 코드의 getMnemonic함수는 enum 값에 따라 문자열을 리턴한다. 만일, 이 코드가 자바였다면.. 매번 return 넣어줄 생각만 해도;;

private static String getMnemonic(Color color) {
  switch (color) {
    case RED:
      return "Richard";
    case ORANGE:
      return "Of";
    case YELLOW:
      return "York";
    /* case .. 어휴 이쯤에서 포기 */
  }
}

중간에 break나 return 하나 빼먹으면 그 결과는..

참고

별도로 명시하지 않을 경우, 이 블로그의 포스트는 다음 라이선스에 따라 사용할 수 있습니다: Creative Commons License CC Attribution-NonCommercial-ShareAlike 4.0 International License