4、脚本基础语法速览:变量与数据类型、条件判断、循环结构、函数定义与调用
好,咱们直接进入正题。这一章我打算带你快速过一遍 DaVinci Config 脚本的核心语法。别担心,它比 Python 还简单,你花 20 分钟就能上手。
我个人习惯把脚本语法分成四块来记:变量与数据类型、条件判断、循环结构、函数定义与调用。说白了,你把这四块拿捏住,80% 的自动化配置场景都能搞定。
4.1 变量与数据类型
脚本里的变量,你可以把它想象成一个贴了标签的盒子。你把数据放进去,然后通过标签来拿它。
定义变量很简单,直接用 var 关键字就行。我刚开始写的时候,老想着要声明类型,其实完全不用。
var myName = "DaVinci Config"
var version = 4.5
var isReady = true
var items = ["节点1", "节点2", "节点3"]
你看,字符串、数字、布尔值、数组,就这么直接写。DaVinci Config 脚本是动态类型的,你给变量赋什么值,它就是什么类型。
常用的数据类型有这些:
| 类型 | 示例 | 说明 |
|---|---|---|
| 字符串 | "hello" |
用双引号或单引号包起来 |
| 数字 | 42 或 3.14 |
整数和小数都支持 |
| 布尔值 | true 或 false |
注意是小写 |
| 数组 | ["a", "b", "c"] |
用方括号,元素用逗号隔开 |
| 对象 | {key: "value"} |
键值对,类似 JSON |
myConfigName。我之前在项目里用过下划线,结果跟系统内置变量搞混了,排查了半天。嗯,从那以后我就只用驼峰了。
4.2 条件判断
条件判断就是让脚本学会「看情况办事」。你想想看,如果每个配置项都无脑执行,那跟手动操作有啥区别?
基本结构是 if、else if、else。语法很直观:
var score = 85
if (score >= 90) {
// 优秀
log("等级:A")
} else if (score >= 80) {
// 良好
log("等级:B")
} else {
// 一般
log("等级:C")
}
这里要注意一点:条件表达式的结果必须是布尔值。我见过有人写成 if (score),这在 JavaScript 里能跑,但在 DaVinci Config 脚本里会报错。你得写成 if (score != null) 才行。
==,结果死活不成立。后来发现 DaVinci Config 脚本里字符串比较要用 equals() 方法。比如 if (name.equals("admin"))。
4.3 循环结构
循环这东西,说白了就是让脚本帮你干重复的活。你手动配 100 个节点?手都酸了。用循环,一行代码搞定。
DaVinci Config 脚本支持两种循环:for 循环和 while 循环。我个人更常用 for,因为它更直观。
// for 循环:遍历数组
var nodes = ["节点A", "节点B", "节点C"]
for (var i = 0; i < nodes.length; i++) {
log("正在配置:" + nodes[i])
}
// while 循环:条件控制
var count = 0
while (count < 5) {
log("第 " + count + " 次尝试")
count++
}
你可能会问:什么时候用 for,什么时候用 while?我的经验是:知道要循环多少次就用 for,不知道次数、靠条件退出就用 while。
比如你要遍历一个配置文件里的所有节点,节点数量是确定的,那就用 for。如果你要一直重试直到某个操作成功,那就用 while。
i++,脚本直接卡死,把整个 DaVinci Config 都拖崩了。重启软件才恢复。
4.4 函数定义与调用
函数,就是把一段逻辑打包起来,给它起个名字。以后你想用这段逻辑,直接喊名字就行。
定义函数用 function 关键字:
function greet(name) {
return "你好," + name + "!"
}
// 调用函数
var message = greet("小明")
log(message) // 输出:你好,小明!
函数可以有参数,也可以没有。可以有返回值,也可以没有。这都看你的需求。
我一般在写自动化配置脚本时,会把常用的操作封装成函数。比如「检查节点是否存在」、「获取配置值」、「写入日志」等等。这样主流程看起来特别清爽。
function checkNodeExists(nodeName) {
var allNodes = getNodes()
for (var i = 0; i < allNodes.length; i++) {
if (allNodes[i].name.equals(nodeName)) {
return true
}
}
return false
}
// 使用
if (checkNodeExists("主节点")) {
log("节点已存在,跳过创建")
} else {
log("节点不存在,开始创建")
}
getConfig、setValue、validateInput。这样一看就知道这个函数是干嘛的。你想想看,要是看到 dataProcess 和 processData,哪个更顺眼?
4.5 综合小案例
光说不练假把式。咱们来个小案例,把今天学的都用上。
假设你要批量配置 10 个节点,每个节点需要检查是否已经存在,如果不存在就创建,并记录日志。
function configureNodes(nodeNames) {
for (var i = 0; i < nodeNames.length; i++) {
var name = nodeNames[i]
if (checkNodeExists(name)) {
log("跳过:" + name + "(已存在)")
} else {
createNode(name)
log("创建成功:" + name)
}
}
}
var nodeList = ["节点1", "节点2", "节点3", "节点4", "节点5"]
configureNodes(nodeList)
你看,变量、条件判断、循环、函数,全用上了。这就是脚本自动化的核心套路。
好了,这一章的内容就到这。你先把这几个基础语法练熟,下一章咱们开始玩真的——读写配置文件。