기본적인 구문

함수 정의

Int형 파라매터 2개 / 반환값 Int 형태

fun sum(a: Int, b: Int): Int {
    return a + b
}

위의 함수를 짧게 한 경우 (반환타입 생략)

fun sum(a: Int, b: Int) = a + b

return이 의미 없는 경우

  • 반환형태가 Unit 타입인 경우 생략 가능
fun printSum(a: Int, b: Int): Unit {
    println("sum of $a and $b is ${a + b}")
}
// fun printSum(a: Int, b: Int) {
//     println("sum of $a and $b is ${a + b}")
// }

함수 참고

로컬 변수 정의

val : 읽기 전용

val a: Int = 1  // 즉시 대입
val b = 2       // Int 타입으로 추론
val c: Int      // 초기값이 없는 경우
c = 3           // 지연 대입

var : 변경 가능

var x = 5    // Int 타입으로 추론
x += 1

프로퍼티와 필드 참고

주석

Java와 JavaScript 같이 작성 가능

// This is an end-of-line comment

/* This is a block comment
   on multiple lines. */

문자열 템플릿

var a = 1
val s1 = "a is $a"    // a is 1

a = 2
val s2 = "${s1.replace("is", "was")}, but now is $a"    // a was 1, but now is 2

문자열 템플릿 참고

조건식 사용

fun maxOf(a: Int, b: Int): Int {
    if (a > b) {
        return a
    } else {
        return b
    }
}

수식처럼 사용 가능

fun maxOf(a: Int, b: Int) = if (a > b) a else b

if 수식 참고

nullable 타입 사용과 null 체크

타입의 값이 null 혹은 Int인 경우, 명시적으로 ? 마크 작성

fun parseInt(str: String): Int? {
    // ...
}

Null-safety 참

타입 체크 / 자동 변환

fun getStringLength(obj: Any): Int? {
    if (obj is String) {
        // 이곳의 'obj' 는 자동으로 'String'으로 변환
        return obj.length
    }

    // `obj`가 타입 체크 대상 밖인 경우 `Any` 타입 그대로 유지
    return null
}

클래스와 타입 변환 참고

for loop

기본 패턴

val items = listOf("apple", "banana", "kiwi")
for (item in items) {
    println(item)
}

indices 를 이용

val items = listOf("apple", "banana", "kiwi")
for (index in items.indices) {
    println("item at $index is ${items[index]}")
}

for loop 참고

while loop

val items = listOf("apple", "banana", "kiwi")
var index = 0
while (index < items.size) {
    println("item at $index is ${items[index]}")
    index++
}

while loop 참고

when 수식

fun describe(obj: Any): String =
when (obj) {
    1          -> "One"
    "Hello"    -> "Greeting"
    is Long    -> "Long"
    !is String -> "Not a string"
    else       -> "Unknown"
}

when 수식 참고

ranges

val x = 10
val y = 9
if (x in 1..y+1) {
    println("fits in range")
}

값이 범위 밖인지 확인

val list = listOf("a", "b", "c")

if (-1 !in 0..list.lastIndex) {
    println("-1 is out of range")
}
if (list.size !in list.indices) {
    println("list size is out of valid list indices range too")
}

범위 반복

for (x in 1..5) {
    print(x)
}

range 기타 처리 (step, downTo)

for (x in 1..10 step 2) {
    print(x)
}
for (x in 9 downTo 0 step 3) {
    print(x)
}

Ranges 참고

collections

in 연산자를 사용해서 collection에 객체가 포함 여부를 확인

when {
    "orange" in items -> println("juicy")
    "apple" in items -> println("apple is fine too")
}

람다 식을 사용해서 필터링/맵핑

fruits
.filter { it.startsWith("a") }
.sortedBy { it }
.map { it.toUpperCase() }
.forEach { println(it) }

고차함수와 람다 참고

results matching ""

    No results matching ""