if 문, if~else 문
// if 문
var max = a
if ( a<b )
max = b // 수행할 문장이 한 줄이면 중괄호를 생략할 수 있음
// if~else 문의 간략화
var max : Int
if ( a>b )
max = a
else
max = b
// 간단하게 한 줄로 표현 가능
val max = if ( a>b ) a else b
fun main() {
val a = 12
val b = 7
// 블록과 함께 사용
val max = if (a>b) {
println("a 선택")
a // 마지막 식인 a가 반환되어 max에 할당
} else {
println("b 선택")
b // 마지막 식인 b가 반환되 max에 할당
}
println(max)
}
val number = 0
val result = if (number>0)
"양수 값"
else if (number<0)
"음수 값"
else
"0"
fun main() {
print("Enter the score : ")
val score = readline()!!.toDouble() // 콘솔로부터 입력 받음
var grade : Char = 'F'
if (score >= 90.0) {
grade = 'A'
} else if (score >= 80.0 && score <= 89.9) {
grade = 'B'
} else if (score >= 70.0 && score <= 79.9) {
grade = 'C'
}
println("Score : $score, Grade : $grade")
}
- 세이프콜(?.)을 사용하려면 score를 비교하기 전에 if (score != null) {...}와 같이 null을 먼저 검사해야 한다.
- 넌널(non-null) 단정기호(!!.)는 null이 들어올리 없다라고 단정하는 기호로 널 가능성은 존재하나 컴파일러가 경고를 내보내지 않도록 한다.
비교 연산자와 논리 연산자의 복합
- ...} else if (score >= 80.0 && score <= 89.9) {...
- 비교 연산자(>=, <=)와 논리곱 연산자(&&)가 사용
범위(range) 연산자
- 변수명 in 시작값.. 마지막값
- score in 80..89이면 score 범위에 80부터 89까지 포함
범위 연산자 이용 예
if (score >= 90) {
grade = 'A'
} else if (score in 80.0..89.9) {
grade = 'B'
} else if (score in 70.0..79.9) {
grade = 'C'
}
fun main() {
print("Enter the score : ")
val score = readline()!!.toDouble() // 콘솔로부터 입력 받음
var grade : Char = 'F'
if (score >= 90.0) {
grade = 'A'
} else if (score in 80.0..89.9) { // 시작값과 끝 값이 포함된다.
grade = 'B'
} else if (score in 70.0..79.9) {
grade = 'C'
}
println("Score : $score, Grade : $grade")
}
인자를 사용하는 when문
when (인자) {
인자에 일치하는 값 혹은 표현식 -> 수행할 문장
인자에 일치하는 범위 -> 수행할 문장
...
else -> 문장
}
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> { // 블록 구문 사용 가능
print("x는 1, 2가 아닙니다.")
}
}
- 일치되는 여러 조건
when (x) {
0, 1 -> print("x == 0 or x == 1")
else -> print("기타")
}
- 함수의 반환값 사용하기
when (x) {
parseInt(s) -> print("일치함!")
else -> print("기타")
}
- in 연산자와 범위 지정자 사용
when (x) {
in 1..10 -> print("x는 1 이상 10 이하입니다.")
!in 10..20 -> print("x는 10 이상 20 이하의 범위에 포함되지 않습니다.")
else -> print("x는 어떤 범위에도 없습니다.")
}
- is 키워드 함께 사용하기
val str = "안녕하세요."
val result = when(str) {
is String -> "문자열입니다." // 자료형 확인
else -> false
}
fun main() {
print("Enter the score : ")
val score = readLine()!!.toDouble()
var grade : Char = 'F'
when(score) {
in 90.0..100.0 -> grade = 'A'
in 80.0..89.9 -> grade = 'B'
in 70.0..79.9 -> grade = 'C'
!in 70.0..100.0 -> grade = 'F'
}
val msg = when(score) {
90.0, 100.0 -> "Good!"
else -> "Not bad!"
}
println("Score : $score, Grade : $grade, status : $msg")
}
- 인자가 없는 when
when {
조건 [혹은 표현식] -> 실행문
}
- 특정 인자에 제한하지 않고 다양한 조건을 구성
fun main() {
print("Enter the score:")
var score = readLine()!!.toDouble()
var grade : Char = 'F'
// 인수 없는 when의 사용
when {
score >= 90.0 -> grade = 'A' // 인자 있는 when과 다르게 조건식을 구성할 수 있음
score in 80.0..89.9 -> grade = 'B'
score in 70.0..79.9 -> grade = 'C'
score < 70.0 -> grade = 'F'
}
println("Score : $score, Grade : $grade")
}
- 인자를 받지 않는 경우에는 인자에 제한하지 않고 다양한 변수에 대한 조건을 구성할 수 있다. 또한 비교 연산자도 사용할 수 있게 된다.
class MyClass
fun main() {
cases("Hello") // 2번 String
cases(1) // Int
cases(System.currentTimeMillis()) // Long
cases(MyClass()) // 객체
}
fun cases( obj : Any) { // 1번
when (obj) {
1 -> println("Int : $obj")
"Hello" -> println("String : $obj")
is Long -> println("Long : $obj")
!is String -> println("Not a String")
else -> println ("Unknown")
}
}
- Any는 모든 클래스의 기반 클래스로 어떤 자료형이든 Any로부터 상속 확장 된다.
'# 02 > 코틀린' 카테고리의 다른 글
[Kotlin] Properties and Fields (0) | 2019.07.11 |
---|---|
[Kotlin] Types (0) | 2019.07.11 |
[Kotlin] 함수와 변수의 범위 (0) | 2019.07.10 |
[Kotlin] android extentions (0) | 2019.07.09 |
[Kotlin] 코드 예제 MainActivity.kt (0) | 2019.07.08 |