美文网首页
Kotlin 基础精华篇

Kotlin 基础精华篇

作者: 木木禾木 | 来源:发表于2020-08-21 15:05 被阅读0次

    Kotlin 基础精华篇
    Kotlin 内联函数let、with、run、apply、also
    Kotlin 协程学习总结

    一、类的几种类型

    外部类类类型 能否被继承或实现 能否有构造方法
    class
    open class
    abstract class
    object
    enum class
    interface
    内部类类型 是否可定义多个 是否单例 是否静态内部类
    class
    inner class
    object
    companion object

    二、一些常用函数

    1、通过求和来看看函数的几种方式
        private fun sum(a: Int, b: Int): Int {
            return a + b
        }
    
        private val sum1: (Int, Int) -> Int = { a, b -> a + b }
    
        private fun sum2(a: Int, b: Int) = a + b
        // vararg 可变参数 ;sum() 为kotlin提供的函数,其实就是for循环求和
        private fun sum3(vararg numbers: Int) = numbers.sum()
        // sumBy 支持对原始数据进行加工
        private fun sum4(vararg numbers: Int) = numbers.sumBy { it * 2 }
    

    运行结果:

            println("sum result is ${sum1(1, 5)}")
            println("sum result is ${sum1}")
            println("sum result is ${sum2(1, 5)}")
            println("sum result is ${sum3(1, 2, 3, 4, 5)}")
            println("sum result is ${sum3()}")
            println("sum result is ${sum4(1, 2, 3, 4, 5)}")
    
            //输出:
            sum result is 6
            sum result is Function2<java.lang.Integer, java.lang.Integer, java.lang.Integer>
            sum result is 6
            sum result is 15
            sum result is 0
            sum result is 30
    
    2. 三目运算符使用 if-else?:
        java  --->    return object == null ? "" : object.toString();
    
        kotlin--->    return if(any == null) "" else any.toString()
    
        kotlin--->    return any?.toString() ?: ""
    
    3.字符串比较使用 == > < ,不必 equals
            var currentVersion = "v1.0.1"
            var lastVersion = "v1.0.1.1"
    
            if (lastVersion == currentVersion) {
                println("维持原版本")
            } else if (lastVersion > currentVersion) {
                println("升级到最新版本")
            } else {
                println("数据错误")
            }
            
            //输出:升级到最新版本
    
    4.类型判断 is !is (相当于java的 instanceof),类型明确则可自动进行类型转换
        private fun anyLength(any: Any?): Int {
            return when (any) {
                is String -> {
                    //any 自动类型转换为 String,不必 (any as String).length
                    any.length
                }
                is List<*> -> {
                    //any 自动类型转换为 List
                    any.size
                }
                is UserInfo -> {
                    //any 自动类型转换为 UserInfo
                    any.id.toInt()
                }
                !is Set<*> -> {
                    -1
                }
                else -> 0
            }
        }
    
    5.区间判断 in !in

    for-in-.. 是闭区间,如for(i in 0..10) 中i取值范围是[0,10] (即0 <= i <= 10)
    for-in-until是左闭右开,如for(i in 0 until 10) 中i取值范围是[0,10) (即0 <= i < 10)
    所以遍历List切勿 for(i in 0..list.size)

    downTo 倒序遍历
    step 设置遍历步长

            val list = ArrayList<String>()
            val start = 'a'.toInt()
            for (i in start..start + 10) {
                //添加11个元素到列表
                list.add(i.toChar().toString())
            }
            
            //List全量遍历
            for (str in list) {
                print("$str, ")  //输出:a, b, c, d, e, f, g, h, i, j, k,
            }
            //List全量遍历
            list.forEach {
                print("$it, ")  //输出:a, b, c, d, e, f, g, h, i, j, k,
            }
    
            println()
            println("a" !in list)  //输出:false
            println("d" in list)  //输出:true
            println("z" in list)  //输出:false
    
            //遍历步长
            for (i in 0 until list.size step 2) {
                print("${list[i]}, ")  //输出: a, c, e, g, i, k, 
            }
            println()
            //倒序遍历
            for (i in list.size - 1 downTo 0 step 3) {
                print("${list[i]}, ")  //输出: k, h, e, b, 
            }
    
    6.常用集合操作

    subList 截取
    filter 过滤
    sortedBy 根据某元素正序
    sortedByDescending 根据某元素倒序
    map 转换
    forEach 遍历

            list.subList(2, 8) //输出:c, d, e, f, g, h,
                .filter { it[0].toInt() < 'a'.toInt() + 5 }  //输出:c, d, e,
                .sortedBy { it[0].toInt() }  //输出:c, d, e,
                .sortedByDescending { it }   //输出:e, d, c,
                .map { it.toUpperCase(Locale.ROOT) }  //输出:E, D, C, 
                .forEach { print("$it, ") }
    
    7.自定义函数支持lambda
        // 通常写法,不支持lambda
        fun setOnViewClickListener(listener: OnViewClickListener) {
            this.onViewClickListener = listener
        }
    
        // 支持lambda
        fun setOnViewClickListener(action: (View, Int) -> Unit) {
            this.onViewClickListener = object : OnViewClickListener {
                override fun onViewClick(view: View, type: Int) {
                    action(view, type)
                }
            }
        }
    
        // 自定义回调
        interface OnViewClickListener {
            fun onViewClick(view: View, type: Int)
        }
    

    调用:

            setOnViewClickListener(object : OnViewClickListener {
                override fun onViewClick(view: View, type: Int) {
                    //TODO
                }
            })
            
            //简写
            setOnViewClickListener { view, i ->
                //TODO
            }
    




    未完待续

    相关文章

      网友评论

          本文标题:Kotlin 基础精华篇

          本文链接:https://www.haomeiwen.com/subject/pwbujktx.html