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; |