Kotlin官网-学习Kotlin

基础语法

参考这里 book.kotlincn.net/text/basic-...

  1. 使用package声明包,包的声明应处于源文件顶部。main函数是程序入口
  2. 目录与包的结构无需匹配:源代码可以在文件系统的任意位置
  3. 类的属性可以在其声明或主体中列出
  4. 类之间继承由冒号(:)声明。默认情况下类都是 final 的;如需让一个类可继承, 请将其标记为 open

Kotlin Tour

参考这里 kotlinlang.org/docs/kotlin...

fun声明函数,main是程序入口,val是只读变量,var是可变变量,可以使用模板字符串拼接多个变量

Kotlin中的基本类型 Kotlin和其他语言一样,有集合、数组、Map三种集合类型

Kotlin里面没有三元运算符,可以通过if表达式替代

when和Swift中的Switch类似,既可以做表达式也可以做语句

Kotlin中的函数,如果没有写return,默认返回Unit。类似于swift中的Void

Kotlin中的lambda表达式和Swift中的闭包一样,都是一等公民,可以当做参数或赋值给一个变量或者当做结果被返回,如果是函数最后一个参数可以使用尾随闭包语法,只是语法不太一样。Swift中是大括号包起来用in区分参数和执行体,Kotlin中是大括号包起来用->区分参数和执行体。

Kotlin中有独有的data class,用于存储数据并提供一系列的方法可用,常用的有下面这些

Kotlin中的?:操作符和Swift中的 ?? 一样,当左值为null的时候使用右边的默认值

语法概览

参考这里 book.kotlincn.net/text/d-conc...

  1. 在 Kotlin 中,所有东西都是对象,在这个意义上讲可以在任何变量上调用成员函数与属性
  2. Kotlin中enum也是一个class,语法是enum class XX
  3. 如果主构造函数没有任何注解或者可见性修饰符,可以省略这个 constructor 关键字
kotlin 复制代码
class Person constructor(firstName: String) { /*......*/ }
class Person(firstName: String) { /*......*/ }
  1. 类也可以声明前缀有 constructor的次构造函数 。如果类有一个主构造函数,每个次构造函数需要委托给主构造函数, 可以直接委托或者通过别的次构造函数间接委托。委托到同一个类的另一个构造函数用 this 关键字即可。这一点类似于Swift中便利构造器convenience
  2. 在 Kotlin 中所有类都有一个共同的超类 Any,对于没有超类型声明的类它是默认超类
  3. 默认情况下,Kotlin 类是最终(final)的------它们不能被继承。 要使一个类可继承,请用 open 关键字标记它
  4. 如果函数没有标注 open,那么子类中不允许定义相同签名的函数, 无论加不加 override

lateinit 修饰符只能用在类体中的属性(不是在主构造函数中声明的 var 属性, 并且仅当该属性没有自定义 getter 或 setter 时),也用于顶层属性与局部变量。 该属性或变量必须为非空类型,并且不能是原生类型

要检测一个 lateinit var 是否已经初始化过,请在该属性的引用上使用 .isInitialized

泛型参数 out、in实现协变与逆变

对象表达式 使用 object 关键字

扩展函数、方法、lambda中this指向 book.kotlincn.net/text/this-e...

注解知识 book.kotlincn.net/text/annota...

通过例子学Kotlin

查看这里 play.kotlinlang.org/byExample/o...

标准函数let,also,with,run 和 apply

1)、let 函数,必须让某个对象调用,接收一个 Lambda 表达式参数,Lambda 表达式中的参数为当前调用者,且最后一行代码作为返回值。

2)、also 函数,必须让某个对象调用,接收一个 Lambda 表达式参数,Lambda 表达式中的参数为当前调用者,无法指定返回值,这个函数返回的是当前调用对象本身

3)、with 函数,接收两个参数,第一个为任意类型参数,第二个为 Lambda 表达式参数,Lambda 表达式中拥有第一个参数的上下文 this ,且最后一行代码作为返回值

4)、run 函数,必须让某个对象调用,接收一个 Lambda 表达式参数,Lambda 表达式中拥有当前调用对象的上下文 this ,且最后一行代码作为返回值。和let函数一样,只是内部访问receiver不一样,let中默认是it,run中是this。相比let来说只是方便了直接访问和修改属性

5)、apply 函数,必须让某个对象调用,接收一个 Lambda 表达式参数,Lambda 表达式中拥有当前调用对象的上下文 this ,无法指定返回值,这个函数返回的是当前调用对象本身。主要用于在代码块内批量修改属性

资料

  1. Kotlin开始 kotlinlang.org/docs/gettin...
  2. 基础语法 kotlinlang.org/docs/basic-...
  3. Kotlin Tour kotlinlang.org/docs/kotlin...
  4. Learn Kotlin by Example play.kotlinlang.org/byExample/o...
  5. 知识能力测试 kotlinlang.org/docs/koans....
  6. 语法概览 kotlinlang.org/docs/basic-...
  7. Gradle官网 docs.gradle.org/current/use...
  8. Gradle入门 book.kotlincn.net/text/get-st...
相关推荐
事圆则缓1 小时前
Kotlin 集合与序列:给页面一份清楚的数据
开发语言·windows·kotlin
事圆则缓1 小时前
Kotlin 异步与并发:从一次搜索请求走到状态流
android·开发语言·kotlin
事圆则缓5 小时前
Kotlin学习导航:从知识树走到项目与面试
android·开发语言·kotlin
mmsx20 小时前
Android 插件化架构:40 个 Gradle 模块的拆分、通信与共存
android·kotlin
mmsx20 小时前
Android 不改一行源码:用 AspectJ 做三类拦截
android·kotlin
熊猫钓鱼>_>1 天前
开源鸿蒙平台 KMP 三方库 kotlin-csv 适配全流程:从编码假设到沙箱真机互通验证
开发语言·人工智能·华为·kotlin·harmonyos·鸿蒙
事圆则缓1 天前
Kotlin 类型与空安全:从接口数据到页面状态
kotlin
墨天梦2 天前
D19_系统分享与文件URI
gitee·kotlin
应用市场2 天前
离线小游戏做“每日挑战”:日期当随机种子,整局存成 JSON,再加一个“我不是机器人”
android·kotlin·游戏开发
hai_android2 天前
LiveEventBusCore 跨 Activity 通讯源码解析
android·kotlin·android jetpack