函数和变量

在开发当中,函数和变量是必不可少的。如何去声明一个函数呢?下面举个栗子:

/**
 * 比较两个数的大小
 * @param a
 * @param b
 * @return a or b
 */
fun max(a: Int, b: Int): Int {
    return if (a > b) a else b
}

fun main() {
    println("比较1和2的大小," + max(1, 2) + "最大")
}

解析:
函数的声明由fun关键字开始,函数名称跟在fun后面;比如上面例子的函数名称是max,函数名称后面括号是参数列表。参数列表后面是返回类型,它们之间使用冒号隔开。例子中if是有结果的表达式,与Java中的三元运算符相似:(a>b)?a:b

表达式函数体

可以让上面的例子变得更加简洁。直接上代码:

fun max(a: Int, b: Int): Int = if (a > b) a else b

执行出来的效果是一样的,我们在上面的代码当中去掉了花括号和return语句。

还有更简洁的表达【说句实在话有点不敢相信】,验证过的代码:

fun max(a: Int, b: Int) = if (a > b) a else b

细心的小伙伴,肯定发现这句更简洁的表达式少了返回类型。没有想到这样也是可以的,书中的给出的解释是

对于表达式体函数来说,编译器会分析作为函数体的表达式,并把它的类型作为函数返回类型,即时没有显式地写出来,这种分析通常被称为“类型推导”。

关于表达式函数体最简洁的写法的注意事项

只有表达式函数体的返回类型可以省略。如果返回值是代码体函数,必须显式地写出来返回类型和return语句。因为在实际的项目当中一般都很长然后包含多条return语句,显式写出来会帮你更好的理解这个函数。

变量的声明

使用val关键字简单声明变量,可以加或者不加变量类型,举个栗子:

fun main() {
    // 编译器类型推导
    val a = 1
    // 指定变量类型
    val b:Int = 2
}
可变变量和不可变变量

声明变量的关键字有两个:

  • val(来自value)——不可变引用。使用val声明的变量不能在初始化之后再次赋值。相当于Java的final变量。
  • var(来自varlable)——可变引用。这种变量的值是可以被改变的。这种相当于Java的普通变量。

《Kotlin实战》中推荐默认情况下,尽可能使用val关键字声明变量,仅在必要的情况下换成var

需要注意:

  • val 引用自身是不可变的,但是它的指向的对象是可变的。例如
val languages = arrayListOf("Java")
languages.add("Kotlin")
  • var 引用是允许变量改变自己的值,但是它的类型是不可以改变的。例如:
var test = 1
test = "改变类型试试"

运行会出现:Error:(8, 12) Kotlin: Type mismatch: inferred type is String but Int was expected

希望我的这篇文章对学习Kotlin开发的小伙伴们有帮助,推广一下我微信公众号,我会经常更新一下技术干货或者开发踩坑历程,欢迎大家关注我!
在这里插入图片描述

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