第 3 课 · 第三部分 基础语法

变量与数据类型

先有一个能装东西的"格子",才谈得上判断和循环。

学习目标

预计用时:读课 40 分钟 + 上机 35 分钟 |  前置知识:第 1 课(概念)、第 2 课(界面:知道命令区、组装区、属性区,会切源代码视图) |  本课性质:语法课(认证必考,是后面判断、循环、数组的地基)

知识地图

前两课解决了"RPA 是什么"和"在哪里做"。从本课起真正开始"写字"——先学会造一个能装东西的变量,再认识它能装哪几种类型的东西,最后学会把值和运算符拼成表达式。判断、循环、数组,全都建立在今天的四样东西上。

本课在哪儿
第三部分 · 基础语法。是第 4 课(条件判断)与后续循环、数组的唯一地基——地基不牢,后面全塌。
重点
变量 = 有名字的格子;赋值两种写法;四种基础类型;& 拼接与 + 加法的分工。
难点
"动态类型"(格子能换着装不同东西)与"表达式运行时才算值"这两个抽象概念。
学完的标志
给你一句人话需求(比如"输出某人有几个苹果"),你能自己选出变量、选对类型、写对拼接符号。

承上启下:第 2 课你已经会新建流程块、从命令区拖命令、在属性区填参数。本课要填进属性区里的"值",开始有类型和规则了。学完本课,你才有资格进入第 4 课"让机器人根据条件走不同岔路"。

一、变量就是 Excel 里的一个格子

官方开发者指南用 Excel 来打这个比方,非常贴切:[1]

Excel 里 D2 这个格子有名字(D2)和内容(比如 261.54)。内容可以变,名字不变。你只要说"D2",就能拿到里面最新的值,也能往里塞新值。

变量 = 一个起了名字的格子。名字用来找它,值用来存东西。这个"存进去"的动作就叫赋值。

1.1 名字与值:两件不同的事

新手最常见的混乱,是把"名字"和"值"搅在一起。分开看就清楚了:

例子能不能变作用
名字数量、D2固定不变让你能叫出这个格子
值3、"小明"随时可换真正被程序和公式使用的内容

所以同一句 数量 = 数量 + 1 读起来是:"取出数量格子里现在的值,加 1,再写回数量这个格子。"名字没变,值变了。

1.2 赋值:为什么这一步这么关键

赋值就是把值放进格子的动作,写作 变量名 = 值。它是程序里最基础的"记忆"能力——机器人要记住刚才从网页复制到的金额、记住循环到第几遍了、记住用户名,全靠赋值。 没有变量,机器人就是一条只会"当下照做"的流水线,做完就忘,没法比较、没法循环。

为什么用"格子"而不是"盒子"来打比方?因为格子有一个重要特性:同一个格子可以换着放不同的东西(先放 3,再放"你好")。这正是"动态类型"的直观样子,下一节和第五节都会用到。

易错点:Excel 里改内容你直接敲进格子;程序里你必须用赋值语句去改。光在属性区或某处"看到"一个值不代表它被存进了变量——值要被写进变量名,才算真的记住了。

二、怎么创建一个变量

两种写法,指的是同一件事——一个在可视化视图做,一个在源代码视图做。

可视化视图 在命令区找到 基本命令 ▸ 变量赋值,拖进组装区,在属性区填:变量名 数量,值 3。
源代码视图(BotScript)
数量 = 3          // 直接赋值
Dim 数量 = 3      // 也可以先声明再赋值
Dim 数量          // 只声明,暂时不赋值(值为 Null)

第 2 课你已经知道"可视化视图和源代码视图是同一份东西"。所以上面两个 .demo 是同一件事的两种画法:你在属性区填的"变量名 / 值",切到源代码视图就会变成一行赋值代码。你可以用其中任意一种,另一种会自动同步。

2.1 命名规则(考试常考)

命名规则(考试常考):可以用英文字母、下划线、汉字,还可以用中文命名;首字符之外可以带数字;不区分大小写——abc、ABC、Abc 是同一个变量。推荐取有意义的名字(订单总额 好过 a1)。[2]

顺带认识"常量":和变量相对的是常量,用 Const 定义,定义后不能再改,且必须有初始值——Const e = 'Laiye' 合法,Const f 会出错。常量适合放"整个流程都不许变"的东西,比如固定的文件路径。初级考试了解即可。

三、四种基础类型

格子里可以放不同形式的东西,这就是"数据类型"。初级认证掌握这四种就够:[1]

