美文网首页
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