표현식 vs 명령문

  • 표현식은 값을 반환하고, 어떤 상태도 변화시키지 않는다.
  • 명령문은 아무것도 반환하지 않으며, 상태를 변화시키거나 변수를 변하게 하고, 파일 작성, 데이터베이스 업데이트, 네트워크 요청 등의  작업을 수행한다.

Java, C#, JavaScript 등은 표현식보다는 명령문을 더 많이 가지고 있다. (if, for, try 등)

반면, Ruby, F#, Haskell, Groovy 등은 표현식을 더 많이 가지고 있다.


코틀린의 if와 try-catch 문은 표현식이다.

자바와 같이 명령문 형태로 쓸 수도 있지만, 표현식 형태로 쓰는 것이 더 좋다.

fun canVote(name: String, age: Int): String {
    var status: String
    if (age > 18) {
    	status = "yes, please vote"
	} else {
    	status = "nope, please come back"
    }
    return "$name, $status"
}
  • 먼저 명령문 형태로 쓴 코틀린을 보자.
    • 명령문은 반환값을 주지 않기 때문에 조건에 따른 결과를 얻기 위해 뮤터블 변수가 필요해졌다.

 

val status = if (age > 18) "yes, please vote" else "nope, please come back"
  • 코틀린의 if문은 표현식이기 때문에 아래와 같이 작성할 수 있다. 
    • 변수를 이뮤터블하게 사용할 수 있고, 타입추론도 사용할 수 있다.

 

fun tryExpr(blowup: Boolean): Int {
	return try {
    	if (blowup) {
        	throw RuntimeException("fail")
        }
        2
    } catch (e: Exception) {
    	4
    }
}
  • try-catch 도 표현식으로 사용할 수 있다.
    • try문, catch문의 마지막 부분이 반환값이 된다.

a = b = c // error
  • Java는 할당을 표현식으로 취급하지만, 코틀린은 아니다.
  • 코틀린은 델리게이션(delegation)을 통해 변수를 get하거나 set하기 때문이다.
    • 추후 포스팅 예정

'Programming > 언어' 카테고리의 다른 글

[Kotlin] Unit, Any, Nothing 클래스  (0) 2023.02.12
[Kotlin] 타입추론  (0) 2023.02.12
Java 코드가 실행되는 과정  (0) 2021.12.26
Garbage Collector 찍먹하기  (0) 2021.12.26
객체지향에서 인터페이스란?  (0) 2021.12.26

+ Recent posts