数值型 数字,能加减乘除。3、2.5、261.54
字符串型 一段文字,用一对引号包起来。"小明"、'Laiye'
布尔型 只有两个值:True(真)或 False(假),不区分大小写。
空值型 表示"什么都没有",写作 Null,不区分大小写。
变量是一个有名字的格子;四种基础类型分别是数值型、字符串型、布尔型和空值型 变量 = 有名字的格子,类型决定能装什么 名字用来找它,值用来存东西;同一个格子可以换着装不同的东西。 变量 名字 数量 值 12 名字:固定不变 值:随时可换 数量 = 20 赋值 就像 Excel 的 D2:名字是 D2,值是 261.54。 改的是值,不是名字。 四种基础类型 数值型 3 · 2.5 · 261.54 字符串型 "小明" · 'Laiye' 布尔型 True / False 空值型 Null(什么都没有) 注意:3 和 "3" 不是同一种东西。
图 1 · 变量是一个有名字的格子;四种基础类型决定格子里能装什么、能做什么运算。

3.1 逐个人话解释:什么场合用哪种

类型生活里的对应物典型用途怎么判断它
数值型身高、金额、数量要参与计算(求和、比大小)裸写数字,别加引号
字符串型姓名、地址、一句话展示、拼接、发出去被一对引号包住
布尔型开关的"开 / 关"记录"成没成功""满没满足条件"只有 True / False
空值型一个还没填的空白格子表示"暂时没值""查无此项"写作 Null

易错点:3 和 "3" 不是同一种东西!前者是能算数的数值,后者是被引号包住的文字。把文字当数字去加,或者把数字当文字去拼,都可能出错或得到意外结果——这正是第六节"类型转换"要解决的问题。

还有复合型(数组、字典),那是"格子里再放一排格子",非常有用——我们下一节专门讲,这里先知道有这么回事。

字符串里的转义:\n 是换行,\t 是制表符。想要字符串本身包含引号,用 \"。

四、运算符:算数和拼接

把值和变量用运算符连起来,就是一个表达式,它的值会在运行时才算出来。[2]

运算符含义例子
+ - * /加、减、乘、除(数值)2 + 3 → 5
&连接字符串(不是 +)"小明" & "你好" → "小明你好"
=单独成句时是赋值;在表达式里是判断相等a = 3 是赋值;If a = 3 是判断
<>不相等a <> 3

4.1 一个符号,两种身份:=

= 是全书最容易看走眼的符号。判断它的身份很简单——看它站在哪: 单独成句(一行只有它)时是"把右边的东西放进左边的格子",即赋值;出现在条件或表达式里时是"问两边是否相等",即判断。第 4 课写 If a = 3 时,它就在问"a 是不是等于 3"。

4.2 表达式:运行时才算值

2 + 3 看起来很简单,但它在代码里不是"5"这个字面结果,而是一张待计算的单子:等你真正运行到这一句,机器才把 2 和 3 加起来。好处是——只要写 数量 + 1,不管 数量 现在是几,运行时都会按当下的值来算。这就是为什么同一个流程能处理不同的数据。

最容易记错的一点:字符串拼接用 &,不是 +。这是 BotScript 的明确设计,考试和写代码都用得上。

五、读一个三行小程序

源代码视图
Dim 姓名 = "小明"                              // ① 把文字放进"姓名"格子
Dim 数量 = 3                                   // ② 把数字放进"数量"格子
数量 = 数量 + 1                                // ③ 取出、加一、再存回
输出调试信息(姓名 & " 有 " & 数量 & " 个苹果")   // ④ 拼接后输出

逐行读:

  1. 把文字 小明 放进变量 姓名。
  2. 把数字 3 放进变量 数量。
  3. 取出 数量(3),加 1 得 4,再存回 数量。变量就此变成 4。
  4. 把几段文字拼起来输出,结果:小明 有 4 个苹果。

第 ③ 行为什么能"自己加自己"?因为等号右边会先算出一个值(3 + 1 = 4),再把这个结果写回左边的格子。记住顺序:先算右边,再存左边。这个模式(x = x + 1)以后在循环里数次数时会反复出现,务必看熟。

动态类型:BotScript 的变量类型会跟着值变。上一行 a 还是数字,下一行写成 a = "你好",它就变成字符串了,不需要事先声明类型。[2]

六、类型转换:让数字和文字拼得起来

如果拼接时数字没被自动转成文字,可用基本命令 转为文字数据 先转换,再拼接。

