티스토리 뷰
Function 기본
// Kotlin 함수는 다음 fun키워드를 사용하여 선언됩니다.
// 컴파일러에서 리턴타입을 추론할 수 있는 경우 리턴타입을 생략할 수 있다.
fun double(x: Int): Int {
return 2 * x
}
// 함수가 단일 표현식인 경우 중괄호를 생략할 수 있고 본문은 =기호 뒤에 지정됩니다.
fun double(x: Int): Int = x * 2
// 함수는 표준 접근 방식을 사용하여 호출됩니다.
val result = double(2)
// 멤버 함수 호출은 점 표기법을 사용합니다.
Stream().read()
// 함수 매개변수는 파스칼 표기법- 이름 : 유형 을 사용하여 정의됩니다.
// 매개변수는 쉼표로 구분되며 각 매개변수는 명시적으로 입력해야 합니다.
fun powerOf(number: Int, exponent: Int): Int { /*...*/ }
// 함수 매개변수를 선언할 때 후행 쉼표 를 사용할 수 있습니다 .
fun powerOf(number: Int, exponent: Int,): Int { /*...*/ }
// 함수 매개변수는 해당 인수를 건너뛸 때 사용되는 기본값을 가질 수 있습니다.
// 함수를 호출할 때 모든 인수의 이름을 지정할 필요는 없습니다.
// 기본값을 사용하여 특정 인수를 건너뛸 수도 있습니다. 그러나 건너뛴 첫 번째 인수 뒤에는 모든 후속 인수의 이름을 지정해야 합니다.
fun reformat(
str: String,
normalizeCase: Boolean = true,
upperCaseFirstLetter: Boolean = true,
divideByCamelHumps: Boolean = false,
wordSeparator: Char = ' ',
) { /*...*/ }
reformat(
"String!",
false,
upperCaseFirstLetter = false,
divideByCamelHumps = true,
'_'
)
// 기본 매개변수 뒤의 마지막 인수가 람다 이면 이름이 지정된 인수로 전달하거나 괄호 외부에 전달할 수 있습니다.
fun foo(
bar: Int = 0,
baz: Int = 1,
qux: () -> Unit,
) { /*...*/ }
foo(1) { println("hello") } // Uses the default value baz = 1
foo(qux = { println("hello") }) // Uses both default values bar = 0 and baz = 1
foo { println("hello") } // Uses both default values bar = 0 and baz = 1
fun foo(vararg strings: String) { /*...*/ }
// 함수가 유용한 값을 반환하지 않으면 반환 유형은 Unit입니다.
// Unit은 생략할 수 있습니다.
fun printHello(name: String?): Unit {
println("Hello $name")
}
// vararg 연산자를 사용하여 가변 개수의 인수를 전달할 수 있습니다
// 함수의 인자값중 1개만 vararg 를 적용할 수 있다.
// 함수 인자값이 여러개인데 vararg 연산자가 적용된 인자가 마지막이 아니라면 매개변수 이름을 직접 명시하거나, 스프레드 연산자 (*)를 사용한다.
fun <T> asList(vararg ts: T): List<T> {
val result = ArrayList<T>()
for (t in ts) // ts is an Array
result.add(t)
return result
}
val a = intArrayOf(1, 2, 3) // IntArray is a primitive type array
val list = asList(-1, 0, *a.toTypedArray(), 4)
Infix
// 멤버 함수 또는 확장 함수 여야 합니다.
// 단일 매개변수가 있어야 합니다.
// 매개변수는 가변 개수의 인수를 허용 하지 않아야 하며 기본값 이 없어야 합니다.
infix fun Int.shl(x: Int): Int { ... }
// calling the function using the infix notation
1 shl 2
// is the same as
1.shl(2)
infix 함수는 항상 수신자와 매개변수를 모두 지정해야 합니다. infix 표기법을 사용하여 현재 수신자에서 메소드를 호출할 때 this명시적으로 사용하십시오. 이는 명확한 구문 분석을 위해 필요합니다.
class MyStringCollection {
infix fun add(s: String) { /*...*/ }
fun build() {
this add "abc" // Correct
add("abc") // Correct
//add "abc" // Incorrect: the receiver must be specified
}
}
infix 함수 호출은 산술 연산자, 유형 캐스트 및 연산자보다 우선 순위가 낮습니다.
1 shl 2 + 3 is equivalent to 1 shl (2 + 3)
0 until n * 2 is equivalent to 0 until (n * 2)
xs union ys as Set<*> is equivalent to xs union (ys as Set<*>)
infix 함수 호출의 우선 순위는 부울 연산자 &&및 ||, is- 및 in-checks 및 기타 일부 연산자의 우선 순위보다 높습니다.
a && b xor c is equivalent to a && (b xor c)
a xor b in c is equivalent to (a xor b) in c
Scope
// Kotlin은 다른 함수 내부의 함수인 로컬 함수를 지원합니다.
fun dfs(graph: Graph) {
fun someLocalFunction(current: Vertex, visited: MutableSet<Vertex>) {
if (!visited.add(current)) return
for (v in current.neighbors)
someLocalFunction(v, visited)
}
someLocalFunction(graph.vertices[0], HashSet())
}
// 지역 함수는 외부 함수(클로저)의 지역 변수에 접근할 수 있습니다. 위의 경우 visited지역 변수가 될 수 있습니다.
fun dfs(graph: Graph) {
val visited = HashSet<Vertex>()
fun dfs(current: Vertex) {
if (!visited.add(current)) return
for (v in current.neighbors)
dfs(v)
}
dfs(graph.vertices[0])
}
'Programming > Kotlin' 카테고리의 다른 글
Kotlin Lambda (0) | 2022.05.14 |
---|---|
Kotlin Reflection (0) | 2022.04.30 |
Kotlin Generic (0) | 2022.04.30 |
Kotlin Null Safety (0) | 2022.04.23 |
Kotlin Loop (0) | 2022.04.23 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Embedded Mapping
- RetryTemplate
- Criteria
- JPA
- scikit-learn
- Spring Registrar
- @Primary
- Spring JDBC Template
- SmartLifecycle
- DI
- guava
- Typesafe Config
- JPA Criteria
- docker
- Akka
- java generic
- Query DSL
- Charles proxy
- Discriminate Mapping
- java EqualsAndHashCode
- Join Table
- Registrar
- Spring
- Embeddable Mapping
- Sprint RetryTemplate
- Mapping
- 복합키 Mapping
- Property
- java Equals
- spring spel
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함