这一节我们将学习Kotlin的变量和函数。
Kotlin的变量
1 . Kotlin的变量声明格式
Kotlin中的变量声明以关键字开始,在大部分情况下可以省略类型,这里我们同样将Kotlin与Java进行对比
Kotlin变量声明格式如下:
//关键字 变量名:类型(可省略)
val result: Int = 24
Java变量声明格式如下:
//类型 变量名
final int result = 24;
上面出现了一个陌生的关键字val
,这是声明变量的关键字,一共有两个
val —— 不可变引用,变量在声明时赋值初始化,之后不能再次赋值,对应与Java里面的final
变量
var —— 可变引用,这种变量可以多次赋值,对应于Java里面的普通变量
2 . 可省略变量类型
我们在前面说过Kotlin有个特性叫类型推导
,也就是可以自己判断出变量和返回值的类型,不用显式指定。所以当我们在声明变量时就给其赋值,就可以省略变量类型。
//自动推导出为result为Int类型
val result = 24
如果我们在声明变量时没有给变量初始化,则编译器无法推导出变量的类型,则需要显式指定它的值
//声明时没有初始化赋值,需要显式指定类型
val result: Int
result = 24
3 . val变量只进行唯一一次初始化赋值
前面说了,val变量在初始化赋值以后值不可以改变。我们一般是在声明变量时为其赋值。但如果我们可以保证整个程序运行过程中只为val变量赋值1次,那样也是可以初始化的。
//声明变量时初始化
val result = 24
//只声明,不赋值(必须显式指定类型)
val result: int
//通过条件判断只赋值一次
if(canClick){
result = 24
}else{
result = 32
}
4 . 变量的类型不可变
尽管var声明的变量的引用是可以改变的,但我们一旦声明了某个变量的类型,那它的类型是不可以改变的。
var result = 24
//变量的类型是Int不能给其赋值字符串,会报错
result = "123"
这里说明一下,我们这里只是简单说到了变量,并没有讲到变量的类型,这些内容将在后续的内容中详细讲解。
Kotlin的函数
上一小节中我们的示例代码中其实已经出现了一个函数,这一小节我们将继续深入了解一下函数。
1 . 声明一个函数
在Java中函数是不能脱离类而单独存在的,但是在Kotlin中函数是可以单独存在的。比如我们上一节的代码
//Java代码
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
//Kotlin代码
fun main(args: Array<String>) {
print("Hello World")
}
可以看出Kotlin中的函数是使用fun
关键字声明的,然后是函数名,函数名里面是参数,参数的声明是参数名: 参数类型的形式
。当然上面的函数没有返回值,下面我们看看有返回值的函数。
//有返回值的函数
fun returnValFun(result: Int): Int{
return 24
}
我们看到返回值的写法和参数变量的写法类似,都是以:
分割,然后在后面跟上变量类型。
2 . 代码块函数体
这个概念可能看名字就能了解它的意思,我们上面的代码都是代码块函数体,也就是函数的内容是由多行代码组成的。说这个概念主要是与下面的概念进行对比区分。
//代码块函数体
fun max(a: Int, b: Int): Int{
return if (a > b) a else b
}
3 . 表达式函数体
这个概念可能有点陌生,在搞清楚这个概念之前,我们先要搞清楚另外两个概念语句
和表达式
。
语句:语句是包围着代码的,他没有值。
表达式:表达式是有自己的值的,并且可以作为另一个表达式的一部分。
在Kotlin中,if是表达式
,这个和Java中是不同的。
//表达式函数体
fun max(a: Int, b: Int): Int = if (a > b) a else b
如果你理解了前面的类型推导
概念,那上面的代码还可以简化
//函数返回值可以推导出来(根据if判断的结果,最终的返回值肯定是Int)
fun max(a: Int, b: Int) = if (a > b) a else b
是不是简洁了很多,但是要注意的是,如果你是代码块函数体
,那必须显式写出return语句
和返回值类型
,不可以省略。
写在最后
这一次,我们学习了Kotlin的变量和函数的基本只是和其中的一些规范,这些规范是保证我们能写出正确代码的必要条件。