命令作用什么时候用
转为文字数据把数值等转成字符串要把数字拼进一句话里时
转为整数数据把文本等转成整数从界面/表格读来的"数字"其实是文字,要参与计算时
源代码视图
Dim 数量 = 3
Dim 文字 = 转为文字数据(数量)          // 3 变成 "3"
输出调试信息("共 " & 文字 & " 个")     // 拼接安全,结果为:共 3 个
Dim 单价 = 转为整数数据("12")          // 文字 "12" 变成整数 12,可参与计算

(说明:可视化视图里这两条是命令块,按命令面板填写属性即可;上面的括号写法是它们在源代码视图里的函数形式,具体以你本机版本的命令面板为准。)

易错点:主动转换,比指望机器"帮我猜"更稳妥。当你不确定一个值到底是什么类型时,先用转换命令把它变成你需要的类型,再拿去计算或拼接——这样报错会更少,逻辑也更清楚。

完整速查见 参考页:BotScript 变量与类型速查。

如果你用的是 Python 流程块,同一个意思这样写——本课的知识点(变量、类型、运算符)一个字都不用改,只是写法变了:

要做的BotScript(本课程主线)Python
直接赋值数量 = 3数量 = 3(一样)
先声明再赋值Dim 数量 = 3不需要 Dim,赋值即声明
拼接字符串"共 " & 数量 & " 个""共 " + str(数量) + " 个"
转成文字转为文字数据(数量)str(数量)
转成整数转为整数数据("12")int("12")
输出输出调试信息(数量)print(数量)

最关键的是"拼接"那一行。BotScript 的 & 会自动把数字变成文字, 所以 "共 " & 3 没问题;Python 的 + 要求两边都是字符串, "共 " + 3 会直接失败。官方说的"新引擎不支持字符串与数字的直接连接"就是指这个—— 两种写法的差别不在"能不能做",而在"要不要你亲手转"。

本课小结

必记要点

变量 有名字的格子 赋值 把值放进格子 声明 只造格子先不装值 数值型 能参与计算的数 字符串型 引号包住的文字 布尔型 真或假 空值型 Null,什么都没有 动态类型 类型随值而变

自测

不看上面,凭记忆作答。答错不要紧,解析会告诉你为什么。

上机实践(回到 Windows)

任务 A(造格子,8 分钟):新建一个流程块,用命令区的 变量赋值 建两个变量:姓名(填你自己的名字,记得是文字)、年龄(填一个数字,不要加引号)。每加一条,就点一下右边属性区,确认"变量名 / 值"两栏都填对了。期望结果:组装区出现两条赋值命令。

任务 B(拼一句话,8 分钟):再加一条 输出调试信息,输出内容填 姓名 & "今年" & 年龄 & "岁"(属性区里可以用 fx 选变量,不用手打变量名)。单独运行这个流程块。期望结果:输出面板出现"你的名字今年N岁"。若年龄没拼进去,见任务 E。

任务 C(看代码,5 分钟):切换到源代码视图,看看这段代码实际长什么样,把它发给我。你应该会看到 Dim、&、TracePrint 这些东西。对照一下:可视化视图里的两条赋值,在代码里是不是两行 Dim ... = ...?

任务 D(故意制造一个错误,8 分钟):本课重点互动,请认真做并记录。回到属性区,故意把拼接写成 姓名 + 年龄,运行,看报什么错。请把报错信息的第一行原文发我。改回 & 后确认恢复正常——认识报错是认证实操的必备能力。

任务 E(体验动态类型,6 分钟):把 年龄 赋的值从数字 18 改成文字 "18"(加上引号),再运行。观察输出和之前有什么不同;如果报错或结果不对,就改用 转为文字数据 再拼一次。把你的发现发我——这正是"动态类型"和"类型转换"在真实操作里的样子。

任务 F(自由发挥,5 分钟):再加一个布尔变量 已成年,赋值为 True,试着用 & 把它也拼进输出那句话里。拼不进去也没关系,记下你看到的现象,第 4 课条件判断会用到布尔值。

精读一手来源

本节首选:《开发者指南 · 附录:编程基础知识》(专为零基础写的,10 分钟)。重点读"变量"和"数据类型"两处,看看官方的 Excel 比方和本课是不是一致。 想深入语法细节,读 《BotScript 语言参考》 的"变量、常量和数据类型""运算符和表达式"两节——重点找三样:命名规则、& 与 + 的分工、动态类型的说明。