Kotlin学习路(六):扩展函数

<本文学习郭神《第三行代码》总结>

扩展函数:在不修改某个类源码的情况下,仍然可以打开这个类,向这个类添加新的函数。

扩展函数可以让API更简洁,更加面向对象。

定义扩展函数的语法结构:

fun ClassName.methodName(param1:Int, param2:Int):Int {
//结构体
return 0
}

例如:一段字符串可能包含字母、数字、特殊字符等字符,现在需要统计字符串中字母的数量,如果按照一般写法:

object StringUtil {
    fun letters(str: String): Int {
        var count = 0
        for (char in str){
            if (char.isLetter()){
                count ++
            }
        }
        return count
    }
}

这里定义一个StringUtil的单例类,然后定义一个方法letters,接收一个字符串参数,返回一个整型,使用for循环遍历,每查出一个字母,count计数加1。

工具类写好了,那么现在调用该方法:

val str = "ahufh18294#$$%"
val count = StringUtil.letters(str)

这种是常规写法,也是最标准的实现思维。

但是使用扩展函数,就会不一样了,一种更加面向对象的思维方式实现该功能,比如将上述的letters方法添加到String类中。

因为向String类中添加一个扩展函数,首先要新建一个String.kt 文件。

注意:(1)这里文件名没有固定要求,只是为了方便知道向哪一个类中添加扩展函数,所以建议使用相同的类名。
(2)扩展函数也可以定义在任何一个现有类中。
(3)最好定义成顶层方法,这样可以进行全局访问域。

上述代码就可以修改为:

fun **String**.letters() : Int{
    var count = 0
    for (char in this){
        if (char.isLetter()){
            count ++
        }
    }
    return count
}

这里是顶层方法。

现在将letters()方法定义为了String类的扩展函数,那么函数中就自动拥有了String实例的上下文,因此letters函数就不需要接收一个字符串参数了,而是直接遍历this即可。
接下来调用该方法就可以直接写成:

val str = "ahufh18294#$$%".letters()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值