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函数来替代
并且由于无法限制他人使用,你还需要在函数中重写所有获取路径的函数以替代系统的函数
以上
以上是根据多年编码实践经验成文,并根据业务和经验变化不断修改。
分类:
MaxScript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步