Kotlin


世界上没有最好的编程语言,就像世界上没有最好的人一样。

如果你想知道一门编程语言的优劣,那就去学会它。

用Kotlin也快一年,最近总觉的对它熟悉又陌生,不由的重新学习一下这门语言。

这门语言最舒服的地方

  1. 可空类型:判空的代码省了
  2. when,强大的分支结构:已知的编程语言中最强
  3. if,可以做为表达式: 不用再另外生命变量
  4. object,语法层面的单例
  5. 闭包,很实用

整体介绍

  1. 开发工具
    • Intellij IDEA:
    • Sublime Text:
    • Vscode:
  2. 面向过程
    • 基本语法和规范
      • 变量
        • var a = “hello”
      • 常量
        • val a = “name” // 运行期常量
        • const val co = “常量” //编译器常量,只能用于顶层常量或对象中的常量声明,只能是String和基础数据类型
      • 注释
        • // 单行注释
        • /* 块注释 */
        • /* /嵌套注释/ */
        • 文件注释
          • 版权信息
          • 许可信息
          • 描述
          • 历史版本
        • 文档注释: 公开SDK
          • Kdoc
            • @author
            • @deprecated
            • @param
            • @return
            • @version
        • 代码注释: 阅读源码参考
        • 地标注释: IDE提供的功能
          • //TODO: 代码未完成
          • //FIXME: 代码错误,待修正
      • 命名规范
        • 包名: 全小写,可用点分割
        • 类名、接口: 大驼峰
        • 文件名: 大驼峰
        • 变量名: 小驼峰
        • 编译器常量: 全大写,可以加下划线
        • 函数名: 小驼峰
      • 代码排版
        • 空行
          • 代码注释之后(除尾端注释)
          • 函数内第一条语句之前
          • 一个函数内部两个逻辑段
          • 类声明或接口声明之间
        • 空格
          • 赋值符号
          • 二元运算符
          • 小括号前后
          • 函数参数之间
          • 类继承,接口实现
          • lambda表达式大括号左右
        • 缩紧
          • 4个空格
        • 断行
          • 逗号后,运算符前
          • 类声明时
        • 省略
          • 分号
          • 省略Unit
          • lambda参数
    • 数据类型
      • 整数
        • Byte
          • 8位
          • -128~127
        • Short
          • 16位
          • -2 ^ 15 ~ 2 ^ 15 - 1
        • Int
          • 32位
          • -2 ^ 31 ~ 2 ^ 31 -1
        • Long
          • 64位
          • -2 ^ 63 ~ 2 ^ 63 -1
      • 浮点数
        • Float
          • 32位
          • 3.0F
        • Double
          • 64位
          • 默认小数为double
        • 科学计数
          • 3.14e15
      • 字符类型
        • Kotlin字符采用双字节Unicode编码(16位)
        • 可以使用16进制表示
          • val a = ‘A’
          • val b = ‘\u0041’
          • val c = ‘码’
        • 制表符
          • \t \u0009 Tab
          • \n \u000a 换行
          • \r \u000d 回车
          • " \u0022 双引号
          • ' \u0027 单引号
          • \ \u005c 反斜线
          • $ \u0024 美元符号
          • \b \u0008 退格
      • 布尔类型
        • true
        • false
      • 数据类型之间的转换
        • toXXX(): 转换函数
        • ⚠️ 大范围转小范围会存在进度丢失的风险
        • 隐式转换优先度: double > float > Long > Int
      • 可空类型
        • 防止空指针异常
        • 可空运算
          • 安全调用运算 ?.
          • as?
          • Elvis运算符 ?:
          • 非空断言!!
          • let
      • 字符串类型
        • 普通字符串
        • 原始字符串
          • 可以包含任何字符,不能包含转移字符
          • == 判断两个对象内容是否相等
        • 不可变字符串
        • 字符串操作
          • 拼接
            • a + b
          • 模版
            • $x
          • 查找
            • indexOf: 从x开始往后查
            • lastIndexOf: 从x开始由后向前查
          • 比较
            • 相等
            • 比较大小
            • 比较前后缀
          • 字符串截取
            • 区间截取: 左闭右开区间
        • 可变字符串
          • StringBuilder
          • 追加
          • 插入
          • 删除
          • 替换
        • 正则表达式
          • Regex
          • 字符串匹配

            Regex(""""\d+""").matchs("1233")

          • 字符串查找

            Regex(""""\d+""").find("1233")

          • 字符串替换

            Regex("""\d+""").replace("123mmm", "")

          • 字符串分割

            Regex("""\d+""").split("123mmm")

    • 运算符
      • 算术运算符
        • 一元运算符
          • 取反符号: -a
          • 自加: ++
          • 自减: --
        • 二元运算符
          • a + b
          • a - b
          • a * b
          • a / b
          • a % b
        • 算术赋值运算符
          • a += 1
          • a -= 1
          • a *= 2
          • a /= 2
          • a %= 2
      • 关系运算符
        • == 、>、<、>=、<= 、===、!==
      • 逻辑运算符
        • &&、||
      • 位运算符
        • inv 位反
        • and 位与
        • or 位或
        • xor 位异或
        • shr 有符号右移
        • shl 左移
        • ushr 无符号右移
      • 其他运算符
        • Class A : B()、()、[]、.=、?、?.、?:、!!、::、..、-> 、*
      • 运算符优先级(从高到低)
        • ()
        • ++ 、-- 、 . 、 ?. 、?
        • -、 + 、 ++ 、-- 、!
        • :、as、as?
        • * 、 / 、%
        • +、-
        • ..
        • 中缀运算符
        • Elvis运算符 ?:
        • in、!in、is、!is
        • <、>、<=、>=
        • ==、!=、===、!==
        • &&
        • ||
        • =、+=、-=、*= 、/= 、%=
    • 控制流
      • if
        • if(true) a = 1
        • val a = if(true) "" else null
      • when
        • when() {}
        • val a = when(name)
      • while {}
      • do {} while
      • for () {}
      • break
        • label@ for (x in 0..8) {
        • for (y in 0..8) {
        •   if (x == y ) {
        •    break@label
        •   }
        • }
      • continue
        • label@ for (x in 0..8) {
        • for (y in 0..8) {
        •   if (x == y ) {
        •    continue@label
        •   }
        • }
        • }
    • 函数
      • 函数声明
      • 命名参数
        • fun add(a: Int, b: Int): Int {
        • return a + b
        • }
      • 默认参数
        • fun add(a: Int, b: Int, c: Int = 1): Int {
        • return a + b + c
        • }
      • 可变参数
        • fun add(vararg numbers: Int): Int {
        • var total = 0.0
        • for (number in numbers) {
        •   total += number
        • }
        • return total
        • }
      • 表达式函数
        • fun area(x: Int, y: Int) = x * y
      • 局部函数
        • fun func() {
        • fun func() {
        • }
        • }
      • 匿名函数
        • val oneF = fun(x: Int, y:Int): Int = x * y
  3. 面向对象
    • 封装
    • 继承
    • 多态
    • 抽象类/接口
  4. 函数式编程
    • 高阶函数
    • Lambda
    • 闭包
    • 内联函数
    • 范型
    • 数据容器
    • 函数式API
  5. 通用模式
    • 异常处理
    • 线程
    • 协程
    • I/O
    • 文件管理
    • 网络编程
    • GUI编程
  6. Java特性
    • 反射
    • 注解