A bit of confusion with parens and lambdas. What is the logic when to omit or use parens.
val squares = IntArray(5) { it+3 }
Now to check if 3 is in the array. Why does the third example fail to compile?
-
Paren around any()
squares.any(){it == 3}
-
No Paren around any()
squares.any({it == 3})
-
Fails when I also add paren around any()
squares.any()({it == 3})
If the last argument of the function is a lambda, it can be written outside the parenthesis. That’s why your third example does not compile. Actually there is a 4th option that allows a smoother syntax, that is when the only argument of a function is a lambda you can omit parenthesis at all:
squares.any { it == 3 }
Those syntactic sugars are made for readability when creating a DSL. Have a look at a Gradle build file written in Kotlin, it is awesome thanks to that!
1 Like