본문 바로가기

# 02/코틀린

[Kotlin] 조건문

반응형

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