4、变量与数据类型:UiPath中的变量类型(String、Int32、Boolean、DataTable)、变量作用域与命名规范

好,咱们开始聊变量。说实话,变量这东西,是RPA机器人的「血液」。没有变量,你的机器人就是个空壳子,啥也干不了。我刚开始带团队的时候,发现很多新人上来就写死数据,结果流程一改,全盘重来。嗯,这其实是个大坑。

4.1 变量是什么?说白了就是个「盒子」

你想想看,机器人要处理数据,总得有个地方暂存吧?变量就是干这个的。它像个小盒子,你往里面放字符串、数字、真假值,甚至一整张表格。UiPath里,每个变量都有个「类型」,决定了它能装什么。

我个人习惯,在开始写流程之前,先把所有变量列出来。就像做饭前先备菜,省得炒到一半发现缺盐。

4.2 核心变量类型详解

4.2.1 String(字符串)

这是最常用的类型。文本、姓名、地址、报错信息……全是字符串。在UiPath里,字符串用双引号包起来。

"你好,世界"
"订单号:ORD-2024-001"
""  // 空字符串,不是null

我在项目中遇到过一个问题:从Excel读出来的数字,UiPath默认当成字符串处理。结果做数学运算时直接报错。所以,字符串就是字符串,别指望它自己会算数。

小技巧: 字符串拼接用「+」号,但如果你要拼接很多段,建议用String.Format或者$"{}"插值法,代码更干净。

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后第一件事:检查行数和列数。因为空表或者列名不对,后面所有操作都会崩。我曾经因为没检查空表,导致机器人跑了半小时,最后报了个「索引超出范围」……那叫一个尴尬。

重点: 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,三个月后你自己回来改,是不是得骂娘?

我的习惯: 变量名控制在20个字符以内。太长了反而不好读。比如intTotalOrderCountForToday,改成intTodayOrderCount就挺好。

4.5 实战避坑指南

最后,分享几个我踩过的坑:

  • 类型转换: 从字符串转数字,一定要用CInt()或者Convert.ToInt32(),别直接赋值。我曾经因为字符串里有个空格,转换失败,流程卡了半小时。
  • DataTable的默认值: 新建的DataTable是空的,不是null。所以判断时用dt.Rows.Count > 0,而不是dt IsNot Nothing。
  • 布尔变量的三态: 布尔只有True和False,但有些场景需要「未设置」状态。这时候用Nullable(Of Boolean),也就是Boolean?,可以表示True、False、Nothing三种状态。

嗯,变量这块就聊这么多。记住一句话:变量定义好了,流程就成功了一半。剩下的,就是让机器人按你的剧本演了。