变量
在Kotlin中定义变量与JAVA有很大的区别,JAVA中比如你想定义一个整型变量你的这么写:
private int i = 0;
如果是一个字符串变量的话你得这么写:
private String s = "";
其中private是访问控制修饰符,int和String是变量类型,=号后面跟的是具体的值。
而Kotlin中定义一个变量,只允许在变量前声明两种关键字:val和var。
val:value的简写,用来声明一个不可变的变量,这种变量在初始化赋值之后就再也不能重新赋值,对应JAVA中的final变量。
var:variable的简写,用来声明一个可变的变量,可以再被重新赋值,对应JAVA中非final的变量。
纳尼?竟然没有确定类型,对于写习惯JAVA的我来说第一次写Kotlin的时候真的是不习惯,有点害怕这个变量到底是不是我想要的类型。但这也恰恰是Kotlin比较有特色的一点:Kotlin有出色的类型推导机制!
所以在Kotlin中你要这么写:
val i = 0
val s = ""
当出现0 或者""的时候,该变量就会自动的被推导成整型或者字符串变量。
但是Kotlin的类型推导机制并不总是可以正常工作的,比如说我定义一个变量的时候不想对它进行初始化赋值,在之后对它延迟赋值,Kotlin就不能自动推导它的类型了,这里就需要显示的声明类型了:
val i: Int = 0
val s: String = ""
你看现在就显示的声明了i的类型是int,s的类型是String,如果你写过JAVA,你会发现,Kotlin中的Int竟然是大写的,这是因为Kotlin完全抛弃了基本数据类型的概念,全部使用的对象数据类型!所以,在JAVA中,int只一个关键字,在Kotlin中,Int变成了一个类,它拥有自己的方法和继承结构。
Kotlin提供了延迟初始化的方式来解决初始化的问题,使用关键字lateinit即可,然而会有一些问题:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020111723125363.png#pic_center
可以看到,String类型没有问题,而Int型会报lateinit modifier is not allowed on primitive type properties。Kotlin并不支持对原生类型进行lateinit,为什么呢?因为Kotlin会使用null来对每一个用lateinit修饰的属性做初始化,而基础类型是没有null类型,所以无法使用lateinit。这点很好理解,就像可以把int型变量赋值为0,却无法赋值为null一样。所以这里为了通过IDE的编译,我们可以采用两种方案,要么还是直接在i声明时进行初始化,要么不用基础类型来定义i。
函数
函数——也就是方法,这俩是同一种概念,函数翻译来自functiom,方法翻译来自method。
在Kotlin中定义一个函数语法规则如下:
fun testMethod(param1: Int, param2: String): Int {
return 0
}
fun:function的缩写,定义函数的关键字,无论定义什么函数,都得用fun来声明。
testMethod:函数的名字。
注意命名的时候不要嫌函数名字太长,要保持一个好的习惯,一眼就能看出这个函数是干什么的,哪怕名字再长也无所谓。
param1: Int第一个参数名字,冒号后面的Int说明这个形参类型是Int型的。
param2: String第二个参数的名字,冒号后面的String说明这个形参类型是字符串型的
注意参数的个数可以是任意个。
最后大括号前面的Int是该函数的返回值类型,所以方法里面我返回了个0。
当函数中只有一行代码时,Kotlin允许我们不必编写函数体,可以直接将唯一的一行代码写在函数定义的尾部,中间用等号连接即可,比如上面的testMethod方法可以写成这样:
fun testMethod(param1: Int, param2: String): Int = 0
并且,由于Kotlin出色的类型推导机制,我可以不必显示地声声明testMethod的返回值,代码可以进一步简化:
fun testMethod(param1: Int, param2: String) = 0
这是Kotlin的语法糖之一。