数据类型

对于人类来讲,看到 5 就知道这是数字,看到 Hello 就知道这是单词,那么数字单词这种概念在计算机中就被称为数据类型。

GDScript 中的基本数据类型有这些:

  • 整数int),例如 100100 都是整数
  • 小数float),例如 3.140.10.04.0 都是小数
  • 字符串String),用双引号或单引号包裹的内容是字符串,例如 "Hello, World!""我是字符串" 都是字符串
  • 布尔值bool),这种类型表示真假或对错,只有 truefalse 这两个值,对应

下面是使用时的例子:

var hp      = 100
var pos     = 4.2
var name    = "Rika"
var walking = false

[!tip] 代码格式

实际上变量名后面可以不写空格直接跟上等于号,我为了美观让这些等于号垂直对齐了,实际开发中根据自己喜好加空格即可。

不过,通常的编码规范都要求能加空格的地方至少加一个空格,毕竟密麻麻的字母看起来容易眼花。

其实大部分代码编辑器都有自动格式化代码的功能,可以一键美化代码,可惜目前的 Godot 还不支持(截止 4.0 rc2)

数据类型转换(自动)

我们看一段代码:

var a = 10
var b = 3.14
var c = a + b

首先我们定义了一个变量 a,它存放整数 10,又定义变量 b,存放小数 3.14,最后定义变量 c 存放 a 与 b 的和,那么问题来了,变量 c 中存放了一个什么类型的数字呢?

a + b 这个式子是 整数 + 小数 的形式,为了能够正确的到 13.14 这个数,他的结果显然是小数类型。

虽然整数参与了运算,但结果是小数,也就是说这其中自动进行了数据类型的转换,不过因为是自动进行的,所以我们通常不用在意。

这种自动类型转换在不同语言中有不同的名字,例如有的叫 隐式类型转换,有的叫 自动类型提升,这东西和计算机存储数据的原理有关,在这里就不过多讨论了。

为什么需要数据类型转换?

我们再看一段代码:

print(10 / 3)

思考,这会显示什么呢?

按道理讲这应该会显示 3.一堆3,但实际我们只能看到一个数字 3,这是因为这个 10 / 3 是整数运算,这种情况下得到的结果也必定是整数,因此就看不到小数点后面的内容了。

这时我们可以手动修改一下:

print(10 / 3.0)

对于 GDScript 来说,只要数字包含小数点,即便小数位全是 0,这个数也是小数类型,所以修改后的 print 就能正常显示 3.一堆3 了。并且这其中还对整数 10 进行了自动类型转换。

计算机存储空间有限,小数位数肯定也有限,实际显示的是 3.33333333333333,不会特别长。

如果想要运行看看效果,记得把这些代码都放到 _ready(): 这个方法体中再运行游戏。

数据类型转换(手动)

有自动类型转换,肯定也就有手动类型转换了,现在把刚刚的 10 / 3 代码稍作修改:

var a = 10
var b = 3
print(a / b)

这个的结果大家已经知道,就是 3,现在假设,变量 a 和 b 是从其他地方获取的值,这个值就是整数,不能通过添加小数点的方式让它变成小数。

于是需要我们手动进行类型转换了,它的语法格式如下:

<目标类型>(<被转换的值>)

其中目标类型可选如下:

  • int - 整数
  • float - 小数
  • bool - 布尔值
  • str - 字符串

我们需要把整数变成小数,所以目标类型就是 float,接着来修改 print 这一行:

print(float(a) / float(b)) # 只给一个变量加上 float 也行,另一个会自动转换类型

接着就能再次看到 3.一堆3 了。

[!tip] 四舍五入

int(1.9) 的结果是 1,也就是直接抛弃小数,如果想要四舍五入取整,可以改成 round(1.9),这样结果就是 2 了。

[!tip] 函数调用

你应该已经发现,float(XXX) 这种东西和 print(XXX) 的格式一摸一样,这种格式被称为方法调用,在后面方法章节会单独讲解。