Kotlin - 조건문

이동수·2024년 8월 27일

Kotlin

목록 보기
11/33
post-thumbnail

in 연산자

무엇에 속해 있느냐를 나타냄

if, when, loop, lange, generic에서 사용

  • generic에서는 좀 다르게 사용

a in b —— b.contains(a)

a !in b ———!b.contains(a)

 val nums = intArrayOf(1,2,3,4,5,6,7,8,9,0)
 if(5 in nums) println(" 5는 포함됨!")

if

  1. java와 거의 유사
var max = a
if (a<b) max = b
  1. 식으로 사용
  • if문이 으로 사용되는 경우 값을 반환함, if식의 경우 반드시 else를 동반해야함
val max = if (a>b) a else b
  1. 식으로된 여러줄
  • 블록의 마지막 구문이 반환값이됨
  • 출력을 하고 a를 반환
val max = if (a>b) {
	print()
	a
} else {
	print()
	b
}
  1. 삼항연산자(ternary)가 없음
  • 왜냐하면 if문이 삼항연산자 역할을 잘 해내기때문 (코틀린에서는 if문으로 삼항연산자를 대신함)
java코드
int max = (a>b) ? a: b;

코틀린코드
val max = if(a>b) a else b

range

kotlin 표준 라이브러리 kotlin.ranges에 존재

수열에 해당하는 값들을 열거할수 있다

세가지 range타입 존재

  • CharRagne
  • IntRange
  • LongRange
    fun main(args: Array<String>) {
        val a = 1..10000
        println("a타입은? :"+ a.javaClass)
        //출력 : a타입은? :class kotlin.ranges.IntRange
    }
     fun main(){
     val awesomePoint= Random().nextInt(30000)
     println("Awesome 포인트점수는 $awesomePoint입니다")
     //awesome 커피숍의 point 등급을 범위변수로 선언
        val bronzeRange= 1000..9999
     val silverRange= IntRange(10000,19999)
     val goldRange=20000..30000
     val awesomeRating= if(awesomePoint in bronzeRange)
     "Bronze"
     else if(awesomePoint in silverRange)
     "Silver"
     else if(awesomePoint in goldRange)
     "Gold"
     else
     "Brass"
     println("당신은 $awesomeRating등급입니다")
     }

when

if elseif else 쓰는 경우는 거의 다 when씀 (else if를 쓰는거는 초보라는 뜻)

switch case문은 kotlin에 없음

분기조건에 만족하는 요건이 없을 시에는 반드시 else문이 들어가야함

import java.util.*

    const val a = 100 // - > const 는 글로벌 상수 선언 키워드( val 타입만 가능하며 반드시 초기화가 되어야 한다)
    const val b = 50
    fun main(){
        println(">>>>>>>>>사칙연산(+,-,*,/) 기호를 입력하고 엔터키을 치세요<<<<<<<<<")
        val arithmeticSign = Scanner(System.`in`).nextLine().trim()
        val result= when(arithmeticSign){
            "+" -> a + b
            "-" -> a - b
            "*" -> a * b
            "/" -> a / b
            else -> {
                    println(arithmeticSign + " 는 연산기호가 아니네요!!!")

            }
        }
        println("$arithmeticSign 의 결과는 $result 입니다")
    }
const val GOLD = "Gold"
const val SLIVER = "Silver"
const val BRONSE = "Bronse"
const val BRASS = "Brass"
fun main(){
val awesomePoint = Random().nextInt(30000)
val awesomeRating = when(awesomePoint) { ---> when을 식으로 사용
 in 1000..9999 -> BRONSE
in 10000..19999 -> SLIVER
in 20000..29999 -> GOLD
else -> BRASS
}
println("당신의 포인트는 $awesomePoint 점이며 등급은 $awesomeRating 입니다")
// -1 - - - > 블럭 바로 전에 코딩을 해야 함
}

밑에 처럼 쓰지말고 위에처럼 쓰자 (awesomePoint가 중복된다)

val awesomeRating = when{ - - - - > when에 인자가 없을 시
awesomePoint in 1000..9999 -> "Bronze"
awesomePoint in 10000..19999 -> "Silver"
awesomePoint >= 20000 -> "Gold"
else -> {
"Brass"
}
}
  • 조건에 맞을때 동작되게 하는거(여러개 조건이 맞으면 먼저 부합하는 조건이 실행)
  • 등호나 부등호 사용못함
  • when같은거 쓸때 어떤 자료형이 출력될지 모르니 Any쓰는거같다

    Any : 어떤자료형이든 상관없이 호환되는거(코틀린의 최상위 자료형)

  • return부분에도 식으로 쓸 수 있다
override fun equals(other: Any?): Boolean {
        return when(other) {
            !is Employee4 -> false
            else -> empNumber == other.empNumber
        }
    }

when 최종 정리

  1. 기본
  • 각각의 branches의 조건문이 만족할 때 까지 위에서부터 순차적으로 인자를 비교함
  • break문이 필요가 없음
  1. 식으로 사용
  • 으로 사용된 경우에는 조건을 만족하는 branch의 값이 전체 식의 결과 값이 됨
  • 식으로 사용된 경우 else문이 필수임
var res = when(x) {
100
90
80
else ->
}
  • 컴파일러가 else문이 없어도 된다는 것을 입증할수 있는 경우에만 else생략가능. ex)boolean값이 들어갈때
 var res = when (x) {
	 true -> "맞다"
	 false -> "틀리다"
	 }
  1. 여러 조건들이 같은 방식으로 처리될때는 (,)사용
when (x) {
0,1,2,3 ->
else ->
}
  1. branch의 조건함수나 식을 사용할 수 있음
when (x) {
parseInt(x) ->
1+3 ->.
else ->
}
  1. range나 collection에 in, !in으로 범위 등을 검사할 수 있음
val number = listOf(3,6,9)
when (x) {
in number ->
in 1..10 ->
~in 10..20 ->
else ->
}
  1. is, !is를 이용해 타입 검사가능
  • 이때 스마트 캐스트가 적용된다. (String인지 검사 하는 동시에 스마트 캐스팅이 돼서 x는 String이 된다)
fun hasPrefix(x: Any) = when(x) {
	is String -> x.startsWith("prefix")
	else -> false
}
  1. 파라미터 없이 if,else if의 느낌으로 사용할 수 있다. when에 인자를 입력하지 않으면, 논리연산으로 처리됨
x = 3
y = 2
when {
x.isOdd() -> print("x is odd") //isOdd()함수는 홀수인지 판별하는 함수
y.isEven() -> // isEven()은 짝수인지 판별하는 함수
else ->
}

0개의 댓글