Local Function 就是申明在函数中的函数,嵌套在函数中,官方翻译局部函数。函数通常情况是申明在一个类中。如果只是在局部范围内可以复用,这种时候申明在一个类中,就有一点多余。
Define and use
在 函数中使用fun关键字就可以申明一个嵌套的函数。 下面在登录中验证用户名和密码的有效性
1 2 3 4 5 6 7 8 9 10 11 12
fun login(username: String, password: String) : Boolean { var something = 1 fun validateInput(input: String){ something++ if (input.isEmpty()) { throw IllegalArgumentException("Must not be empty") } } validateInput(username) validateInput(password) returntrue }
Local Function会存在一点点性能上的问题,虽然微不足道。 新增了一些类对象。比如上面的Ref,以及Function。 会增加Dex中方法数量。Function增加了函数个数。kotlin 中inline方法可以避免这种情况,但是local function并不能使用inline标记。
在Extension 方法中使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
data class Credentials(val username: String, val password: String) fun Credentials.validate(){ fun validateInput(input: String){ if (input.isEmpty()) { throw IllegalArgumentException("Must not be empty") } } validateInput(username) validateInput(password) }
fun login(credentials: Credentials){ credentials.validate() }