java와 문법은 동일하다.
포함관계
expression : 하나의 값으로 도출되는 문장
statement : 프로그램의 문장, 하나의 값으로 도출되지 않는다.
int score = 30 + 40
// 30+40은 expression 이면서 statement
String grade = if (score >= 50) {
return "P";
} // 자바에서 이런건 안된다. statement다.
String grade = score >= 50 ? "P" : "F"; // 3항연산자는 하나의 값으로 취급하므로 expression이면서 statement
java에서 if-else는 statement이지만,
kotlin에서는 expression이다.
따라서 아래 코드가 가능하다. 그리고 3항 연산자가 없다!!
fun getPassOrFail(score: Int): Strin {
return if (scores >= 50) {
"P"
} else {
"F"
} // 이 부분이 expression
}
자바의 switch 가 코틀린에선 더 강력한 when으로 대체되었다.
when (val) {
"a" -> println("a")
"b" -> println("b")
else -> println("null")
}
fun compareNum2(x: Int, y: Int) = if (x>y) x else y
// 두개 동일한 함수
fun strNum(x: Int?): String {
when (x) {
1 -> return "One"
2 -> return "Two"
3 -> return "Three"
else -> return "???"
}
}
fun strNum2(x: Int?) =
when (x) {
1 -> "One"
2 -> "Two"
3 -> "Three"
else -> "???"
}
}
// when 내부 조건절 여러 형식으로 응용
fun strNum3(x: Int?) =
when (x) {
in 0..3 -> println("숫자")
4,5 -> println("사오")
is String -> println("문자열")
else -> println("흐음")
}
}
// when에 조건이 없으면 내부에 조건으로 가능..
fun strNum4(x: Int?) =
when {
x % 11 == 0 -> println("11의 배수")
}
}
Enum class. Sealed Class와 함께 사용하면 더욱더 좋다.(나중에)