Kotlin学习(2)函数

来源:互联网 发布:如何催乙方进度 知乎 编辑:程序博客网 时间:2024/05/16 04:05

函数的定义和使用

//泛型函数,和默认参数fun <T> joinToString(        collection: Collection<T>,        separator: String = ", ",        prefix: String = "[",        postfix: String = "]"): String{    val result = StringBuilder(prefix)    for ((index, element) in collection.withIndex()){        if (index > 0) result.append(separator)        result.append(element)    }    result.append(postfix)    return result.toString()}fun main(args: Array<String>){    //集合,HashSet    val set = setOf(1,2,3,4,4,5)    //列表,ArrayList    val list = listOf(1,2,3,4,4,5)    //Map,HashMap    val map = mapOf(1 to "one", 2 to "two", 10 to "ten")    //命名参数    val result = joinToString(set, separator = ", ", prefix = "{", postfix = "}")}

const关键字

//Javapublic static final String PI = "3.1415";//Kotlinconst val PI = "3.1415"

扩展类的功能

/* 文件1 *///加一个方法//这里的this指向调用该函数的String对象,可以省略fun String.lastChar(): Char = this.get(this.length - 1)fun String.lastChar2(): Char = get(length - 1)//等价于StringUtil.lastChar("aaaa")//加一个属性var StringBuilder.lastChar: Char    get() = get(length - 1)    set(value) = setCharAt(length - 1,value)/* 文件2,在同一包下 *///导入到该文件,并重命名import lastChar as lfun main(vararg args: String){    println("lalalalala".l())}
//扩展方法不会被覆盖open class View{    open fun click() = println("View Clicked")}class Button : View(){    override fun click() {        println("Button Clicked")    }}fun View.showOff() = println("I'm a View")fun Button.showOff() = println("I'm a Button")fun main(vararg args: String){    val view: View = Button()    view.click()      //Button Clicked    view.showOff()    //I'm a View(方法不会被覆盖)}

可变参数

fun <T> addEle(vararg eles: T){    //*表示解构    val l = listOf<T>(*eles)    println(l)}//等价于fun <T> addEle(eles: Array<T>)fun main(vararg args: String){    addEle(1,2,3,4)}

中缀调用

val map = mapOf(1 to "one",                 7 to "seven",                 53 to "fifty-three")

这是个语法糖, 对于单参数的函数

1.to("one")1 to "one"
//写个玩玩看class Test{    infix fun printPara(s: String){        println(s)    }}fun main(vararg args: String){    val test = Test()    test printPara "aaa"}//to这东西的由来infix fun Any.to(other: Any) = Pair(this, other)

Pair解构

这里写图片描述

fun main(vararg args: String){    //只能在局部作用域中生效    val (key, value) = 1 to "one"}

多行字符串

fun main(vararg args: String){    val str = """| //                 | \\ ${1}                 |  \\ ${1+1}                 |   \\"""    println(str.trimMargin())}/* // \\ 1  \\ 2   \\*/

内部函数

class User(val id: Int, val name: String, val address: String)fun saveUser(user: User) {    //内部函数,能够访问外部函数的作用域    fun validate(value: String, fieldName: String)    { if (value.isEmpty()) {        throw IllegalArgumentException(                "Can't save user ${user.id}: " +                        "$fieldName is empty")    }    }    validate(user.name, "Name")    validate(user.address, "Address")    // Save user to the database}