-
3-2. 함수 정의하기 : 조건문Study(종료)/Kotlin 22.09.13 ~ 12.18 2022. 9. 26. 12:51
3장 정리
3-2. 함수 정의하기 : 조건문
3.2 조건문
1) if문으로 선택하기
if문을 사용하면 불(boolean) 식의 결과에 따라 두 가지 대안(true/false)중 하나를 선택할 수 있다. 문법은 아래와 같다.
fun min (a: Int, b: Int): Int{ return if(a < b) a else b } fun max(a: Int, b: Int) = if (a > b) a else b fun main(args: Array<String>) { if(args.isNotEmpty()){ val message = "Hello :) ${args[0]}" println(message) }else{ println(":(") } }
2) 범위(Range), 진행(Progression), 연산
코틀린은 순서가 정해진 값 사이의 수열을 표현하는 몇 가지 범위와 진행 타입을 제공한다.여기서 타입은 Int, Float 같은 변수 타입이며
코틀린 표준 라이브러리에 IntRange, FloatRange, CharProgression 등으로 정의돼 있다.
범위를 만드는 방법은 수 값에 대해 .. 연산자를 사용하는 것이다.
var chars = 'a'..'z' // CharRange var twoDigits = 10..99 // IntRange var zero2One = 0.0..1.0 // ClosedFloatingPointRange<Double>
.. 연산을 통해 만들어 지는 범위는 닫혀있다. 즉 시작 값과 끝 값이 범위에 포함된다.
실제로 위 코드를 작성하면 Intellij에서는 범위를 아래와 같이 표시해 준다
끝값이 제외된 반만 닫힌 범위를 만드는 until 연산도 있다.
이 연산은 정수 타입에 대해서만 사용할 수 있고, 끝 값보다 1 작은 값까지 들어있는 범위를 만들어낸다.
var twoDigits = 10 until 99 // 10 <= until < 99 // var chars = 'a'until'z' // error // var zero2One = 0.0 until 1.0 // error
in 연산을 사용하면 어떤 값이 범위 안에 들어있는지 알 수 있다.
일반적인 경우 두 개의 비교식을 조합한 것과 동일하다.이와 반대 연산인 !in 연산도 있다.
val chars = "abc" .. "xyz" println("efg" in chars) // true println("zzz" in chars) // false println("zzz" !in chars) // true val twoDigits = 10 until 99 println(20 in twoDigits) // true println(99 in twoDigits) // false
내장 범위 연산에서 끝 값이 시작 값보다 확실히 더 작으면 범위가 빈 범위가 된다.
println(5 in 5..5) // true println(5 in 5 until 5) // false println(5 in 10..1) // false val arr = 10..1 println(arr.isEmpty()) // true
범위와 연관이 있는 개념으로 진행(Progression)이 있다.
책에서 진행이라고 번역했는데, 이 파트에서 진행이라고 말하는 것 보다는
그냥 Progression이라고 표현하는게 더 나아보이기 때문에 Progression이라고 설명하겠다.
Progression은 정해진 간격만큼 떨어져있는 정수나 Char값으로 이뤄진 수열을 말한다.
정수나 Char에 대해 정의된 범위는 실제로는 간격이 1인 Progression이라고 할 수 있다.
하지만 일반적으로 Progression이 범위(Range)보다 더 많은 옵션을 제공한다.
downTO 연산을 이용하면 역방향(Descending) Progression을 만들수 있고,
step를 이용해 간격을 지정할 수 있다.
val range = 1..10 step 3 // 1, 4, 7, 10 for(i in 1..10){ print("$i ${i in range} ") } // 1 true 2 false 3 false 4 true 5 false // 6 false 7 true 8 false 9 false 10 true
step은 양수여야 한다 downTo와 step를 이용해서 Progression을 만들 수 있는데, 이 때도 step는 양수를 사용한다.
Progression의 원소는 시작 값 + 간격(step)을 더해서 만들어진다.
따라서 실제로는 끝 값이 Progression에 포함된 원소가 아닐 수도 있다.
// val range = 10 downTo 1 step -3 // IllegalArgumentException: Step must be positive, was: -3. val range = 11 downTo 1 step 3 // 11, 8, 5, 2 for(i in 1..11){ print("$i ${i in range} ") }
3) when 문과 여럿 중에 하나 선택하기
if문은 두 가지 가능성 중 하나를 선택하게 해준다.
이런 if문을 연쇄적으로 여러 개 사용하면 관심 대상인 조건을 순차적으로 검사하면서 여럿 중 하나를 선택할 수 있다.
코틀린은 여러 대안 중 하를 선택할 수 있는 간결한 대한인 when을 제공한다.
두 식을 비교하면 다음과 같다.
fun hexDigit1(n: Int): Char { if(n in 0..9) return '0' + n else if (n in 10..15) return 'A' + n - 10 else return '?' } fun hexDigit2(n: Int): Char{ return when (n) { in 0..9 -> '0' + n in 10..15 -> 'A' + n - 10 else -> '?' } }
코틀린의 when은 여러 대안 중 하나를 선택한다는 점에서 자바의 switch문과 비슷하지만,
코틀린의 when에서는 임의의 조건을 검사할 수 있지만 자바의 switch문에서는 주어진 식의 여러 값중 하나만 선택할 수 있다.
다음 글
반응형'Study(종료) > Kotlin 22.09.13 ~ 12.18' 카테고리의 다른 글
3-4. 함수 정의하기 : 예외 처리 (2) 2022.09.26 3-3. 함수 정의하기 : 루프 (1) 2022.09.26 3-1. 함수 정의하기 : 함수 (1) 2022.09.26 2. 코틀린 언어 기초 : 기본 문법 (2) 2022.09.21 코틀린 스터디 시작 (2) 2022.09.13