2018. 6. 15. 05:20ㆍkotlin-이론
코틀린 controlFlow
If~ else~ 문
fun main(args:Array){ //한줄 바로 대입 val a = 1 val b = 2 val max = if (a > b) a else b println(max) //block 대입가능 val test2 = if (a > b){ println("choose A") a }else { println("choose B") b } //제일 마지막 값이 반환한다. println(test2) //삼항연산자 제외 //Java int max = (a>b) ? a:b; val test3 = if(a>b) a else b }
5번줄 처럼 변수에 한줄로 이러한 코드를 입력시킬 수 있다.
8번의 if 처럼 block을 써도 되고 안써도 된다. 하지만 2줄 이상이라면 블럭을 써줘야 한다. 마지막 a, b가 조건에 맞게 반환되어 test2의 값이 된다.
기존에 자바에 있던 삼항 연산자가 없다. 하지만 별문제 없이 젤 마지막 코드와 같이 사용할 수 있다.
when
when(x){//조건이 만족할 떄 까지 내려감 1 -> println("x == 1") 2 -> println("x == 2")
"hi" -> println("hi") else -> { //block 생략가능 println("Not correct") } }
x가 1이면 2이면 일때 저렇게 출력되고 아무조건이 만족되지 않는다면 else에 있는 코드가 출력된다. block을 넣어도 되고 생략할 수 도 있다.
변수에 대입도 가능하다.
var res = when(x){ 100 -> "A" 90 -> "B" 80 -> "C" else -> "F" }
True or False로도 값을 체크할 수 있다.
when(x){ true->println("참입니다") false->println("거짓 입니다.")
true와 false로도 값을 구분할 수 있다.
,를 사용해서 or 기능도 구현가능 하다.
when(x){ 1, 0 -> println("1 or 0 이다") else -> println("둘다 아니다") }
조건문에 함수나 식을 사용할 수 있다.
when(x){ Integer.parseInt(x.toString()) -> print("s not encode x") 1+3 ->print("4") else -> println("s does not encode x") }
in이나 !in을 사용해서 범위등을 검사할 수있다.
when(x){ in 1..10->println("1과 10사이에 속한다.") !in 11..20->println("11과 20사이에 속한다.") else -> println("둘다 아니야")
데이터 형태를 체크해 줄 수 있다.
when(x){ is String->println("문자열이야") !is String -> println("문자열이 아니야")
for문
for문은 특이하게 .iterable() 함수를 갖고있는 객체는 반복문에 쓸 수 있다.
var collection = intArrayOf(1, 2, 3, 4, 5) var collect = Array(5, {a->a.toString()}) for (item in collection){ println(item) }
For문을 지원하는 iterator의 조건
멤버함수나 확장 함수 중에 iterator를 반환 하는 것이 있는 경우
>> next를 갖는 경우
>> hasNext(): Boolean을 가지는 경우
>> 위의 함수들은 operator를 표현해야한다.
var myData = MyData() for (item in myData) { println(item) } class MyData{ operator fun iterator():nnext { return nnext() } } class nnext{ var collection = arrayListOf(1, 2, 3, 4, 5) var idx = 0 operator fun next(): Int { return collection[idx++] } operator fun hasNext():Boolean{ return collection.size > idx } }
iterator함수가 있으면 어느 객체이든 for문에 반복할 수 있다고 말했다. 내가 인위적으로 .iterator함수를 만들어서 실해 시켜보았다.
인수 값과 인수값 + value를 받아서 반복문 돌리기
var array = intArrayOf(1, 2, 3, 4, 5, 6) //인덱스 값만 i로 들어간다 for (i in array.indices){ } for ((j,v) in array.withIndex()){ println("$j $v") }
.indices는 i에 0~의 인덱스 값을 넣고
.withIndex는 value와 인수값 동시에 반환한다.
'kotlin-이론' 카테고리의 다른 글
[kotlin]Class (0) | 2018.06.15 |
---|---|
[kotlin]Return and Jumps (break 문, continue 문, return 문) (0) | 2018.06.15 |
[kotlin]코틀린 BasicType (0) | 2018.06.14 |
[kotlin] kotlin Basic Syntax java와 비교 (0) | 2018.06.13 |
[kotlin] kotlin 시작하기 (0) | 2018.06.13 |