参考:UB语言参考_UiBot开发者指南
虽然Uibot用命令就行,但是编程习惯会让程序员们更喜欢看源代码,有时候写源代码会更加方便,所有要学习UB的语言基础。
它很简单,和Python很像,下面简单了解一个各种基础语法。
注释
Dim定义一个变量,可以顺便赋值,如果需要换行可以打反斜杠:
Dim a= \
1
注释不是“#”号,而是:
// 这里是注释
/*
这里
也是
注释
*/
变量和数据类型
和一般语言差不多,UB有整形数,浮点数,布尔型,字符串等变量
a = 1 // a是整数型变量
a = &HFF // a还是整数型变量
a = True // a是布尔型变量。作为动态类型语言,a的类型可以随时变化
a = FALSE // a是布尔型变量,注意True和False都不区分大小写
a = 'UiBot' // a是字符串型变量
a = "UiBot
RPA" // a是字符串型变量,字符串中可以换行
a = null // a是空值型变量,可以写为Null、NULL或null(不区分大小写)
定义一个变量的方式:
Dim 变量名
赋值方式:
Dim 变量名=值
定义多个变量
Dim 变量名1 = 值1, 变量名2
Dim 变量名1 = 值1, 变量名2 = 值2
定义常量:
Const 常量名=值, 常量名=值
常量和变量的唯一区别是,常量只能在定义时指定一次值,后面不允许再修改。
Dim a // 定义名为a的变量,暂不赋值
Dim b = 1 // 定义名为b的变量,并赋值为1
Dim c, d = True // 定义名为c和d的两个变量,为d赋值True
Const e = 'UiBot' // 定义名为e的常量,为其赋值为字符串’UiBot’
Const f // 错误:常量必须有初始赋值
复合数据类型
UB里面两种复合数据类型,数组和字典,和Python的列表和字典是一样的。
数组:
Dim 数组变量 = [值1, 值2, 值3, 值4]
字典:
{ 名字1:值1, 名字2:值2, 名字3:值3 }
其中 名字 只能是字符串,值 可以是任意类型的表达式。而不像Python,py里面的字典可以是任何形式。
索引方式和py是一样的:变量名[索引1],例如:
Dim 变量 = [486, 557, 256] // 变量可以用中文命名,初值是一个数组
a = 变量[1] // 此时a被赋值为557
变量 = {"key1":486, "key2":557, "key3":256} // 变量的类型改为一个字典
a = 变量["key1"] // 此时a被赋值为486
注意:在引用数组或字典中的元素时,数组的索引只能是整数类型,用0作为起始索引;字典的索引只能是字符串类型。如果未能正确的使用,会在运行时报错。
数组或者字典的引用是可以嵌套的,如果要引用数组中的数组(即多维数组),或者字典中的数组,可以继续在后面写新的方括号。范例:
变量 = {"key1":486, "key2":557, "key3":256} // 变量的类型为一个字典
变量["key4"] = [235, 668] // 往字典中增加一个新值,该值是一个数组
//此时,字典中的内容为 {"key1":486, "key2":557, "key3":256, "key4":[235, 668]}
a = 变量["key4"][0] // 此时a被赋值为235
运算符
条件语句
当条件满足时,会执行条件之后的语句块,否则,语句块不会执行。Else
后面的语句块则会在前面所有条件都不满足的时候,才会执行。
If 条件1语句块1
ElseIf 条件2语句块2
Else语句块3
End If
选择分支语句
根据一定的条件,选择多个分支中的一个。先计算Select Case
后面的表达式
,然后判断是否有某个Case
分支和这个表达式
的值是一致的。如果没有一致的Case
分支,则执行Case Else
(如果有)后面的语句块。例如:
Select Case Time.Month() // 取得当前时间中的月份Case 1,3,5,7,8,10,12 // 如果是1、3、5、7、8、10、12月DayOfMonth = 31 // 当月有31天Case 4,6,9,11 // 如果是4、6、9、11月DayOfMonth = 30 // 当月有30天Case Else // 如果是其他(也就是2月)DayOfMonth = 28 // 当月有28天(不考虑闰年的情况)
End Select
TracePrint(DayOfMonth)
条件循环语句
主要是while循环
前置条件成立则循环
Do While 条件语句块
Loop
前置条件不成立则循环
Do Until 条件语句块
Loop
后置条件成立则循环
Do语句块
Loop While 条件
无限循环
Do语句块
Loop
计次循环语句
就是For循环,一般我都用这种循环方式
For 循环变量 = 起始值 To 结束值 Step 步长语句块
Next
例如:
Dim count = 0 // 定义变量count
For i=1 To 100 // 每次循环,变量i都会加1。这里变量i不需要定义count = count + i
Next
TracePrint(count) // 这里会显示1+2+3+…+100的结果,即5050
遍历语句
循环数组或字典的对象,遍历循环语句可以用于处理数组、字典中的每一个元素。遍历循环语句有以下两种形式:
For Each 循环变量 In 数组或字典语句块
Next
或者:
For Each 循环变量1, 循环变量2 In 数组或字典语句块
Next
在这种形式的循环语句中,会自动遍历数组、字典中的每一个索引和值,并将其分别置入循环变量1
、循环变量2
中,直到遍历完成为止。
和计次循环语句类似,在遍历循环语句中,循环变量
可以不用Dim
语句定义,直接使用,但在循环结束后就不能再使用了。
例如:
Dim days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] // 定义数组型变量days
Dim count = 0
For Each i In days // 每次循环,变量i的值分别为days中的每个值 count = count + i // 把数组中的每个值依次加起来
Next
TracePrint(count) // 这里会显示一年中每个月的天数的累加和,即365
跳出语句
主要是break和continue,用法和python一样
Dim days = { '一月':31, '二月':28, '三月':31, '四月':30, '五月':31, '六月':30, '七月':31, '八月':31, '九月':30, '十月':31, '十一月':30, '十二月':31 } // 定义字典型变量daysFor Each i,j In days // 每次循环,变量i, j分别为days中每个名字和值If j Mod 2 = 0 // 如果j是偶数Continue // 结束本次循环,开始下一次循环End IfTracePrint(i) // 把days中的名字(其值不是偶数)显示出来
Next
函数定义
Function 函数名(参数定义1, 参数定义2)语句块
End Function
在函数定义中,要退出函数并返回,采用以下写法:
Return 返回值
例如
Function Add(x, y=1) // 定义了两个参数的函数,第二个参数有默认值Return x + y // 返回值为x+y的值
End Function
调用函数的格式如下:
返回 = 函数名(表达式1, 表达式2)
导模块
和py一样
Import 模块名
异常
如果不希望流程在发生异常的时候终止,可以采用以下语句对异常进行处理:
Try语句块
Catch 变量名语句块
Else语句块
End Try
如果在Try
后面的语句块中发生了异常,会跳到Catch
后面的语句块中执行。如果在Try
语句块中没有发生异常,且定义了Else
语句块(当然,也可以省略Else
语句块),则会跳到Else
语句块中执行。
Catch
语句后面的变量名可以省略。如果不省略,可以不用Dim
语句提前定义,当发生异常时,这个变量的值是一个字典,其中包含“File”、“Line”和“Message”三个字段,分别代表发生异常的文件名、发生异常的行号、异常包含的信息。