// 기본적인 함수 선언 방식
// fun basicFunc(name: String): Int <= Int는 리턴 타입이다
fun basicFunc(name: String): Int {
return name.toInt()
}
// 한줄에 선언 하는 방식
// 한줄 선언 식에서는 리턴타입 생략 가능하다.
fun simpleFunc(name: String) = name.toInt()
// name: String = "김찬정" <= 매개변수에 기본 값을 선언, 함수 호출시
// 매개변수를 주지 않으면 name은 디폴트 값인 "김찬정"으로 선언된다.
fun simpleFunc(name: String = "김찬정", age: Int): String {
return name
}
fun simpleFunc(name: String , age: Int = 10) = name
var name = simpleFunc("김찬정", 10)
var name = simpleFunc(name = "김잔정", age = 10)
var name = simpleFunc(age = 10)
var name = simpleFunc(age = 10, name = "김찬정")
함수의 파라메터를 선언된 순서가 아닌 호출시 지정해서 줄 수 있다.
// newList(vararg ts: T) => java에서 newList(String... name)와 같다
fun <T> newList(vararg ts: T): List<T> {
val result = ArrayList<T>()
for (t in ts)
result.add(t)
return result
}
val newList = newList(1, 2, 3)
// '*' 스프레드 연산자이며 item배열의 요소를 풀어서 넘긴다.
val item = Array(5) { v -> v + 1 }
val newList2 = newList(*item)
val arrayOf = arrayOf(1, 2, 3)
// Array 클래스의 length 메소드를 override 한다.
fun <T> Array<T>.length(): Int {
return 1
}
// Array 크래스에 새로운 메소드를 추가한다.
fun <T> Array<T>.addMethod(index1: Int, index2: Int): Int {
return 1
}
val addMethod = arrayOf.addMethod(1, 3) // 1이 리턴된다.
val length = arrayOf.length() // 1이 리턴된다.
확장함수는 특정클래스로 부터 상속받지 않고 해당클래스의 기능을 확장 한다.
// 중의 함수 선언은 infix 키워드를 붙여 선언한다.
infix fun Int.multiply(value: Int): Int {
return this * value
}
println(9 multiply 1) // 9 출력
println(9.multiply(1)) // 9 출력
println(3 + 2 multiply 2) // 10 출력, + 연산자 우선순위가 더 높다
중위함수 선언 조건
클래스의 멤버 함수이거 나 확장 함수이어야 한다.
매개변수가 한 개여야 한다.
infix 키워드로 함수가 정의되어야 한다.