[Kotlin/코틀린] 흐름 제어 구문과 연산자

SoyoungLee·2021년 3월 22일
0
post-thumbnail

💌 흐름 제어 구문과 연산자

📌 조건문

💜 if 표현식

// 표현식으로서의 if문
val result = if(a>0) "hello" else "world"	// -> 표현식일 경우 else문 생략 불가능
println(result)

// if 표현식의 반환값 
val result2 = if(a<10){
	println("hello.."
    10 + 20			// -> { }사용할 때 데이터를 맨마지막에 작성
} else {
	print("world..")
    20+20
}

prinln(result2)

🖥
world
hello..30

💜 when 표현식

1) 정수로 분기

fun main(args: Array<String>){
	val a2 = 1
    when (a2){
    1 -> println("a2 == 1")
    2 -> println("a2 == 2")
    else -> println("a2 is neither 1 nor 2")
    }
}

🖥
a2 == 1

2) 정수 이외의 값으로 분기

val data1 = "hello"
when(data1){
	"hello" -> println("data1 is hello")
    "world" -> println("data1 is world")
    else -> println("data1 is not hello or world")
}

🖥
data1 is hello

3) 여러 값으로 분기

when(data2){
	10, 20 -> println("data2 is 10 or 20")
    30, 40 -> println("data2 is 30 or 40")
    some() -> println("data2 is 50")
    30 + 30 -> println("data2 is 60")
}

4) 범위 값으로 분기

when(data3){
	!in 1..100 -> println("invalid data")
    	in 1..10 -> println("1 <= data3 <= 10")
    	in 11..20 -> println("11 <= data3 <== 20")
	else -> println("data2 > 20")
}

🖥
11 <= data3 <== 20

5) 여러 타입으로 분기

fun testWhen(data: Any){
	when(data){
   		1-> println("data value is 1")
      		"hello" -> println("data value is hello")
    		is Boolean -> println("data value is Boolean")
    }
}

6) if else 대체용으로 사용

7) 표현식으로 사용

📌 반복문

💜 for 반복문

fun main(args: Array<String>){
	var sum: Int = 0
    for(i in 1..10){		// 1부터 10까지 1씩 증가하면서 i에 대입하고 10번 반복
    	sum += i
    }
}

🖥
55

컬렉션 타입 이용

val list = listOd("Hello", "World", "!")
val sb = StringBuffer()
for(str in list){
	sb.append(str)
}
println(sb)

🖥
HelloWorld!

컬렉션 타입의 인덱스 값 이용

for(i in list.indices){
	println(list[i])
}

🖥
Hello
World
!

컬렉션 타입의 인덱스와 값 모두 이용

for((index, value) in list.withIndex()){
	println("the element at $index is $value")
}

🖥
the element at 0 is Hello
the element at 1 isWorld
the element at 2 is!

for (i in 1..100) -> 100까지 포함
for (i in 1 until 100) -> 100 포함 안함
for (x in 2..10 step 2) -> 2씩 증가
for (x in 10 downTo) -> 숫자 감소

💜 while 반복문

while (x<10) {
	sum1 += ++x
}

💜 break와 continue문, 그리고 라벨

  • break : 그 { } 벗어남
  • continue : { } 의 맨 마지막 줄로 실행 흐름 이동
  • 라벨 선언 : aaa@ / 라벨 가리킬 때 : @aaa

📌 연산자

💜 대입연산자

= : 값 대입

💜 산술연산자

+, -, *, /, % : 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지

💜 전개연산자

*A : A배열의 데이터를 나열

val array1 = arrayOf(10, 20, 30)
val list = asList(1, 2, *array1, 100, 200)
list.forEach({println(it)})

val list3 = listOf<String>("a", "b")
some(*list3.toTypedArray())			// 배열 데이터로 변경해서 이용

🖥
1
2
10
20
30
100
200

💜 복합 대입 연산자

+=, -=, *=, /=, %=

💜 증감 연산자

++, --

💜 논리 연산자

&& : AND
|| : OR
! : NOT

💜 일치 연산자

==, != : 값에 대한 비교
===, !== : 객체에 대한 비교

💜 비교 연산자

<, >, <=, >=

💜 범위 연산자

..

💜 Null 안전 관련 연산자

? val a: Int? -> a변수를 null 허용
?: A ?: B -> A가 null이면 B 실행
?. A?.length -> A가 null이면 null, null이 아니면 length
!! A!!B -> A가 null이 아닐 때만 B 실행, null이면 예외 발생

📌 연산자 재정의

💜 연산자 재정의 방법

  • 재정의하려는 함수 앞에 operator 예약어 추가

💜 연산자 함수

+a : a.unaryPlus()
-a : a.unaryMinus()
!a : a.not()
a++ : a.inc()
a-- : a.dec()
a+b : a.plus(b)
a-b : a.minus(b)
ab : a.times(b)
a/b : a.dev(b)
a%b : a.rem(b) , a.mod(b)(deprecated)
a..b : a.rangeTo(b)
a in b : b.contains(a)
a !in b : !b.contains(a)
a[i] : a.get(i)
a[I,j] : a.get(I,j)
a[i] = b : a.set(I,b)
a[I,j] = b : a.set(I,j,b)
a() : a.invoke()
a(i) : a.invoke(i)
a(i,j) : a.invoke(I,j)
a+=b : a.plusAssign(b)
a-=b : a.minusAssign(b)
a
=b : a.timesAssign(b)
a/=b : a.divAssign(b)
a%=b : a.modAssign(b)
a===b : a?.equals(b) ?: (b===null)
a!=b : !(a?equals(b) ?: (b===null)
a>b : a.compareTo(b) > 0
a<b : a.compareTo(b) < 0

profile
Android Developer..+ iOS 슬쩍 🌱 ✏️끄적끄적,,개인 기록용 👩🏻‍💻

0개의 댓글