
3.1 变量的概念与理解
变量是内存中保存数据的一个存储空间。只要一个数据今后不只使用一次,可能被反复使用时,都要保存在变量中。
在整个自动化项目中,变量起到数据传递的重要作用,也可以通过改变值以实现多种目的,例如控制循环主体的执行次数。
首先来看一下Studio中用于管理变量的变量(Variables)面板,如图3-1所示。

图3-1 Variables面板
Variables面板中有4个字段。
□Name(名称):必填,用于填写变量名称。
□Variable type(变量类型):必填,用于填写变量的类型。
□Scope(范围):必填,用于填写变量的作用域。
□Default(默认值):选填,用于为变量设定默认值。
在Studio中,创建变量的方式一共有如下3种。
第一种方式:通过活动主体创建变量,如例3.1所示。
【例3.1】完成计算边长2m的正方形的面积的流程。创建一个项目,计算边长2m的正方形的面积并存入变量,最后在Output面板中显示结果(要求通过活动主体创建变量)。
具体实现步骤如下所示。
1)进入Studio界面,点击Process创建一个新流程,命名为3_1_CreateVariableBy-Activity,如图3-2所示。
2)进入Main,在Activities面板的搜索框内输入sequence,如图3-3所示。

图3-2 新建流程

图3-3 搜索Sequence活动
3)将Sequence活动拖入设计器面板。在Properties面板中,将Sequence活动的DisplayName属性更改为“求正方形面积”,如图3-4所示。

图3-4 拖入Sequence活动并更改属性
4)拖入一个Assign活动到“求正方形面积”活动。在Properties面板中,将Assign活动的DisplayName属性更改为“计算面积”,在Value属性中输入2*2,如图3-5所示。
5)在“计算面积”活动主体的To输入框中右击,从弹出菜单中选择Create Variable(快捷键为Ctrl+K)选项,如图3-6所示。
6)系统随即会在输入框中显示“Set Var:”字样,输入想要创建的变量名称SquareArea后按下回车键,如图3-7所示。创建变量后,“计算面积”活动依然显示蓝色叹号,表示存在验证性错误,如图3-8所示(注:变量名称要见名知意,这里采用首字母大写的驼峰命名方式,即每个单词首字母都大写,其余字母小写)。

图3-5 拖入Assign活动并更改属性

图3-6 在活动主体创建变量

图3-7 填写变量名称

图3-8 变量创建完成
7)在Variables面板中检查变量SquareArea的类型和作用域,发现错误是创建的变量数据类型错误导致的,将Variable type更改为Int32,如图3-9所示(注:在Assign活动中系统会自动创建String类型的变量,作用域会自动设定为所设定活动的最小容器)。

图3-9 检查变量类型和作用域
8)此时“计算面积”活动的蓝色叹号消失,表示不存在验证性错误,如图3-10所示。

图3-10 验证性错误消除
9)拖拽Write Line活动添加到“求正方形面积”Sequence中。在Properties面板中,将DisplayName属性更改为“输出面积”,在Text属性中输入“"边长2米的正方形面积为"+SquareArea.ToString+"平方米。"”,如图3-11所示。

图3-11 拖入Write Line活动并更改属性
10)按F5键执行流程,将在Output面板中显示执行结果,如图3-12所示。

图3-12 执行结果
第二种方式:通过Properties面板创建变量,如例3.2所示。
【例3.2】通过Properties面板创建变量的方式完成例3.1中的需求。
具体实现步骤如下所示。
1)进入Studio界面,点击Process创建一个新流程,命名为3_2_CreateVariableBy-PropertiesPanel,如图3-13所示。

图3-13 新建流程
2)参照例3.1中的第2~4步创建项目,完成后如图3-14所示。

图3-14 参照例3.1创建项目
3)在“计算面积”活动的Properties面板中,右击To属性的输入框,从弹出的菜单中选择Create Variable选项,如图3-15所示。系统随即会在输入框中显示“Set Var:”字样,填写想要创建的变量名称SquareArea后按下回车键,如图3-16所示。

图3-15 在属性面板创建变量

图3-16 填写变量名称
4)创建变量后,参照例3.1中的第8~10步检查变量并完成流程,完成后的流程如图3-17所示。

图3-17 参照例3.1完成流程
5)按F5键执行流程,将在Output面板中显示执行结果,如图3-18所示。

图3-18 执行结果
第三种方式:通过Variables面板创建变量,如例3.3所示。
【例3.3】通过Variables面板创建变量的方式完成例3.1中的需求。
具体实现步骤如下所示。
1)进入Studio界面,点击Process创建一个新流程,命名为3_3_CreateVariableBy-VariablesPanel,如图3-19所示。

图3-19 新建流程
2)参照例3.1中的第2~4步创建项目,完成后如图3-20所示。

图3-20 参照例3.1创建项目
3)在Variables面板中,单击Create Variable,系统将会自动生成一个变量,以此方式创建的变量默认类型为String型,如图3-21所示。

图3-21 在Variables面板中创建变量
4)更改Name为SquareArea,更改Variable type为Int32,如图3-22所示。

图3-22 更改变量属性
5)创建变量后,在“计算面积”活动的To输入框中输入变量SquareArea,如图3-23所示。

