一种GDScript语言符号的命名策略
GDScript介绍
GDScript是一种godot游戏引擎所支持的自制的python-like脚本语言,学习成本低,与引擎的功能结合完美,是godot引擎本身“All-in-one”理念所不必可少的组成部分。 在godot项目工程中,由GDScript脚本的后缀名为.gd
。
GDScript的几个设计决策
gdscript设计之初便融合于面向对象设计。一个.gd
脚本文件即为一个class,如果这个文件依附于某个godot节点,那它便是继承自那个节点类型的派生类。这种设计方式也比较完美的避开了oop程序设计的初学者滥用global变量的风险。Godot依旧设计了Autoload
这种方式来的提供那些生命周期与程序一样长的对象实例的访问。
即使是Autoload
也无法阻止任何人破坏封装性
然而,gdscript语言不设置任何access modifier
(or access specifier
). 在这里,我们无法从语言语法规则上指定成员的是否公开还是私有,是否受保护。 类的设计者创建了诸多私有成员,只是因为其中的某些没有设置setter/getter就被其他人(或者几个月后的自己)随意访问的情况几乎无法避免。对于成员函数而言,更是毫无任何办法进行保护。这个小节的标题也正是其中一个后果。
利用命名来表征自己的设计意图 (2018-08-12更新)
因此,在我的项目中,采用了如下的命名方式来表现设计语义。在语法上没有约束力,只是为了表达更多的语义信息。
_
godot内置函数的前缀,如果在你的类中出现了这样的函数,便是进行了一次overwrite
,相当于c++中的virtual关键字,java中的默认函数覆写(overwrite)。__
双下划线,表明私有,成员方法适用。- 节点名称采用首字大写型CamelCase
- 成员函数名称用下划线风格,全小写,除了其中出现的节点名
- 成员变量均视为私有,公有变量用接口对象替代。
- 常数变量名全大写
- export变量全部大写,不进行运行时修改。
- 所有export变量均不以
__
开头
后续效果观察 (2018-08-12更新)
- 对于private意图的变量而言,
__
双下划线显得有些繁琐。如果约定没有setget的变量均为private的话,似乎可以简化规则。 - 对于public意图的变量,从设计角度看应该已经视作接口,视作接口不妨额外实例化一个结节,利用新节点的成员函数访问修改。这样似乎setget也可以简化。(有待观察验证)
暂无关于此日志的评论。