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" 用双引号或单引号包起来
数字 423.14 整数和小数都支持
布尔值 truefalse 注意是小写
数组 ["a", "b", "c"] 用方括号,元素用逗号隔开
对象 {key: "value"} 键值对,类似 JSON
我的小技巧: 变量名尽量用驼峰命名法,比如 myConfigName。我之前在项目里用过下划线,结果跟系统内置变量搞混了,排查了半天。嗯,从那以后我就只用驼峰了。

4.2 条件判断

条件判断就是让脚本学会「看情况办事」。你想想看,如果每个配置项都无脑执行,那跟手动操作有啥区别?

基本结构是 ifelse ifelse。语法很直观:

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("节点不存在,开始创建")
}
我的习惯: 函数名用动词开头,比如 getConfigsetValuevalidateInput。这样一看就知道这个函数是干嘛的。你想想看,要是看到 dataProcessprocessData,哪个更顺眼?

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)

你看,变量、条件判断、循环、函数,全用上了。这就是脚本自动化的核心套路。

好了,这一章的内容就到这。你先把这几个基础语法练熟,下一章咱们开始玩真的——读写配置文件。