Kotlin
本Blog是我学习《Android第一行代码-第三版》
的学习笔记,将会不定期断更持续更新。(默认大家都和我一样学过C++或Java的基础语法)。
Kotlin简介
在Android诞生的前几年中,Java一直是Android的主要开发语言。在2017年,Google在I/O大会上宣布,Kotlin正式成为Android的一级开发语言,与Java平起平坐,同时Android Studio也对Kotlin进行了全面的支持。
2019年,Google在I/O大会上宣布,Kotlin已成为Android的第一开发语言
,Java虽然可以继续使用,但是Google更推荐开发者使用Kotlin编写Android应用程序,并且未来提供的官方API也会优先考虑Kotlin版本。
Kotlin语言的优点
- Kotlin语法更加简洁。对同样的功能,Kotlin开发的代码量可能会比Java开发的减少50%甚至更多。
- Kotlin语法更加高级。相比于Java较为老旧的语法,Kotlin增加了许多现代高级语言的语法特性,大大提高了开发效率。
- Kotlin在语言安全性方面下了很多功夫。几乎杜绝了空指针这个全球崩溃率最高的异常。
- Kotlin与Java语言100%兼容。Kotlin可以直接调用使用Java编写的代码,也可以无缝使用Java的第三方开源库。因为Java和Kotlin编译后都生成
.class
文件,然后由Java虚拟机进行识别运行。
如何运行Kotlin代码
- 使用IDEA。IDEAyyds。
- 在线运行Kotlin代码。JetBrains同样提供了在线运行Kotlin代码的网站。
- 使用Android Studio。Android Studio不能单独创建Kotlin项目,只能创建Android项目,然后在项目中编写一个Kotlin的main()函数这样就可以独立运行Kotlin代码了。
Kotlin语法
细节
- Kotlin每一行代码的结尾是
不用加分号
的。
变量
在Kotlin中定义一个变量,只允许在变量前声明两种关键字:val
(value)和var
(variable)。
val
: 声明一种不可变
的变量,这种变量在初始赋值之后便不能再重新赋值,对应Java中的final变量。
var
:声明一个可变
的变量,这种变量在初始赋值之后仍可以再被重新赋值,对应Java中的非final变量。
那么就有一个疑问了,这个声明只说了该变量是可变的还是不可变的,如果知道它的数据类型呢?这就是Kotlin比较有特色的一点了,它有出色的类型推导机制(这点感觉和python有点像)。你第一次给它赋的值就是这个变量的数据类型。
假如写一个函数:
fun main() {
val a = 10
println("a = " + a)
val b = "abc"
println("b = " + b)
}
但是自动推导类型只有在初始时就赋值的情况下才会进行,如果刚开始只是声明不赋值的话,这么写就会报错。
// 错误示范
fun main() {
val a
a = 10
println("a = " + a)
}
这时我们就需要显式地声明a的数据类型。
// 正确示范
fun main() {
val a : Int
a = 10
println("a = " + a)
}
如果和学过Java的话就会发现,Java的变量名都是首字母小写的,例如:int
,double
,boolean
,char
,但是Kotlin中的变量首字母却都是大写的,例如Int
,Double
,Boolean
,Char
等等。这意味着Kotlin已经完全抛弃了Java的基本数据类型,全部使用了对象数据类型(类似于Java的String),在Java中的int
是关键字,而在Kotlin中Int
变成了一个类,它拥有自己的方法和继承结构。
原则上我们优先使用val
来声明一个变量,而当val
无法满足需求时再使用var
,这样写出来的程序会更加健壮,更加高质量。
函数
函数是用来运行代码的载体,当调用这个函数时,这个函数里面的代码都会运行,main()
函数就是程序入口函数。
Kotlin同样允许自定义函数,语法规则如下:
fun methodName(param1 : Int,param2 : Int) : Int{
return 0
}
语法解释
首先,fun
是定义函数的关键字,无论定义什么函数,都要用fun
来声明。
紧跟在fun
之后的是函数名, 这个就没什么要求了,可以根据自己喜好起任意函数名(有意义的为佳)
函数名后接一对括号,里面声明该函数接受什么参数,上述示例中就是两个Int型参数。参数的声明格式是:参数名:参数类型
,其中参数名也是可以任意定义的,如果不想接受任何参数,则保留空括号即可。
参数括号后面那部分是可选的,用于声明该函数的返回值类型,上面实例就表示函数会返回一个Int型数据。