Defining function - java
void 함수명 (변수) {
값 처리;
}
리턴타입 함수명 (변수) {
return 값
}
Defining functions - 비교
void 함수명 (변수) {
값 처리;
}
리턴타입 함수명(변수) {
return 값;
}
fun 함수명(변수) : Unit { // Unit은 생략 가능
값 처리
}
fun 함수명(변수) : 리턴타입 {
return 값
}
Defining functions - 예
int getSum(int a, int b) {
return a + b;
}
fun getSum(a : Int, b : Int) : Int {
return a + b
}
// return 생략
fun getSum (a : Int, b : Int) : Int = a + b
// 유추하기를 통한 생략
fun getSum(a : Int, b : Int) = a + b
Defining functions - 예
void printSum(int a, int b) {
Log.d("TEMP" , "sum : " + (a+b));
}
fun printSum(a : Int, b : Int) : Unit {
println("sum : ${a + b}")
}
fun printSum(a : Int, b : Int) {
println("sum : ${a + b}")
}
- 함수를 확장하여 기존에 있던 것처럼 사용할 수 있다.
fun 타입.함수명(변수) : 리턴 타입 {
return 값
}
fun Int.max(x : Int) : Int
= if (this > x) this else x
// 사용할 때는
숫자.max(숫자)
1.max(15)
fun test() {
println("sum ${1.getSum(1, 2)}")
}
fun Int.getSum(b : Int) : Int? = this + b
Extension Functions
fun Int.max(x : Int) : Int
= if (this > x) this else x
// 사용할 때는
숫자.max(숫자)
1.max(15)
> 변수 1개만 있을 경우 infix notation을 사용하여 더 축약 가능
infix fun Int.max(x : Int)
= if (this > x) this else x
1.max(15) -> 1 max 15
- 원래 있던 함수처럼 접근하여 사용이 가능
- Extension 보다 Class 내에 있던 원래 함수가 우선이다.
open class C
class D : C()
fun C.foo() = "c" // C의 확장함수 foo를 만듬
fun D.foo() = "d" // D의 확장함수 foo를 만듬
fun printFoo(c : C) {
println(c.foo())
}
printFoo(D()) // c 출력, printFoo안에 매개변수 타입이 C라서 c 출력
class C {
fun foo() { println("member")} // class 내부의 함수
}
fun C.foo() { println("extension") } // 확장함수
fun text() {
val c = C()
c.foo() // class 내부의 함수가 호출되어 member 출력
}
class C {
fun foo() { println("member")} // class 내부의 함수
}
fun C.foo(a : Int) { println("extension") } // 확장함수
fun text() {
val c = C()
c.foo(1) // 확장함수 foo를 호출하고 싶으면 매개변수 추가 해주면됨!!
}
val <T> List<T>.lastIndex : Int
get() = size -1
fun test() {
println(mutableListOf(1, 0, 3, 30, 50).lastIndex)
}
Named Arguments
fun setParams (age : Int, name : String = "Default", email : String) {
// ..
}
// use
setParams (0, "email@email.com")
'# 02 > 코틀린' 카테고리의 다른 글
[Kotlin] Lambda (0) | 2019.07.11 |
---|---|
[Kotlin] Control Flow - if/when/loops (0) | 2019.07.11 |
[Kotlin] Class (0) | 2019.07.11 |
[Kotlin] Properties and Fields (0) | 2019.07.11 |
[Kotlin] Types (0) | 2019.07.11 |