图3-23 计算正方形的面积
6)参照例3.1中的第10步完成流程,完成后的流程如图3-24所示。

图3-24 参照例3.1完成流程
7)按F5键执行流程,将在Output面板中显示执行结果,如图3-25所示。
如果需要删除一个变量,可以从Variables面板中选中该变量右击,在弹出的菜单中选择Delete选项(或选中该变量后直接按下Delete键),如图3-26所示。

图3-25 执行结果

图3-26 删除变量的方式
变量命名需要注意:
□在同一个自动化流程内,变量名称不能重复;
□变量名称要见名知意,如果变量名由多个单词组成,可以采用首字母大写的驼峰命名方式,所有变量命名规则保持一致;
□为变量命名时,不能使用关键字,如String、Boolean、For、While等;
□变量名称中只能包含字母、数字、下划线,不能包含其他字符,例如空格等,另外变量名称不可以以数字开头;
□在Variables面板中重命名变量会自动更新当前文件中出现的所有对应变量。
我们已经知道在Variables面板的Scope字段中可以设置变量的可用范围,也称为变量的作用域。尽管我们可以为创建的变量设置任意的作用域,但还是在使用时建议每个变量的作用域应尽量申明在其最小可用的范围内,这样在变量数量比较多的情况下更方便对变量进行整理。若不同范围中存在同名变量,程序执行时将会优先使用最小范围的变量。相关应用请参照例3.4深入理解。

图3-27 流程图
【例3.4】分两次弹出窗口,提示用户输入自己的姓氏和名字,在用户输入后,弹出窗口显示用户的全名(要求输入姓氏和输入名字的活动分别写在不同的序列中)。流程图如图3-27所示。
具体实现步骤如下所示。
1)在Studio界面中,点击Process创建名为3_4_VariableScope的新流程,如图3-28所示。
2)拖入一个Sequence活动到设计器面板。在Properties面板中,将Sequence活动的DisplayName属性更改为“输出全名流程”,如图3-29所示。
3)再拖入一个Sequence至“输出全名流程”Sequence中。在Properties面板中,将该Sequence活动的DisplayName属性更改为“输入姓氏”,如图3-30所示。

图3-28 新建流程

图3-29 拖入Sequence活动并更改属性

图3-30 再次拖入Sequence活动并更改属性
4)拖入一个Input Dialog活动到“输入姓氏”Sequence中。在Properties面板中,将Input Dialog活动的DisplayName属性更改为“输入姓氏”,将Label属性更改为“"请输入您的姓氏:"”,将Title属性更改为“"输入姓氏"”,如图3-31所示。
5)在Properties面板的Result字段中右击,从弹出的菜单中选择Create Variable选项,系统随即会在输入框中显示“Set Var:”字样,输入LastName后按下回车键,如图3-32所示。

图3-31 输入姓氏弹出窗口设置

图3-32 创建存储姓氏的变量
6)折叠“输入姓氏”Sequence,再拖入一个Sequence至“输出全名流程”Sequence中。在Properties面板中,将该Sequence活动的DisplayName属性更改为“输入名字”,如图3-33所示。
7)拖入一个Input Dialog活动到“输入名字”Sequence中。在Properties面板中,将Input Dialog活动的Display-Name属性更改为“输入名字”,将Label属性更改为“"请输入您的名字:"”,将Title属性更改为“"输入名字"”,如图3-34所示。

图3-33 再次拖入Sequence活动并更改属性

图3-34 输入名字弹出窗口设置

图3-35 创建存储名字的变量
8)在Properties面板的Result字段中右击,从菜单中选择Create Variable选项,系统随即会在输入框中显示“Set Var:”字样,输入FirstName后按下回车键,如图3-35所示。
9)折叠“输入名字”Sequence,拖入一个Message Box活动到“输出全名流程”Sequence中。在Properties面板中,将Message Box活动的DisplayName属性更改为“输出全名”,在Text属性中输入LastName+FirstName,如图3-36所示。

图3-36 输出全名窗口设置
10)可以看到,上一步中的Message Box的Text属性存在验证性错误,错误详情显示变量LastName和FirstName均未被声明,如图3-37所示。

图3-37 验证性错误提示
11)该错误是之前创建变量的作用域过小导致的,这时可以查看一下Variables面板。选中“输入姓氏”Sequence时的Variables面板如图3-38所示。
12)选中“输入名字”Sequence时的Variables面板如图3-39所示。
13)将两个变量的作用域都更改为“输出全名流程”,如图3-40所示。

图3-38 查看存储姓氏的变量作用域

图3-39 查看存储名字的变量作用域

图3-40 更改变量作用域
14)此时验证性错误消失,最终主项目视图如图3-41所示。

图3-41 最终项目主视图
15)按F5键执行流程,系统将显示“输入姓氏”窗口,输入用户的姓氏后点击OK按钮,如图3-42所示。接着系统将显示“输入名字”窗口,输入用户的名字后点击OK按钮,如图3-43所示。
16)执行结果如图3-44所示。

图3-42 输入姓氏窗口

图3-43 输入名字窗口

图3-44 执行结果