In
my previous post, I explained about lambda expressions, one disadvantage of lambda
expression is, you can’t specify the return type. Anonymous functions are
similar to lambda expressions, where you can specify return type.
Ex
fun(x:
Int): Int = 2 * x
As
you see above snippet, it is anonymous function, which doubles the value. The
syntax of anonymous function is just like a function, except it do not have
function name.
You
can also specify body of the anonymous function in curly braces like below.
fun(x:
Int): Int {return 2 * x}
A
'return' expression required in a anonymous function with a block body
('{...}')
Find
the below working application.
FunctionDemo.kt
fun processData(arr: IntArray, functionToProcess: (Int) -> Int): IntArray { var result = IntArray(arr.size) var counter = 0 for (ele in arr) { result[counter++] = functionToProcess.invoke(ele) } return result } fun printArray(arr: IntArray) { for (ele in arr) { print("$ele ") } println() } fun main(args: Array<String>) { var arr1 = IntArray(5, { i -> i }) println("Elements in arr1 are") printArray(arr1) /* Higher order function using anonymous function */ var doubleArrayElements = processData(arr1, fun(x: Int): Int { return 2 * x }) println("Elements in doubleArrayElements are") printArray(doubleArrayElements) doubleArrayElements = processData(arr1, fun(x: Int): Int = 2 * x) println("Elements in doubleArrayElements are") printArray(doubleArrayElements) }
Output
Elements in arr1 are 0 1 2 3 4 Elements in doubleArrayElements are 0 2 4 6 8 Elements in doubleArrayElements are 0 2 4 6 8
You
can omit the parameter types, if they can be inferred from context.
Ex
fun(x):
Int { return 2 * x }
You
can also omit the return type for the anonymous function in non-block notation.
Ex
fun(x)=
2 * x
No comments:
Post a Comment