• Kotlin小节(二)


    1、安全索引取值函数:getOrElse和getOrNull

    getOrElse:如索引值存在,返回索引处数值;索引值不存在,返回lamada值

    getOrNull:如索引值存在,返回索引处数值;索引值不存在,返回null

    e.g.

        var numList = listOf(10,20,30)
        var num = numList.getOrElse(3) { "value not exist" }
        println(num)
        var data = numList.getOrNull(4) ?: 40
        println(data)

    2、listof和mutableListof创建list的区别

    列表只读和你在定义列表变量时选择val或var关键字无关。如果修改变量声明,把当前的val改为var,那么改变的不过是可以给变量重新赋值一个新列表,而列表自身依然是只读的。

    listof创建的list不可变。不能增删改,只能读。

    mutableListof创建的list是可变list,支持增删改读。

    e.g.

        val list = mutableListOf(10,20,30)
        list.add(40)
        list.remove(20)
        list.add(0,22)
        list.removeAt(list.size-2)
        list[0] = 33
        //判断是否会越界
        list.add(3,55)//不越界
        list.add(4,66)//越界

    3、mutator函数

    修改list,增删改查函数

    [ ],+=,+-,add,addAll,clear, removeIf

    4、遍历集合:for循环、forEach循环、

    for循环如下:

        val list:List = listOf("flower","weed","tree")
       //遍历list集合
       for (value in list){
            println(value)
        }

    forEach循环如下:

    list.forEach { element -> println(element) }
    forEachIndexed遍历元素同时输出索引值如下:
        list.forEachIndexed{index,element -> println("index:$index,value:$element")}
        list.forEachIndexed(action ={index,element -> println("index:$index,value:$element")})

    4、从文件读取数据

        //从文件读入信息
        val menuList = File("data/info.txt").readText().split('\n')
        menuList.forEachIndexed { index, element -> println("index:$index, element:$element") }

    info.txt,文件内容如下:

    rose
    paeony
    flower

    5、解构

    同时定义多个变量type, name, price并赋值,如下:

    val(type,num)= listOf("1","2","3")

    过滤掉某个数值,用下划线”_“,如下:

    val(type,_,num) = listOf("1","2","3","4")

    6、break表达式

    break可以立刻跳出任何的循环和条件表达式。不让程序继续执行循环内接下来的语句。立刻从break处跳出。

    9、kotlin集合总结

    10、also函数——防范竞态条件

    11、主构造函数、次构造函数和init函数的执行顺序

    主构造函数优先执行,init函数次之,次构造函数优先级最低。

    类属性,init方法,主、次构造函数的执行顺序如下:
    (1) 主构造函数里声明的属性(name:String,var age:Int)。
    (2) 类级别的属性赋值( var name = "www".also { println("name:"+it) })。
    (3) init初始化块里的属性赋值和函数调用(var age = 88、println函数)。
    (4) 次构造函数里的属性赋值和函数调用(var career = "developer"、println函数)。
    需要说明的是,init初始化块和类级别的属性赋值(的顺序取决于定义的先后。如果init初始化块定义在类级别的属性赋值之前,那么它就比类级别的属性赋值早一步初始化。

    示例如下:

    class TestMain (name:String,var age:Int){
        var name = "www".also { println("name:"+it) }
        init {
            var age = 88
            println("init#age:"+age)
        }
    
        var home = "town".also { println(println("home:"+it)) }
    
        constructor(name: String):this(name,age = 99){
            var career = "developer"
            println("constructor#career:"+career)
        }
    }
    fun main(args:Array){
        println(TestMain("ppp").age)
    }

    输出结果如下:

    name:www
    init#age:88
    home:town
    kotlin.Unit
    constructor#career:developer
    99


    12、懒惰初始化

    一般把属性初始化操作是耗时操作的变量,将改变量初始化设置成懒惰初始化。

    kotlin 懒惰初始化变量,为什么是val类型?

    Kotlin 的懒惰初始化变量只能是 val 类型,因为 var 类型的变量值可以改变,而懒惰初始化变量只能在第一次访问时被初始化,因此变量的值不能被改变,因此只能是 val 类型。

    13、as关键字——强制类型转换

    14、数据类

    数据类可以应用解构定义多个变量

    定义数据类需要满足的三个条件:

    (1)数据类必须至少带有一个参数的主构造函数

    (2)数据类的主构造函数的参数必须是var或者val类型

    (3)数据类不能使用abstract、open、sealed和inner修饰符

    15、接口和抽象类

    实现接口的类,必须实现接口的所有属性和函数。

    实现接口的抽象类,不必实现接口的所有属性和函数。但是继承抽象类的子类,必须实现接口的所有属性和函数。

    16、关键字in和out

    17、函数式编程

    包括三类:变换、过滤和合并

    变换函数:map和flatmap

    过滤函数:filter

    合并函数:zip和fold

    18、kotlin支持的编程格式

     命令式编程

    函数式编程

    面向对象编程

    函数式编程相对于面向对象编程的优势:

    (1)累加变量(如employeeShirtSizes)都是隐式定义的,所以
    可以少用状态变量。

    (2)函数运算结果会自动赋值给累加变量,降低了代码出错的机会。

    (3)执行新任务的函数很容易添加到函数调用链上,因为它们都兼容
    Iterable类型。

    19、序列——惰性集合

    适用于大数据集合

    列表和序列之间可以相互转化。

    20、==和===的区别

    == 比较值(类似于java中的 equals
    === 比较地址

  • 相关阅读:
    React核心技术浅析
    相关性 与 独立性
    记录一些涉及到界的题
    1007 Maximum Subsequence Sum
    spring security 会话管理
    点云处理开发测试题目 实现2
    SpringBoot:ch03 yml 数据绑定示例
    Mysql 详解所有的数据类型
    超级复杂可贴图布局的初级智能文本提示器
    Oracle数据库使用PLSQL-Developer15导出导入Excel文件
  • 原文地址:https://blog.csdn.net/github_27263697/article/details/132441639