maxscript trykle 版代码规范
v2024.1
实例封装
使用 struct 定义实例结构
- 结构名以小写开头
- 私有成员名以
_
开头,如有必要可加上private
- 访问内部成员时必须使用
this.
来访问
struct trykleInfo
(
_age
,fn getAge =
(
return this._age
)
,fn test =
(
print "test"
)
)
myInfo = trykleInfo()
禁止将实例结构中的函数以静态
函数的方式使用,比如
trykleInfo.test()
静态封装
使用 struct 定义静态结构
- 结构名大写开头,并在末尾同名覆盖定义,使其无法继续创建实例
struct TrykleHelper
(
fn debugPrint msg =
(
print ("debug: " + msg as string)
)
)
TrykleHelper= TrykleHelper()
TrykleHelper.debugPrint "test"
使用rollout 定义静态类型
这种形式非常便于将函数式代码整合到一起,只需要注意调用顺序即可
rollout TrykleHelper ""
(
fn debugPrint msg =
(
print ("debug: " + msg as string)
)
)
TrykleHelper.debugPrint "test"
模块封装
上述使用struct或rollout定义的功能模块,一个模块使用一个文件编写,文件名应与模块名一致
判断
在布尔类型判断时使用明确判断,因为变量的类型不一定明确
在其他类型判断时,如有underfind干扰,应在函数和调用处进行注释说明
--不建议
if isCancel do xxx
if not isCancel do xxx
--建议
if isCancel == true do xxx
if isCancel == false do xxx
注释
需要导出api的函数或成员的注释以--[[
开头,便于解析器识别导出api
--[[测试打印的函数
--msg 传入的消息参数
fn debugPrint msg =
(
print ("debug: " + msg as string)
)
变量定义
变量必须显式申明global
或lcoal
原则上,不允许大量全局变量直接定义,如果可能应将其封装到独立命名空间,避免覆盖干扰
如果你希望快速的将存在大量全局变量的代码段进行整合,可使用rollout将全局变量封装到lcoal段
顶级全局变量名,大写开头驼峰
global TrykleBridgeEntry
局部变量,小驼峰
给出默认值,以便确定类型,如无法给出默认值,应注释说明
(
local infoSize = 0
)
结构体中的弱私有变量,下划线开头小驼峰
给出默认值,以便确定类型,如无法给出默认值,应注释说明
(
,_infoSize = 0
)
函数
函数结尾必须使用return显式返回值
(性能敏感场景除外)
--不建议
fn calcDistance p1 p2 =
(
if p1 > p2 then p1 else p2
)
--建议
fn calcDistance p1 p2 =
(
local result = if p1 > p2 then p1 else p2
return result
)
自动循环
在maxscript中使用mapped标记的函数可以自动完成集合的循环
在这个示例中,我们无法正确获取返回值
在某些情况下,可能会造成不确定的性能问题
不要使用
mapped fn getTrykleObjsInfo obj =
(
local result = #()
append result obj.pos
return result
)
禁止使用$
禁止使用 $
作为选择集使用
它表达式意义总是不明确:无,1个,多个集合
除非当前条件下已限定一个物体,否则使用 selection 来替代
禁止在路径中使用$内置变量,比如 @"$image\1.jpg"
它将导致一些路径上解析的问题,使用getdir函数来替代
并且由于无法限制他人使用,你还需要在函数中重写所有获取路径的函数以替代系统的函数
以上
以上是根据多年编码实践经验成文,并根据业务和经验变化不断修改。