GDScript语法概述

GDscript是高级面向对象指令式动态语言,基于缩进语法,类似python。

缩进语法意味着必须保证正确的缩进,并且由于没有语句截止符以及代码区块符号,必须保证以下原则:

  • 没有行结束符意味着换行即是该行结束,所以当需要语句需要多行显示时必须采用连接符
  • 代码区块内代码必须采用正确缩进
  • 对于空函数必须使用`pass`作为结束符
  • 注释语法

    # 注释

    标识符规则

    标识符由字母、数字、\_组成,并且不能数字开头,区分大小写

    关键字

    常量类

  • 1.`PI` 圆周率
  • 2.`TAU` TAU
  • 3.`INF` 无穷
  • 4.`NAN` 非数字
  • 其他关键字

  • break、continue、return
  • pass 空语句,多用于无返回值的空函数
  • is 检测变量类型,`true`/`false`
  • in 检测字符串/数组/字典/节点是否包含指定元素,for循环中遍历集合
  • as 转换成指定类型
  • signal 信号
  • func 函数
  • const 定义常量
  • enum 定义枚举
  • var 定义变量
  • preload 预加载
  • await 等待信号/协程
  • yield 协程
  • assert 断言
  • 控制语句类

    1.条件语句

                            
                              if (expression):
                                statement(s)
                              elif (expression):
                                statement(s)
                              else:
                                statement(s)
                            
                          

    三元if表达式

    三元if表达式,如果满足`expression`,则使用`value1`,否则使用`value2`:

                            
                              (value1) if (expression) else (value2)
                            
                          

    嵌套三元if,如果满足`expression1`则使用`value1`,如果满足`expression2`则使用`value2`,依次类推

                            
                              value = value1 if (expression1)
                              else value2 if(expression2)
                              else value3 if(expression3)
                              else value4
                            
                          

    2.循环语句

    与其他语言相同,存在`break``continue`中断或者跳过循环

                            
                              *   `while`
                                while (expression):
                                  statement(s)
    
                              *   `for`
                                  for value in target :
                            
                          
  • 如果target是`字符串`,则循环变量值为每个字符
  • 如果target是`整数`/`浮点数`,则循环变量值会按照步长为1的方式由0递增到target,并且浮点数会舍去小数点进行循环
  • 如果target是`负数`,循环不会执行
  • 如果targetg是`数组`,则循环变量值为数组中元素
  • 如果targetg是`字典`,则循环变量值为字典的key,获取字典值需要通过`target[value]`获取
  • 3.匹配语句

                            
                              `match`
    
                              match expression:
                                pattern(s):
                                  block
                                pattern(s):
                                  block
                                  <...>
                                _:
                                    block
                            
                          

    与switch区别如下:

  • `match`替换`switch`
  • 删除`case`、`break`
  • `default` 由 `_` 替换
  • 当匹配到第一个条件相符时,自动跳出匹配,不会继续执行剩余判断
  • 匹配模式有以下几种:

  • 字面量模式,即值匹配
  • 表达式模式
  • 绑定模式,另一种型式的通配符匹配,将表达式的值复制给所定义的变量
  •                       
                            match expression:
                              pattern(s):
                                block
                              var val : 
                                  block
                          
                        
    • 数组模式,首先匹配数组长度,之后再进行元素匹配,元素匹配有以下几种模式:
      • 1.全元素匹配,即数组中所有元素进行匹配,只有全部相同才会执行该分支
      • 2.指定位置元素匹配,数组长度相同时继续匹配指定位置,只要指定位置元素相同该分支就会执行,对于其他元素可使用`_`做占位符,该模式可将元素赋值给新的变量
      • 3.模糊匹配,等同于通配符,无视数组长度元素进行匹配,`..`通配符必须位于数组中最后位置,该模式同样可以为数组指定位置元素进行匹配,并且将值分配给新的变量
    • 字典模式,与数组模式类似,同样首先匹配字典大小,再匹配元素,如果没有指定key对应的值,则值会匹配key。`..`定义开放字典,必须位于字典最后
    • 多重模式,多种匹配混合一起,以`,`分割

    模式保护

                          
                            match expression
                              pattern(s) when guard expression:
                              block>
                          
                        

    match中只会执行分支中的一条,当一个分支需要进行细化时,可使用模式保护来进行子分支的匹配

    运算符

    • `x ** y` x的y幂次方,`$x^y$`
    • `~x` 取反
    • `is` 类型检查
    • `in` `no in` 包含检查
    • 逻辑运算符可直接使用英文,即 `and = &&` `or = ||` `not = !`
    • `as` 类型转换
    • `+ - * /` 常规运算符,***注意:如果`/`参与运算的均为整数,则为整数除法,如果需要浮点数,需要参与运算的其中之一是浮点数***
    • `%` 只对整数进行取余计算,浮点数趋于采用`fmod()`函数