kotlin
语言已经在慢慢成为Java
的替代语言,早在 2017
年 Google开发者大会
的时候就进入大众的视野,从此流行起来。自己因为个人原因一直没有完整的学习,趁着这个机会把 Kotlin
认真啃一遍(主要参考《Kotlin实战》这本书籍),希望以此博客记录自己的学习过程。
本文的目录如下:
一、Kotlin
的简介;
二、Kotlin
的基础语法;
Kotlin
简介
目的
Kotlin
从被创建之初的目的就是用来替代 java
,而且在使用上比java更简洁、安全和务实,且可以与java互相调用。 关于 Kotlin
语言的这些特点可以在接下来的介绍和使用中慢慢了解。
Kotlin
和 Java
的异同
Kotlin
对Java
百分百兼容,在任何使用Java
语言的地方都可以使用kotlin
。在AndroidStudio
中复制Java
代码到.kt
文件中会直接将Java
语言转化成kotlin
语言;区别除了上述的优点外,最大的区别可能是
kotlin
是 函数式编程,体现如下:- 函数类型:允许函数接收其他函数作为参数,或返回其他函数;
- 支持
lambda
表达式,用最少的样板代码方便地传递代码块; - 数据类,提供了创建不可变数据对象的简明语法;
- 标准库中提供丰富的函数式API,让你用函数式编程风格操作对象和集合;
如果没有理解也没有关系,后面介绍会涉及到,再回过头来看即可。
一些链接🔗
在Android中使用Kotlin (
Android developer
官网)
Kotlin的基础语法
主要包括:函数声明、变量、字符串模板、类和属性、目录和包、枚举类型、
when
、if
、while
、for
、智能转化 以及 异常处理。
函数声明
1 | fun max(a: Int, b: Int): Int { |
以上述函数举例说明:
- 函数声明都以
fun
关键字开头 max
是方法名字,后面紧跟着括号内的是输入参数;- 以
:
冒号表示类型,kotlin
先写变量,后面接变量类型; - 参数之后跟着返回类型,如果没有可以省略;
Kotlin
中语句结尾不需要分号;
;return
的if
是表达式而非语句(表达式和语句的区别在于表达式有返回值,而语句没有);
变量
Kotlin
声明变量比Java
中要简洁;
1 | val a: Int = 1 // 立即赋值 |
以上述代码举例说明:
Kotlin
声明变量只有val
(不可变变量,只能初始化一次,来自value
) 和`var
(可变变量,来自variable
)两种;- 声明变量且赋值时,可以省略变量类型,因为
kotlin
可以自动推导变量类型; - 变量赋值时使用
?
表示可为空; - 默认属性是
public
,可省略;
PS : 虽然val
引用自身是不可变的,但是它所指的对象可能是可变的* (如果不理解没有关系,后续章节会介绍)
1 | val language = arrayListOf("java") |
字符串模版
1 | fun max(a: Int, : Int): Int { |
还是上面的代码,稍微修改后可以看出:
kotlin
中可以通过在变量名加上符号$
来打印出该变量,效率更高;(编译后可看出是通过stringBuilder
实现的);println
是kotlin
中的API
库,使用方便简洁;
类和属性
1 | //kotlin |
kotlin
中对于类属性具有默认的getter
和setter
(val
变量只具有getter
,var
变量具有getter
和setter
)。
目录和包
Kotlin
中包名和目录路径可以不一致(但是最好保持一致)。
声明枚举类型
1 | enum class color { |
- 使用关键字
num class
- 枚举类中定义方法,需要用分号区分枚举常量 和方法定义;
when的使用
when 和if一样,也是一个有返回值的表达式。
1 | enum class Colors { |
- 不需要
break
语句; - 多个分支可以用逗号隔开;
when
也可以不带参数;
if的使用
1 | fun max(a: Int, b: Int): Int { |
- 如果
if
分支只有一个表达式,那么花括号可以省略; - 如果
if
分支是一个代码块,则代码块中的最后一个表达式可以作为结果返回;
while和for循环
在kotlin中,while循环的使用(while和do-while的使用)和Java中基本一致。
对于for
循环,kotlin
中有所不同。在kotlin
中引入了 区间
的概念,使用运算符 ..
来表示区间。
1 | val oneToTen = 1..10 |
kotlin
区间是包含前后边界值的;- 使用了关键字
in
检查区间成员(也可以检查集合内容,in的相反是!n
) in
关键字的使用如上所示,同时in
和when
、if
一些关键字可以搭配使用;
智能转化
智能转化是kotlin的类型转换。
1 | if (e is Int) { |
- 经过
is
关键字后,e
的类型被智能转化成Int
类型了; - 还可以使用关键字
as
,显示的转化类型;
抛出和处理异常
kotlin
中抛出和处理异常基本和Java
类似,与Java
不同的是throw
结构可以是一个表达式,能作为另一个表达式的一部分使用;
1 | val percentage = |
Kotlin
使用try catch finally
和Java
基本类似,同时try catch
也是一个表达式,且该表达式的值是最后一个表示式的值;
1 | val reader: BufferedReader; |