目录
2.3 编程之本:变量和函数
编程语言之多,让人眼花缭乱。你可能不知道,世界上一共诞生过600 多门有记录的编程语言, 没有记录的那就更多了。这些编程语言基本上共有的特性就是变量和函数。可以说,变量和函数就是编程语言之本。那么本节我们就来学习一下 Kotlin 中变量和函数的用法。
2.3.1 变量
先来学习变量。在 Kotlin 中定义变量的方式和 Java 区别很大,在Java 中如果想要定义一个变量,需要在变量前面声明这个变量的类型,比如说 int a 表示 a 是一个整型变量,String b 表示b 是一个字符串变量。而 Kotlin 中定义一个变量,只允许在变量前声明两种关键字:val 和 var。
val(value 的简写)用来声明一个不可变的变量,这种变量在初始赋值之后就再也不能重新赋值,对应 Java 中的 final 变量。
var(variable 的简写)用来声明一个可变的变量,这种变量在初始赋值之后仍然可以再被重新赋值,对应 Java 中的 非 final 变量。
如果你有 Java 编程经验的话,可能会在这里产生疑惑,仅仅使用 val 或者 var 来声明一个变量, 那么编译器怎么能知道这个变量是什么类型呢?这也是 Kotlin 比较有特色的一点,它拥有出色的类型推导机制。
举个例子,我们打开上一节创建的 LearnKotlin 文件,在 main() 函数中编写如下代码:
fun main() {
var a = 10
println("a = " + a)
}
注意,Kotlin每一行代码的结尾是不用加分号的,如果你写惯了Java 的话,在这里得先熟悉一 下。
在上述代码中,我们使用 val 关键字定义了一个变量 a,并将它赋值为10 ,这里 a 就会被自动推导成整型变量。因为既然你要把一个整数赋值给 a,那么 a 就只能是整型变量,而如果你要把一 个字符串赋值给 a 的话,那么 a 就会被自动推导成字符串变量,这就是 Kotlin 的类型推导机制。
现在我们运行一下 main() 函数,执行结果 如图2.6 所示,正是我们所预期的。
![](https://i-blog.csdnimg.cn/blog_migrate/069d78ad13e596d3779608ee88a60201.png)
但是Kotlin的类型推导机制并不总是可以正常工作的,比如说如果我们对一个变量延迟赋值的 话,Kotlin就无法自动推导它的类型了。这时候就需要显式地声明变量类型才行,Kotlin提供了对这一功能的支持,语法如下所示:
val a: Int = 10
可以看到,我们显式地声明了变量 a 为 Int 类型,此时 Kotlin 就不会再尝试进行类型推导了。如果现在你尝试将一个字符串赋值给 a,那么编译器就会抛出类型不匹配的异常。
如果你学过 Java 并且足够细心的话,你可能发现了 Kotlin 中 Int 的首字母是大写的,而 Java 中 int 的首字母是小写的。不要小看这一个字母大小写的差距,这表示 Kotlin 完全抛弃了Java 中的 基本数据类型,全部使用了对象数据类型。在 Java 中 int 是关键字,而在 Kotlin 中 Int变成了一个类,它拥有自己的方法和继承结构。表2.1 中列出了 Java 中的每一个基本数据类型在Kotlin 中对应的对象数据类型。