kotlin_函数定义与调用

1.创建集合

setOf(),listOf(),hashMapOf()
集合方法:.last(),.max()

2.优化函数

背景:集合输出格式

a.基本实现:

fun <T> joinToString(
        collection: Collection<T>,
        separator: String,
        prefix: String,
        postfix: String
):String {
    var result = StringBuilder(prefix)

    for((index,element) in collection.withIndex()){
        if(index > 0) result.append(separator)
        result.append(element)
    }

    result.append(postfix)
    return result.toString()
}

b.命名参数

println(joinToString(listOf(1,21,3),separator = ";", prefix = "(",postfix = ")"))

c.默认参数值

fun <T> joinToString(
        collection: Collection<T>,
        separator: String = ",",
        prefix: String ="",
        postfix: String = ""
):String

3.扩展函数和属性

a.给String扩展lastChar()函数

fun String.lastChar(): Char = get(length-1)

b.导入和扩展函数

冲突情况下导入包可以使用as对扩展函数重命名

c.java使用扩展函数

将接受者对象作为第一个参数给扩展函数

d.作为扩展函数的工具函数

fun <T> Collection<T>.joinToString(
        collection: Collection<T>,
        separator: String = ",",
        prefix: String ="",
        postfix: String = ""
):String {
    var result = StringBuilder(prefix)

    for((index,element) in collection.withIndex()){
        if(index > 0) result.append(separator)
        result.append(element)
    }

    result.append(postfix)
    return result.toString()
}

e.扩展函数不可重写

f.扩展属性

扩展String属性
val String.lastChar: Char
    get() = get(length-1)
扩展可变属性
var StringBuilder.lastChar: Char
    get() = get(length-1)
    set(value: Char) {
        this.setCharAt(length - 1, value)
    }

4.处理集合

a.可变参数

使用vararg让函数支持任意数量参数

fun <T> listOf(vararg values: T): List<T> { }

使用展开运算符*来传递数组

    var list = listOf("args:", *args)
    println(list)

b.中缀调用和解构声明

val map = mapOf(1 to "one",2 to "two",3 to "three")

其中to是特殊的函数调用,叫做中缀调用
在中缀调用中,没有添加额外的分隔符,函数名称是直接放在目标对象名称和参数之间的。
1 to "one"1 to("one")等价

要允许使用中缀符号调用函数,需要使用infix修饰符来标记它。

infix fun Any.to(other: Any) = Pair(this,other)

to函数返回一个Pair类型的对象。
Pair是泛型,可以以下生成Pair称之为解构声明

val (number, name) = 1 to "One"

5.字符串和正则表达式

a.分割字符串

kotlin的split函数有多个重载。用来承载正则表达式的值需要一个Regex类型,而不String。

println("12.345-6.A".split("\\.|-".toRegex()))

等价的情况

println("12.345-6.A".split(".","-"))

a.使用string的扩展函数来解析文件路径

fun parsePath(path: String) {
    val direcory = path.substringBeforeLast("/")
    val fullName = path.substringAfterLast("/")

    val fileName = fullName.substringBeforeLast(".")
    val extension = fullName.substringAfterLast(".")

    println("Dir:$direcory,name: $fileName, ext: $extension ")
}

b.使用正则表达式解析文件路径

正则式写在三重引号字符串中,不需要对特殊字符转义

fun parsePath(path: String) {
    val regex = """(.+)/(.+)\.(.+)""".toRegex()
    val matchResult = regex.matchEntire(path)
    if(matchResult != null) {
        val (direcory, fileName, extension) = matchResult.destructured
        println("Dir: $direcory, name: $fileName, ext: $extension")
    }
}

6.局部函数和扩展

即可以在函数里嵌套函数,外层函数调用内层函数。内层函数可以使用外层参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值