Skip to content

Latest commit

 

History

History
120 lines (69 loc) · 3.69 KB

3.2.1.2.Kotlin 系列详细计划-01-文章结构.md

File metadata and controls

120 lines (69 loc) · 3.69 KB

Kotlin 系列文章详细计划-01-文章结构要求

这是码上开学 Kotlin 系列第一集的文章结构要求。

  • 这篇文档是唯一对文章内容作出约束的文档。如果你要写文章,只参考这一篇文档就可以。(不过如果先读一下对应的视频脚本,会对写文章有帮助。但这个不强制哟。)

  • 文章标题已经给出,正式发布时的标题会一个字、一个标点都不差。如果你需要改标题,请务必先联系扔物线(朱凯),谢谢!

  • 这篇文档可能在后续过程中会有修改,到时候文章也需要跟着修改。我尽量不修改,但无法保证,毕竟水平有限:joy:。

标题:Kotlin 的变量、函数和类型

结构要求:

如果有不同意见请先来找我讨论,不要直接自我修改文章结构哟。——扔物线

变量

  • 声明变量时的格式:

image-20190607222821304

  • 需要初始化,否则会报错。进而:

    • 由「初始化时赋值 null」引出 Kotlin 的空安全设计:

      Kotlin 默认要求对象不可空。

      两个解决方案:

      1. lateinit:变量的声明者(程序员)确定这个变量在使用时不会为空,但没法第一时间给它初始值;
      2. 确实由于某些原因,这个变量真的可能有时需要是空值:用问号——var name: Type?
  • 类型推断:

    var name = "rengwuxian"
  • varval

    • var 是「可读可写变量」(其实就是变量);
    • val 是「只读变量」,相当于 Java 的 final,但又不太一样(不一样在于 val 可以定制 getter 来让自己哪怕只读也依然值是动态的,不过这个属于自定义 getter 的范畴,所以可以放在后面函数部分的自定义 getter 再讲);
  • Kotlin 的 property 默认是 public 的。

函数

  • 函数的声明格式:

    image-20190607223831158

    • 返回值为空:

      • 不是 void,而是 Unit

      • 返回 Unit 可以省略

    • 函数的参数也可以有可空的控制:

      image-20190607224007887

    • 默认也是 public

  • getter / setter

    • 读写函数其实是调用 getter / setter:

      image-20190607224054928

    • 写法:

      image-20190607224335767

      • field (backing field)解释一下
  • 这种设计的作用:

    • 主要作用:在读写数据的时候增加操作,比如日志。
      • 另类作用:修改赋值和取值的算法,比如 getSize() {return items.size}。(接上了上面说的「Kotlin val 和 Java final 的不同」。

类型

基本类型

int/Integer float/Float -> Int Float

  • 使用上有什么区别?
  • Android 工程师的疑问:没了 int,会不会有什么暂时想不到的麻烦?

类型的声明

  • 默认依然是 public

  • extends / implements -> :

  • constructor

  • 方法的重写:

    • 默认是 final 类,可继承的类要主动写 open
    • @Override -> override
    • overrideopen 的遗传性
    • abstractopen
  • innerstatic 类型

  • internal

  • annotation 和 enum 的声明

    image-20190607230204186

其他

  • AnyObject
    • 有什么区别?
    • 有什么暂时想不到的麻烦?
  • 类型的判断和强转
  • ::class, .javaClass, ::class.java