Kotlin基础:用Kotlin约定简化相亲

本文通过一个有趣的相亲业务场景,介绍了如何利用Kotlin的约定(如invoke、plus等)来提高代码的可读性和复用性。通过将复杂的筛选逻辑拆分为独立的函数或类,使用invoke约定,使得代码更加简洁且易于理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面:一名有三年Android开发经验的女程序员(欢迎大家关注我 ~期待和大家一起交流和学习Android的相关知识)
这篇是@唐子玄写的~嘻嘻嘻

如果用代码实现择偶标准的判断逻辑,会很容易写出又臭又长的代码。本文通过 Kotin 独有的语法特性“约定”来增加代码的可读性、复用性。

业务场景

假设女生的择偶标准如下:未婚且岁数比我大,如果对方是本地帅哥则对收入降低标准(年薪>10万),如果对方非本地则要求岁数不能超过40岁,且年薪在40万以上。(BMI 在 20 到 25 之间的定义为帅哥)

业务分析

将候选人组织成列表,在候选人列表对象上调用filter()将筛选标准传入即可。

  1. 1 将候选人抽象成data类:
data class Human(
        val age:Int, //年龄
        val annualSalary:Int,//年薪 
        val nativePlace:String, //祖籍
        val married:Boolean, //婚否
        val height:Int,//身高
        val weight:Int, //体重
        val gender:String//性别
)

- 2 定义筛选函数

fun filterCandidate(man: List<Human>, women: Human, predicate: (Human, Human) -> Boolean) {
   man.filter { predicate.invoke(it, women) }.forEach {
       Log.v(“ttaylor”, “man = $it”)
   }
}

函数接收三个参数

  • 1 man表示一组候选人
  • 2 women表示客户
  • 3 predicate表示该客户的筛选标准。

其中第三个参数的类型是函数类型,用一个 lambda (Human, Human) -> Boolean来描述,它表示该函数接收两个 Human 类型的输入并输出 Boolean。
函数体中调用了系统预定义的filter(),它的定义如下:

/**
 * Returns a list containing only elements matching the given [predicate].
 */
public inline fun <T> Iterable<T>.filter(predicate: (T) -> Boolean): List<T> {
    //'构建空列表实例'
    return filterTo(ArrayList<T>(), predicate)
}

/**
 * Appends all elements matching the given [predicate] to the given [destination].
 */
public inline fun <T, C : MutableCollection<in T>> Iterable<T>.filterTo(destination: C, predicate: (T) -> Boolean): C {
    //'遍历集合向列表中添加符合条件的元素'
    for (element in this) if (predicate(element)) destination.add(element)
    return destination
}

filter()接收一个函数类型参数predicate

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值