首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin实战读书笔记——函数和变量

函数

从一个最经典的例子:Hello World 开始。我们写一个打印输出 Hello World 的函数:

从这个函数我们可以观察到一下几点:

上面的函数没有返回值,如果我们需要定义一个有返回值的函数,应该怎么做?

使用关键字 fun 定义一个函数,输入两个参数,参数后面是我们需要的返回值类型,之间用:隔开。所以,上面两个例子我们基本可以总结出来 Kotlin 函数的基本格式:

表达式函数体

大家有没有注意到上面的 if 表达式。在 Kotlin 中,if 是表达式,不是语句。那么表达式和语句的区别是什么呢?表达式和语句的区别在于:表达式有值,并且能作为另外一个表达式的一部分使用;而语句总是包围着它的代码块中的顶层元素,并且没有自己的值。在 Java 中,所有的控制结构都是语句,而在 Kotlin 中,除了循环(for、while、do/while)以外,大多数控制结构都是表达式。

另一方面,Java 中的赋值操作都是表达式,在 Kotlin 中反而都成了语句。这有助于避免比较和赋值之间的混淆。

那么,什么是表达式函数体?我们可以把上面的函数改写成下面的样子:

可以看到,它的函数体由单个表达式构成,可以用这个表达式作为完整的函数体,并且去掉了花括号和 return 语句。如果这个函数写在花括号中,我们说这个函数有代码块体;如果它直接返回了一个表达式,它就有表达式体。

我们还可以进一步简化上述函数:

可以看到,我们省略了返回值类型。为什么这里可以省略返回值类型?作为一门静态类型语言,Kotlin 不是要求每个表达式都应该在编译期具有类型吗?事实上,每个变量和表达式都有类型,每个函数都有返回类型。但是对于表达式体函数来说,编译器会分析作为函数体的表达式,并把它的类型作为函数的返回类型,这种分析通常被称为类型推导。

变量

Kotlin 变量的定义是以关键字开始,然后是变量名称,然后是类型,然后是变量值:

当然如果变量已经初始化,我们可以省略类型:

和表达式体函数一样,如果不指定变量类型,编译器会分析初始化值,把它的类型作为变量的类型。如果变量没有初始化,需要显式的指明类型

关键字

val:不可变引用。使用 val 声明的变量不能在初始化之后再次赋值

var:可变引用。这种变量的值可以被改变。

尽管 val 引用自身是不可变的,但是它指向的对象可能是可变的,例如:

var 关键字允许变量改变自己的值,但是它的类型是改变不了的。例如下面代码会编译报错:

字符串模板

直接看下面的一种表达方式:

这种表达方式介绍了一个新特性:字符串模板。和许多脚本语言一样,Kotlin 让你可以在字符串字面值中引用局部变量,只需要在变量名称面前加上 $ 符号;如果需要使用 $ 字符,需要进行转义:

我们还可以使用更复杂的表达式,而不仅仅限于变量名称,这个时候需要使用花括号把表达式括起来:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180425G1EFXK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券