Skip to content

变量

变量,顾名思义是可以变的量。在编程中变量是一种很重要的东西,它也非常好理解。

理解变量

我们可以把变量理解成一个个盒子,盒子上写着字就是它的名字,我们可以通过名字来找到这个盒子。

提示

为了确保每次你都能找到你想要的那个盒子,不能有同名的盒子哦。

这些盒子里装着东西,也就是变量的值。你可以无数次打开一个盒子,看到里面的东西,也就是访问变量并获取值。变量可变,所以里面装的东西可以随时变化。那么怎么做呢?继续看下去。

变量命名

首先我们要给变量取个名字。这个名字要尽量简单易懂,但不能追求短而导致它更难懂。 变量命名并不是完全随意的,需要满足一些要求:

  • 以英文开头,不包含符号
  • 不使用关键字

提示

关键字是一些Godot预先定义好的有含义的词或者符号,这里有一个关键词列表(这个页面不在目录中)可供参考。

  • 遵循风格指南[1]
    • 所有字母小写
    • 不止一个单词时,用下划线把单词隔开(比如godot_script
    • 不要使用英文、数字、下划线以外的字符(比如中文,也尽量不要用拼音)

在程序中写到变量名字时,除了赋值,大部分时候指的都是它的值而非它本身

提示

变量的定义方法:var 变量名 = 值。例如var x = 0就定义了一个名为x值为0的变量。 这个语句的含义是把等号左边变量的值设成等号右边,等号右边也可以是别的变量等等。这个过程叫“赋值”。

基本类型

为了装不同的东西,盒子也有不同的“型号”,也就是类型。以下是几种基本的类型

整型(int)

整型就是最普通的整数。

gdscript
var a = 114514
var b = 1919810
var a = 114514
var b = 1919810

浮点数(float)

浮点数指的是小数。对于浮点数来说至少要有一位小数,即使是.0也不能省略哦。

gdscript
var c = 1145.14
var d = 191981.0
var c = 1145.14
var d = 191981.0

字符串(String)

字符串指的是一串自负,包括中文、英文、数字等等,甚至还包括一些emoji😄。
字符串需要用引号包裹,单双引号都可以而且没有任何区别。

gdscript
var e = "114514"
var f = '114514'
var e = "114514"
var f = '114514'

加号对于字符串也有作用,它可以把两个字符串拼接起来。

gdscript
var g = "114514"+"1919810" #1145141919810
var g = "114514"+"1919810" #1145141919810

提示

只有加号可以,减、乘、除这些都不能!

转义

你可能会想到一种情况,如果一个字符串里有井号或者引号等等这些符号怎么办?这时候我们就需要用到转义。
转义指的是用特定的字符代替一些有特殊含义的字符。比如在字符串中需要"时就用\"代替,此时反斜杠\会被忽略,字符串中就会有一个双引号。同理,单引号用\'代替,回车用\n代替。而需要反斜杠本身时则用两个反斜杠\\

提示

字符串中有#时并不是简单地加上反斜杠,而是要用\u0023

布尔型(bool)

布尔型光看名字让人觉得摸不着头脑。它是一种只有真和假两种值(编写程序时表述为truefalse)的类型。 一些常见的运算符结果就是布尔型的。

gdscript
x == y #x与y相等
x != y #x与y不相等
#下面的以此类推
x < y
x > y
x <= y
x >= y
x == y #x与y相等
x != y #x与y不相等
#下面的以此类推
x < y
x > y
x <= y
x >= y

例如1<2 "bool"=='bool' 'bool'!='Bool'这些表达式结果都会是true,而6>=8``9==3的结果是false

其他

GDScript中还有一些特殊的类型,简单了解即可。

null[2]

盒子里没有放东西时,打开盒子一看,会发现里面是空的。类比一下,如果变量没有值,你却还要问它的值,那结果就会是null

NAN[3]

NANNot a Number的意思。在0做除数时,结果会是NAN。

说明

它表面与实际不同,但不必深究,这样做没有意义。

需要注意的是NAN并不等于它本身,也就是说NAN == NAN的结果是false。

提示

如果你想判断一个变量是不是nan,那你需要使用is_nan函数[4],比如is_nan(x)返回true则说明x是nan。

复合类型

提示

内置的复合类型有很多,只介绍常用的。

这些复合类型是由基本的数据类型组成的,但它能更简便地实现一些功能。至于他们具体有什么用,等你用到了就知道了。

数组(Array)

我们还是把变量比作盒子,那数组就是一个更大一点的盒子。有若干个值在里面排成一条队,每个值都被称为一个对象,对象可以是任何类型。当需要其中某个对象的值时,只需要提供它的位置(是第几个)就可以了。

提示

为什么这里说不说数组里装的是变量呢?因为它们只有值没有名字,也不是可变的(修改数组时实质是换了另一个值而不是修改了变量对应的值)。

gdscript
var h = ["一", 2, 3, "四"]
var h = ["一", 2, 3, "四"]

要取数组中的对象,我们使用中括号并在里面写数字,数字被称为索引。计算机世界中数数是从0开始数的,所以第一个要写0,第二个写1,第n个写n-1。例如这里h[0]的结果是一,h[1]的结果就会是2而非一。
索引还有一种写法就是负数,-1代表最后一个,-2代表倒数第二个,以此类推。

想一想,方括号里除了单纯的数字还能写什么呢

可以是表达式,例如h[11*(45+1)*4]。
整型的变量也行哦,比如h[a]这样也是可以实现你想要的效果的。

数组中的对象可读也可写,想修改数组中对象的值也需要用索引的方式。

gdscript
h[1] = "two"
h[1] = "two"

索引不能大于数组中值的数量。如果想要在数组末尾添加一个对象,那么可以试试这两种方法。

gdscript
h = h + [5]
h.append(5)
h = h + [5]
h.append(5)

这两种操作都可以把h变成["一", 2, 3, "四", 5]

多维数组

前面说到对象可以是任何类型,那么如果数组中的对象还是数组呢?这就是多维数组。

gdscript
var i = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
var i = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

我们叫它多维数组,因为它有多个维度。这里展示的是一个二维的数组,不断嵌套下去就可以有更多的维度。
不够直观?

gdscript
var i =[[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]]
var i =[[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]]

这样更容易看出来,i是一个三行三列的二维数组。

如何取得8的值?
gdscript
i[2][1]
i[2][1]

字典(Dictionary)

在有的场景下,想在一排盒子中找到想要的那个,仅凭序号不够方便,这时候我们可以在每个盒子上写上名字,数组就变成了字典。

gdscript
var j ={"键": "值"}
var j ={"键": "值"}

字典由一个个键值对组成,每个键只对应唯一的值,通过键可以获取值,例如j["键"]的结果为
与数组相同,我们也可以以相同的方式赋值,而且键和值都可以用变量名来代替。
而与数组不同的是,数组不能使用不存在的索引,而字典可以使用不存在的键,从而进行赋值。比如j[a]=b那么j就会变成{"键": "值", 114514: 1919810}

值的类型可以是字典吗?

当然,还可以一直嵌套下去。


  1. GDScript style guide ↩︎

  2. null ↩︎

  3. NAN ↩︎

  4. is_nan ↩︎