기본적인 구문
함수 정의
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) }
고차함수와 람다 참고