anidamiento de funciones kotlin

1. Anidamiento de funciones locales

Kotlin proporciona anidamiento de funciones y se pueden definir nuevas funciones dentro de las funciones.
Esto nos permite anidar estas funciones avanzadas dentro de funciones para extraer código repetitivo.

class User(val id: Int, val name: String, val address: String, val email: String)
fun saveUser(user: User) {
 if (user.name.isEmpty()) {
 throw IllegalArgumentException("Can't save user ${user.id}: empty Name")
 }
  if (user.address.isEmpty()) {
 throw IllegalArgumentException("Can't save user ${user.id}: empty Address")
 }
 if (user.email.isEmpty()) {
 throw IllegalArgumentException("Can't save user ${user.id}: empty Email")
 }
 // save to db ...
}

El código anterior es en realidad muy similar al juzgar si el nombre, la dirección, etc. están vacíos. En este momento, podemos
extraer el mismo código juntos declarando una función nula general anidada dentro de la función:

/** 利用局部函数抽取相同的逻辑,去除重复的代码* */
fun saveUser2(user: User) {
 fun validate(value: String, fildName: String) {
 if (value.isEmpty()) {
 throw IllegalArgumentException("Can't save user ${user.id}: empty
$fildName")
 }
 }
 validate(user.name, "Name")
 validate(user.address, "Address")
 validate(user.email, "Email")
}

2. Anidamiento de funciones extendidas

Además de usar funciones anidadas para extraer, en este momento, de hecho, también puede usar funciones extendidas para extraer, como se muestra a continuación: /**
Usar funciones extendidas para extraer lógica* */

fun User.validateAll() {
 fun validate(value: String, fildName: String) {
 if (value.isEmpty()) {
 throw IllegalArgumentException("Can't save user $id: empty $fildName")
 }
 }
 validate(name, "Name")
 validate(address, "Address")
 validate(email, "Email")
}
fun saveUser3(user: User) {
 user.validateAll()
 // save to db ...
}

Supongo que te gusta

Origin blog.csdn.net/github_37610197/article/details/125547082
Recomendado
Clasificación