Android开发

Kotlin 基础笔记

2020-04-27  本文已影响0人  夜远曦白

Kotlin 变量和常量

常见容器存储范围

命令行交互式编程

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

函数编写规则

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

作业

    fun sayHello(name: String): String {
        return "Hello, $name"
    }
    fun checkAge(age: Int): Boolean {
        return age > 18
    }
    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 }

默认参数和具名参数

字符串转数字

        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()
    }

印章类和枚举区别


image.png
上一篇下一篇

猜你喜欢

热点阅读