Kotlin

코틀린 (3) Functions

tjddneva 2022. 4. 3. 01:02

코틀린에는 거의 모든 게 value 가 있더라.

val isUnit = println("This is an expression")
println(isUnit)

This is an expression
kotlin.Unit

심지어 println 도 값이 있다. 기본 값이 kotlin.Unit 이다.

 

if else 문도 expression 이라 할 수 있고 return 값이 있어서 아래와 같이 쓸 수 있다!!

val temperature = 10
val isHot = if (temperature > 50) true else false
println(isHot)

false

 

string 안에서도 쓸 수 있다!

val temperature = 10
val message = "The water temperature is ${ if (temperature > 50) "too warm" else "OK" }."
println(message)

The water temperature is OK.

 

이제 함수를 보자..

fun swim(speed: String = "fast") {
   println("swimming $speed")
}

함수 파라미터를 이렇게 하고 default 값으로 "fast" 를 넣었다.

 

fun shouldChangeWater (day: String, temperature: Int = 22, dirty: Int = 20): Boolean {
    return when {
        temperature > 30 -> true
        dirty > 30 -> true
        day == "Sunday" ->  true
        else -> false
    }
}

when 사용하는 꼬라지와 함수의 return type 이 Boolean 이면 어떻게 쓰는지 체크 하면 되겠다. 만약 함수에서 return 타입을 명시하지 않으면 기본으로 Unit 을 return 하게 된다.

 

 

함수들이 만약 single-expression 만 return 하면 다음과 같이 compact 하게 쓸 수 있다.

fun isTooHot(temperature: Int) = temperature > 30

fun isDirty(dirty: Int) = dirty > 30

fun isSunday(day: String) = day == "Sunday"

이렇게 표현하고 나서 shouldChangeWater 를 수정할 수 있다.

fun shouldChangeWater (day: String, temperature: Int = 22, dirty: Int = 20): Boolean {
    return when {
        isTooHot(temperature) -> true
        isDirty(dirty) -> true
        isSunday(day) -> true
        else  -> false
    }
}

추가적으로 default value 에 숫자를 넣어줬는데 반드시 숫자가 올 필요가 없다. 예를 들어서

dirty: Int = getdirty() 이래도 된다는 것이다.