4、变量与数据类型:UiPath中的变量类型(String、Int32、Boolean、DataTable)、变量作用域与命名规范
好,咱们开始聊变量。说实话,变量这东西,是RPA机器人的「血液」。没有变量,你的机器人就是个空壳子,啥也干不了。我刚开始带团队的时候,发现很多新人上来就写死数据,结果流程一改,全盘重来。嗯,这其实是个大坑。
4.1 变量是什么?说白了就是个「盒子」
你想想看,机器人要处理数据,总得有个地方暂存吧?变量就是干这个的。它像个小盒子,你往里面放字符串、数字、真假值,甚至一整张表格。UiPath里,每个变量都有个「类型」,决定了它能装什么。
我个人习惯,在开始写流程之前,先把所有变量列出来。就像做饭前先备菜,省得炒到一半发现缺盐。
4.2 核心变量类型详解
4.2.1 String(字符串)
这是最常用的类型。文本、姓名、地址、报错信息……全是字符串。在UiPath里,字符串用双引号包起来。
"你好,世界"
"订单号:ORD-2024-001"
"" // 空字符串,不是null
我在项目中遇到过一个问题:从Excel读出来的数字,UiPath默认当成字符串处理。结果做数学运算时直接报错。所以,字符串就是字符串,别指望它自己会算数。
4.2.2 Int32(整数)
整数类型,范围从-2,147,483,648 到 2,147,483,647。够用吗?绝大多数场景够了。比如循环次数、行号、数量统计。
Dim count As Int32 = 100
Dim rowIndex As Int32 = 0
避坑指南:我曾经在读取Excel行数时,直接用Int32存了结果。结果那张表有30万行……嗯,溢出了。后来我改成Int64(Long)才搞定。所以,如果你不确定数据量,用Long更保险。
4.2.3 Boolean(布尔值)
只有两个值:True 和 False。用来做条件判断,比如「文件是否存在?」、「流程是否成功?」。
Dim isFileExists As Boolean = False
Dim isProcessSuccess As Boolean = True
你想想看,布尔值其实特别适合做「开关」。我在写异常处理时,经常用一个布尔变量来标记「是否重试过」,避免死循环。
4.2.4 DataTable(数据表)
这个厉害了。DataTable可以理解成内存里的Excel表格,有行有列。从Excel、CSV、数据库读出来的数据,通常都存成DataTable。
Dim dt As DataTable = New DataTable()
' 然后通过「读取范围」活动填充数据
我个人习惯,拿到DataTable后第一件事:检查行数和列数。因为空表或者列名不对,后面所有操作都会崩。我曾经因为没检查空表,导致机器人跑了半小时,最后报了个「索引超出范围」……那叫一个尴尬。
4.3 变量作用域:你的变量能管多宽?
作用域,说白了就是变量的「活动范围」。UiPath里,作用域从窄到宽分为四种:
| 作用域 | 范围 | 使用场景 |
|---|---|---|
| 序列(Sequence) | 仅当前序列 | 临时变量,用完即弃 |
| 流程(Flowchart) | 整个流程图 | 跨步骤共享数据 |
| 状态机(State Machine) | 整个状态机 | 复杂流程的状态管理 |
| 全局(Global) | 整个项目 | 配置参数、常量 |
我建议:能用局部变量就别用全局。为什么呢?因为全局变量多了,你根本搞不清哪个活动改了它。调试起来像大海捞针。我见过一个项目,全局变量用了30多个,最后没人敢动,一动就崩。
4.4 命名规范:好名字胜过好注释
说实话,我早期写代码也不注意命名。变量叫a、b、c,结果两周后自己都看不懂。后来吃了亏,才老老实实按规范来。
UiPath社区推荐匈牙利命名法,但我觉得不用那么死板。记住几个原则就行:
- 有意义: 别用temp、data这种。用customerName、orderCount。
- 前缀标识类型: strName、intCount、blnIsValid、dtOrders。
- 驼峰命名: 首字母小写,后续单词首字母大写。比如isFileExists。
- 布尔变量用is/has/can开头: isReady、hasError、canRetry。
' 好的命名
Dim strCustomerName As String = "张三"
Dim intOrderCount As Int32 = 10
Dim blnIsProcessed As Boolean = False
Dim dtSalesData As DataTable
' 差的命名
Dim a As String = "张三"
Dim b As Int32 = 10
Dim c As Boolean = False
你想想看,如果代码里全是a、b、c,三个月后你自己回来改,是不是得骂娘?
4.5 实战避坑指南
最后,分享几个我踩过的坑:
- 类型转换: 从字符串转数字,一定要用CInt()或者Convert.ToInt32(),别直接赋值。我曾经因为字符串里有个空格,转换失败,流程卡了半小时。
- DataTable的默认值: 新建的DataTable是空的,不是null。所以判断时用dt.Rows.Count > 0,而不是dt IsNot Nothing。
- 布尔变量的三态: 布尔只有True和False,但有些场景需要「未设置」状态。这时候用Nullable(Of Boolean),也就是Boolean?,可以表示True、False、Nothing三种状态。
嗯,变量这块就聊这么多。记住一句话:变量定义好了,流程就成功了一半。剩下的,就是让机器人按你的剧本演了。