Kotlin学习(2)函数

函数的定义和使用

//泛型函数,和默认参数
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关键字

//Java
public static final String PI = "3.1415";

//Kotlin
const 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 l

fun 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
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值