数据类型
对于人类来讲,看到 5
就知道这是数字,看到 Hello
就知道这是单词,那么数字和单词这种概念在计算机中就被称为数据类型。
GDScript 中的基本数据类型有这些:
- 整数(
int
),例如100
、10
、0
都是整数 - 小数(
float
),例如3.14
、0.1
、0.0
、4.0
都是小数 - 字符串(
String
),用双引号或单引号包裹的内容是字符串,例如"Hello, World!"
、"我是字符串"
都是字符串 - 布尔值(
bool
),这种类型表示真假或对错,只有true
和false
这两个值,对应真
和假
下面是使用时的例子:
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)
的格式一摸一样,这种格式被称为方法调用,在后面方法章节会单独讲解。