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)
)

变量定义

变量必须显式申明globallcoal
原则上,不允许大量全局变量直接定义,如果可能应将其封装到独立命名空间,避免覆盖干扰
如果你希望快速的将存在大量全局变量的代码段进行整合,可使用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函数来替代
并且由于无法限制他人使用,你还需要在函数中重写所有获取路径的函数以替代系统的函数

以上

以上是根据多年编码实践经验成文,并根据业务和经验变化不断修改。

posted @ 2023-11-26 12:48  trykle  阅读(15)  评论(0编辑  收藏  举报