fun 함수이름 ( 매개변수 리스트 ) : 리턴타입 { 함수 정의 }
fun 함수이름 ( 매개변수 리스트 ) = expression
=
을 써서 정의함fun read(
b: ByteArray,
off: Int = 0,
len: Int = b.size,
) { /*...*/ }
fun foo(
bar: Int = 0,
baz: Int,
) { /*...*/ }
foo(baz = 1) // The default value bar = 0 is used
lambda
함수는 익명함수 (이름이 없는 함수)
{인자 -> 함수내용}
과 같은 형식으로 작성
it
사용예제 출처 : 허준영 교수님 github
// data class MyClass(val a: Int, val b: String)
fun lambdaTest(a : (Int) -> Int) : Int {
return a(10)
}
fun main()
{
val sum = { x: Int, y: Int -> x + y }
println(sum(10, 20))
val array = arrayOf(MyClass(10, "class1"), MyClass(20, "class2"), MyClass(30, "class3"))
println(array.filter({ c: MyClass -> c.a < 15 })) // [MyClass(a=10, b=class1)]
// 람다가 함수 인자의 마지막으로 사용되면, 함수의 괄호 밖으로 뺄 수 있음.
array.filter() { c: MyClass -> c.a < 15}
// 람다가 함수의 유일한 인자이면, 함수의 괄호를 생략 할 수 있음.
array.filter { c: MyClass -> c.a < 15 }
// 인자 타입 생략 가능한 경우
array.filter { c -> c.a < 15 }
// 티폴트 매개변수 이름으로 it를 사용할 수 있음
array.filter { it.a < 15 } // 일반적으로 많이 사용되는 형태
print(lambdaTest { it + 10 })
val title = "Num:"
val list = listOf(1, 2, 3, 4)
list.forEach { println("$title $it") } // access title in outside of the lambda
}