제어 구조

if 문 사용 예시

val answerString: String = if (count == 42) {
    "I have the answer."
} else if (count > 35) {
    "The answer is close."
} else {
    "The answer eludes me."
}

println(answerString)

// 위 조건식을 아래와 같이 
val answerString = when {
    count == 42 -> "I have the answer."
    count > 35 -> "The answer is close."
    else -> "The answer eludes me." // when 이 Expression이면 else 필수!!!
}
println(answerString)

Expression과 Statement의 차이점

어떤 연산을 거쳐 값을 반환하면 Expression이고, 단순히 명령을 지시하는 문장이면 Statement이다.

코틀린에서 모든 함수는 Expression이다. 함수가 값을 반환하지 않더라도 항상 Unit이 리턴되기 때문에 Expression으로 본다. (반면에, 자바의 void형은 Statement이다.)

조건문에서 null 체크

val languageName: String? = null
if (languageName != null) {
    // No need to write languageName?.toUpperCase()
    println(languageName.toUpperCase())
}

Array vs List

fun array(){
    val array = arrayOf(1, 2, 3)
    val list = listOf(1, 2, 3)

    val array2 = arrayOf(1, "d", 3.4f)
    val list2 = listOf(1, "d", 11L)

    array[0] = 3 // mutable
    //list[0] = 2 // immutable
    var result = list.get(0)
    // 기본적인 List는 참조만 할 수 있고, 값 변경은 불가

    // MutableList의 대표적인 예시가 ArrayList
    val arrayList = arrayListOf<Int>() 
    // 어레이리스트의 내용은 바뀌지만, 그 주소값은 바뀌지 않기 때문에 val
    arrayList.add(10)
    arrayList.add(20)
    
    //arrayList = arrayListOf() 
    // Val cannot be reassigned. val은 새로 생성된 객체를 가리킬 수 없음.
}

반복문

for문

fun forAndWhile(){
	val students = arrayListOf("aaa","bbb","ccc","ddd")
	for(name in students){
		println(name)
	}

	var sum = 0;
	for(i in 1..10){
		sum += i
	}
	println(sum)
}

// for 문 사용 예시
for(i in 1..10 step 2) // 1 3 5 7 9
for(i in 10 downTo 1) // 10 9 8 7 6 ... 1
for(i in 1 until 10) // 10 제외

while문