kotlin_函数定义与调用

来源:互联网 发布:10月国民经济数据 编辑:程序博客网 时间:2024/05/16 10:58

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.局部函数和扩展

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

原创粉丝点击