Kotlin实战读书笔记(三 函数)

  1. 创建集合Map
listOf(1,2,3) // 不可变ArrayList
arrayListOf(1,2) // ArrayList
//set和list一个套路,还有linkedSetOf等
hashMapOf( 1 to "one", 2 to "Two")
  1. 让函数更好调用
    • 命名参数
    fun subString(src: String ,start : Int, length: Int) = src.subSequence(start,length)
    subString("string", start = 0 , length = 2) //调用时声明参数名称,利于代码的阅读
    
  • 默认参数
    fun method ( param: String = "defalut")  = param
    method() // param == "defalut"
    
  • 用顶层函数和属性代替静态工具类:
    顶层属性方法相当于静态类的属性和方法
    const val 常量 = "" 相当于Java的 public static final String 常量 = ""
  1. 扩展类的函数和属性
  • 扩展函数
    对java来说就是一个类的静态方法
//Util.kt
fun String.lastChar(): Char = this.get(length -1) // 为String类扩展一个函数
fun String.lastChar(): Char = get(length -1)  //简化版
在其他文件中要让扩展函数生效需要导入
import 声明文件名.lastChar
import 声明文件名.lastChar as last // 别名

在java中调用扩展函数的方式
UtilKt.lastChar("string") // g

对于父类和子类都扩展的函数,用声明类型调用就调用什么类型的方法(由于实现方式是静态方法)

  fun List.print() = "list"
  fun ArrayList.print() = "arrayList"
  val list: List = arrayListOf("")
  val arrayList : ArrayList = arrayListOf("")
  list.print() // "list"
  arrayList.print() // "arrayList"
  • 扩展属性
    相当于添加一个getter,setter,但是不能存储该属性
    var StringBuilder.lastChar: Char
        get() = get(length - 1 ) //getter必须实现
        set(value: Char){  // setter可选
            this.setCharAt(length - 1, value)
       }
    
    // java调用
    UtilKt.getLastChar("string") // g
    
  1. 可变参数 :
    fun listOf(vararg values: T): List {...}
    ==
    List listOf(T ...){...}
    Kotlin 对于 数组(vararg,Array)需要用展开运算符*
    val arr = listOf("1","2")
    val arrCopy = listOf( *arr)

5.中缀运算符: to

1.to("one) 等同于 1 to "one"  // 结果是Pair(1,"one)

6.字符串和正则表达式

// '"" """ 三重引号字符串中不需转译
// 另外三重引号字符串换行会保存换行符(和Python差不多)
val regex = """ (.+)/(.+)\.(.+)""".toRegex()

7.kotlin可以在函数中声明函数来提高代码之间的联系性,函数必须先声明调用
8.使用扩展将代码变得更整洁: p67

你可能感兴趣的:(Kotlin实战读书笔记(三 函数))