MST
星途 面试题库

面试题:Kotlin作用域函数在链式调用与复杂业务逻辑中的应用

假设有一个复杂的业务场景,需要对一个字符串先进行非空判断,然后根据字符串长度进行不同的处理,处理过程中要设置对象的多个属性并返回最终处理后的对象。请使用let、run、apply这三个作用域函数通过链式调用的方式实现该业务逻辑,并解释每一步操作的意义以及为何选择这样的组合方式。
39.0万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试

以下以Kotlin语言为例实现:

data class ResultObject(
    var property1: String? = null,
    var property2: Int? = null
)

fun processString(input: String?): ResultObject? {
    return input
      ?.let { nonNullInput ->
            if (nonNullInput.length <= 10) {
                ResultObject().apply {
                    property1 = nonNullInput
                    property2 = nonNullInput.length
                }
            } else {
                ResultObject().apply {
                    property1 = nonNullInput.substring(0, 10)
                    property2 = nonNullInput.length
                }
            }
        }
}

每一步操作意义

  1. input?.letlet 函数用于对可空对象进行操作。这里 input 是可空字符串,?. 表示如果 input 不为空才执行 let 块中的代码。let 块中的 nonNullInput 就是确保不为空的 input
  2. if - else 判断:根据字符串长度进行不同处理。
  3. ResultObject().applyapply 函数用于对对象进行配置。这里创建 ResultObject 实例后,通过 apply 设置其 property1property2 属性。

为何选择这样的组合方式

  • 使用 let 首先进行非空判断,保证后续操作的安全性,并且在 let 块内可以安全地使用非空对象。
  • 使用 apply 方便地对创建的 ResultObject 实例进行多个属性设置,它返回的就是调用它的对象本身,符合链式调用要求。这样的组合简洁明了地实现了对字符串先非空判断,再根据长度处理并设置对象属性的业务逻辑。