美文网首页Android开发
Kotlin 基础笔记

Kotlin 基础笔记

作者: 夜远曦白 | 来源:发表于2020-04-27 17:25 被阅读0次

    Kotlin 变量和常量

    • var 声明变量
    • val 声明常量
    • 不同的数据类型用不同的容器保存
    • kotlin 会通过类型推断自动推断数据类型
    • 我们可以用 : (分号)来显示的指定数据类型

    常见容器存储范围

    • Byte 整数 -128 ~ 127
    • Short 整数 -32768 ~ 32767
    • Int 整数 -2147483648 ~ 2147483647
    • Long 整数 -9223372036854775807 ~ 9223372036854775807
    • Float 小数,小数点可精确到6位
    • Double 小数,小数点可以精确到15 ~ 16位
    • String 字符串,用 “” 双引号引起来的字符串都可以存

    命令行交互式编程

    命令行工具下载地址:https://kotlinlang.org/docs/tutorials/command-line.html

    函数编写规则

    fun 函数名(参数名:参数类型):返回类型{ 
        函数体
    }
    

    作业

      1. 请编写函数,函数名为 sayHello,方法返回值是 String 类型,一个参数是 String 类型,名称为 name。
        fun sayHello(name: String): String {
            return "Hello, $name"
        }
    
      1. 请编写函数,函数名为 checkAge,方法的返回值是 Boolen 类型,一个参数是整数类型,名称为 age。
        fun checkAge(age: Int): Boolean {
            return age > 18
        }
    
      1. 请编写函数,函数名为 saveLog,方法没有返回值,一个参数是整数类型,名称为 logLever。
        fun saveLog(logLever: Int) {
            Log.d("TAG", "logLever = " + logLever)
        }
    

    字符串模板

    $
    比如上述 sayHello 函数中返回,name 是变量

    "Hello, $name"
    

    条件控制 if else

    if、else 如果只有一行,if (xx) xx else xx

    字符串比较

    = 一个等号是赋值

    == 两个等号相当于 java 中 equal,用于比较两个变量的值

    === 三个等号相当于 java 中的 ==,用于比较两个变量的引用是否一致

    equals 第二个参数表示是否忽略大小写,默认为 false

    Kotlin 空值处理

    给变量加上 ?号表示变量可为空

    when 表达式

    比 java 中 switch 好用,更强大方便

    when (x) {
        1 -> print("x == 1")
        2 -> print("x == 2")
        else -> { // 注意这个块
            print("x is neither 1 nor 2")
        }
    }
    

    https://www.kotlincn.net/docs/reference/control-flow.html

    loop 和 Range

    var num = 1 until 100 // [1,100)
    var num = 1 .. 100 // [1,100]
    

    step 跳序 a in num step 2
    reversed(), 倒序
    count(),总数

    list 和 map 入门

            var lists = listOf("aa", "bb", "cc")
            for ((i, e) in lists.withIndex()) {
                Log.d("MainActivity", "$i  $e")
            }
    

    mapOf():该函数返回不可变的Map集合。该函数可接受0个或多个key-value对,这些key-value对将作为Map的元素。

    mutableMapOf():该函数返回可变的MutableMap集合。该函数可接受0个或多个key-value对,这些key-value对将作为Map的元素。

    hashMapOf():该函数返回可变的HashMap集合。该函数可接受0个或多个key-value对,这些key-value对将作为Map的元素。

    linkedMapOf():该函数返回可变的LinkedHashMap集合。该函数可接受0个或多个key-value对,这些key-value对将作为Map的元素。

    sortedMapOf():该函数返回可变的TreeMap集合。该函数可接受0个或多个key-value对,这些key-value对将作为Map的元素。

    // 创建不可变集合,返回值是Map
    var map = mapOf("Java" to 86, "Kotlin" to 92, "Go" to 78)
    ...
    

    函数和函数式表达式

     fun add(x: Int, y: Int): Int = x + y
     // 函数表达式写法
     var add = { x: Int, y: Int -> x + y }
     // 函数声明另外一种写法
     var add2: (Int, Int) -> Int = { x, y -> x + y }
    

    默认参数和具名参数

    • fun add(x: Int = 1, y: Int): Int = x + y

    • var result = add(y = 2)

    字符串转数字

            var c = "16"
            var d = 16
            
            c = d.toString()
            d = c.toInt()
    

    人机交互

    // readLine()返回值是 String?,键盘输入数据,而不用程序定死
    var num = readLine()

    异常处理

     try {
           xxx
        } catch (e: Exception) { 
           xxx
        } finally {
           xxx
        }
    

    递归

        // 阶乘
        fun fact(num: Int): Int {
            if (num == 1) {
                return 1
            } else {
                return num * fact(num - 1)
            }
        }
    

    尾递归优化

        // 累加
        tailrec fun ollAdd(num: Int, result: Int): Int {
            if (num == 0) {
                return 1
            } else {
                return ollAdd(num - 1, result + num)
            }
        }
    

    继承

    open 可被继承
    override 重写

    抽象

    abstract

    多态

    同种功能,不同的表现形式,一个东西的多种状态。

    接口和抽象类

    接口是事物的能力
    抽象类是事物的本质

    interface

    委托和代理

    委托是把事情托付给别人或别的机构办理
    代理是指以他人的名义,在授权范围内进行对被代理人直接发生法律效力的法律行为。代理的产生,可以是受他人委托。

    by

    单例模式

    object

    枚举

        enum class Week {
            Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
        }
    

    调用:Week.Monday(Monday), Week.Monday.ordinal(0)

    印章类

    子类类型有限的 class
    sealed

        sealed class Person {
    
            fun sayHello(){
                Log.d("TAG", "Hello")
            }
    
            class Man : Person()
            class Woman : Person()
        }
    

    印章类和枚举区别

    • Sealed class 更在意类型
    • 枚举更在意数据

    image.png

    相关文章

      网友评论

        本文标题:Kotlin 基础笔记

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