- 코틀린의 변수 선언은 본래 null을 허용하지 않음
val a:Int = 24- Null을 허용할 수 있도록 선언 ( ? )
val a:Int? = 24- null을 허용하지 않는곳에 null을 할당하면?
NullPointException 예외 발생
- 변수 뒤에 "!!"로 표시
- property나 변수에 붙이면 강제로 null이 아니다라고 선언
- null이 들어오면 NullPointException 발생
fun ignoreNulls(s: String?) { val s2: String = s!! println(s2.length) }
- 변수 뒤에 "?"를 붙여서 호출, null값을 혀용
fun safeCall(s: String?):Int? { println("safeCall : ${s?.length}") return s?.length }
- null인 경우 default값을 주고 싶을때 "?:"를 사용
fun elvis(s: String?):Int { println("elvis : ${s?.length}") return s?.length ?: 0 // null이면 0을 리턴 }
- 자바와 다르게 코틀린에서는 if문 결과를 리턴받을 수 있다.
(코틀린에서는 삼항 연산자가 없다.)- 나머지는 자바와 동일
val a = 10; val b = 5; val num = if(a>b) a else b
- when문은 위에서 아래로 해당되는 것이 나타나면 아래로 계속 진행하지 않고 바로 stop한다.
- 값이 하나인 경우 콤마나 in연산자로 값의 범위를 자유롭게 지정하고 싶을 때 사용한다.
- when문의 각 조건에 블럭으로 감쌀 수도 있고, 안 할 수도 있다.
val a = 3; when(a) { 1 -> println("1") 2 -> println("2") 3 -> println("3") in 4..5 -> println("4") else ->{ println("a는 5보다 크다.") } }
- in 연산자를 통해서 배열을 순회 가능
- downTo, step, until
val num = arrayOf(1, 2, 3, 4)
for (n in num) {
println(n) // 1; 2; 3; 4;
}
for (i in 1..4) {
println(i) // 1; 2; 3; 4;
}
for (i in 0..10 step 2) {
println(i) // 0; 2; 4; 6; 8; 10;
}
for (i in 10 downTo 0 step 2) {
println(i) // 10; 8; 6; 4; 2; 0
}
for (i in 0..10 step 2){
println(i) // 0; 2; 4; 6; 8; 10;
}
for( i in num.indices) {
println("num.indices : index-$i : value-${num7[i]}")
}
num.forEach { println("foreach : $it") }
num.forEachIndexed { index, value ->
println("forEachIndexed : index-$index : value-$value")
}
결과
num.indices : index-0 : value-1
num.indices : index-1 : value-2
num.indices : index-2 : value-3
num.indices : index-3 : value-4
foreach : 1
foreach : 2
foreach : 3
foreach : 4
forEachIndexed : index-0 : value-1
forEachIndexed : index-1 : value-2
forEachIndexed : index-2 : value-3
forEachIndexed : index-3 : value-4
while / do while / break / continue
자바와 동일
레이블이 붙여진 곳으로 이동이 가능하다.
중첩된 반복문에서 완전히 탈출하고 싶을 때 주로 사용된다.out@for(i in 1..10){ for(j in 1..10){ if( j == 3 ) break@out } }