2.【Au3基础】变量、常量、运算符
一叶菩提
2024-11-30 17:45:19
0

认识变量:变量的概念

内存根据数据的不同类型开辟的这个内存空间叫做变量。

  • 内存  →   图书馆

  • 变量   →   书架

  • 变量名   →   书架编号

  • 数据类型   →  书的类型  (在Au3中常用数据类型:数字、字符串、布尔值 等)

  • 变量值   →    书架里的书

变量名:就是为了能在“书店”中能快速找到“书架”位置取得名字。

在Au3中只有一个叫做 Variant(变量)。 变量可以包含数字或字符串,AutoIt 会根据赋值的类型自动推断变量的类型。 例如:若让两个变量相乘,则它们将被当作数字类型;而试图连接(拼合)两个变量, 则它们将被自动视为字符串类型。

普通变量:自定义变量及作用域

  1. 变量命名规则在Au3中,变量名必须以  $  开头,并且只能包含字母、数字和下划线。例如: $var1    $my_variable

  2. 变量声明和作用域

    Au3使用Dim、Local和Global关键字来声明变量:

    Dim:声明全局变量,作用范围为整个脚本。Local:强制声明局部变量,作用范围为当前函数内部。Global:强制声明全局变量,即使在其他地方也可见‌。

    你也可以不先声明就给变量赋值,这和声明变量是一样的效果。

  3. 变量的作用域和生命周期‌全局变量‌:在脚本开头且在所有函数之外声明的变量是全局变量,可以在脚本的任意位置读取或更改。‌局部变量‌:在函数内部声明的变量是局部变量,仅在该函数内部有效,函数结束时自动销毁‌。


    下面通过一个简单示例来系统的了解一下变量。示例2-1

      ; 声明全局变量
     Global $gVar = "我是全局变量"
     $ggVar = "我是什么变量"
     ; 定义一个函数,演示局部变量的使用
     Func MyFunction()
         Local $lVar = "我是局部变量"
         ConsoleWrite($lVar & @CRLF) ; 输出局部变量
         ; 尝试访问全局变量
         ConsoleWrite($gVar & @CRLF) ; 输出全局变量
         ConsoleWrite($ggVar & @CRLF) ; 输出变量
     EndFunc
     
     ; 调用函数
     MyFunction()
     ; 在函数外部访问局部变量 ---报错
     ;ConsoleWrite($lVar & @CRLF)
     ; 在函数外部访问全局变量
     ConsoleWrite($gVar & @CRLF)
     ConsoleWrite($ggVar & @CRLF)


特殊变量:宏指令

Au3 提供一些 Macros(宏指令), 是 Au3中仅具有只读属性的特殊变量.。

宏指令首位字符为 @  而不是通常的 $ 字符所以很容易分辨。

和普通的变量一样您可以在表达式中使用它们, 但不能进行赋值操作(因为它们仅具有只读属性)。

预先定义的宏通常为访问系统信息提供方便, 诸如 Windows 目录位置, 或登录的用户名称等等。

通过示例了解宏指令,具体的宏指令可以参考帮助文件。示例2-2

 Local $sString = "现在时间是"
 ConsoleWrite($sString & @HOUR &":"& @MIN) ; 控制台输出字符串和宏指令的值.


特殊变量:数组

数组是一个包含一系列数据元素的变量。 此变量的每个元素可以用相应的索引序号访问 。 AutoIt 数组的第一个元素总是元素 [0]。数组元素按定义的顺序存储,并可以进行排序.

同样我也通过两个简单示例来了解一维数组: 示例2-3

 Local $aArray[4] ;使用维度大小来声明一个数组
 $aArray[0] = "一叶菩提"
 $aArray[1] = "个人网站"
 $aArray[2] = "puti.us.kg"
 $aArray[3] = "Au3教程"  
 ;遍历显示数组$aArray[4]
 For $i=0 To UBound($aArray)-1
     ConsoleWrite($aArray[$i]&@CRLF)
 Next
     
 ConsoleWrite($aArray[0]) ;输出"一叶菩提"

数组也可以是多维的,当你使用多个系列的索引号时,就像excel中的行和列。

二维数组示例:示例2-4

 #include <Array.au3>
 
 ; 初始化的二维数组
 Global $aArray[3][3] = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
 ; 使用嵌套的For循环遍历二维数组
 For $i = 0 To UBound($aArray) - 1 ; $i 迭代行
     For $j = 0 To UBound($aArray, 2) - 1 ; $j 迭代列,注意这里使用UBound的第二个参数来获取列数
         ; 打印当前元素
         ConsoleWrite($aArray[$i][$j] & " ")
     Next
     ; 打印完一行后换行
     ConsoleWrite(@LF)
 Next
 _ArrayDisplay( $aArray) ;内部函数在Array.au3 文件中。
 
  ConsoleWrite(@CRLF & $aArray[2][2] & " 是2-2中的数据"&UBound($aArray))


常量

在AutoIt中,常量(Constant)是指那些一旦被赋值后,在脚本的剩余部分中保持不变的值。常量的使用可以提高代码的可读性和可维护性,是编写高质量AutoIt脚本的一种推荐做法。在声明常量时,应遵循良好的命名习惯,确保常量名能够准确反映其用途或值,因为它们提供了一种在脚本中多次引用相同值而无需硬编码的方式。

一般我们使用关键字 Const 声明并创建常量。当然也有其他方法,如果以后能用到再详细讲,这里不做说明。

 Const $const1 = 1, $const2=12

常量不能重新申明为一个已经存在的变量.

通过示例讲解,示例2-5

 #include <MsgBoxConstants.au3>
 ;$MY_SOFTNAME = "软件名称"
 Global Const $MY_SOFTNAME = "我的软件名称"
 MsgBox(0, "常量值", $MY_SOFTNAME)
 MsgBox($MB_ICONQUESTION, "标题", "此消息框在 10 秒后超时或选择<确定>按钮.",10 )
 MsgBox(32, "标题", "此消息框在 10 秒后超时或选择<确定>按钮.",10 )


运算符

AutoIt 支持以下赋值符号, 数学运算符, 比较和逻辑运算符.

运算符

描 述
                                       赋 值 运 算 符
=给变量赋值. 例如 $vVar=5(分配数值 5 到 $vVar)
+=加法赋值. 例如 $vVar+=1(添加 1 到 $vVar)
-=减法赋值
*=乘法赋值
/=除法赋值
连 接 操 作 符
&串联/连接两个字符串. 例如 "one" & 10 (结果等于 "one10")
&=串联赋值. 例如: $vVar = "one", 然后 $vVar &= 10 ($vVar 现在等于"one10")
数 学 运 算 符
+两个数相加. 例如: 10 + 20 (结果等于 30)
-两个数相减. 例如: 20 - 10 (结果等于 10)也作为一元负号使用(设置变量的负值)
*两个数相乘. 例如: 20 * 10 (结果等于 200)
/两个数相除. 例如: 20 / 10 (结果等于 2)
^幂运算. 例如: 2 ^ 4 (结果等于 16)
比 较 运 算 符 (用于字符串时不区分大小写, 但 == 除外.)
=判断两个值是否相等. 例如: If $vVar = 5 Then ,比较字符串时 不区分大小写.
==判断两个 字符串 是否相等. 区分大小写 如果左右值不是字符串, 则必须转换为字符串. 仅用于需要区分大小写的字符串比较
<>判断两个值是否不相等. 比较字符串时 区分大小写. 要做一个区分大小写的不相等比较, 则使用 Not ("string1" == "string2")
>判断左值是否大于右值. 字符串按字典顺序(lexicographically)进行比较, 即使字符串的内容是数字也如此.
>=判断左值是否大于或等于右值. 字符串按字典顺序(lexicographically)进行比较, 即使字符串的内容是数字也如此.
<判断左值是否小于右值. 字符串按字典顺序(lexicographically)进行比较, 即使字符串的内容是数字也如此.
<=判断左值是否小于或等于右值. 字符串按字典顺序(lexicographically)进行比较, 即使字符串的内容是数字也如此.
逻 辑 运 算 符
And逻辑 And(与) 运算. 例如: If  $vVar= 5  And   $vVar2 > 6 Then (如果 $vVar 的值为 5 并且 $vVar2 的值大于 6 则条件为 True)
Or逻辑 Or(或) 运算. 例如: If $vVar = 5 Or $vVar2 > 6 Then (如果 $vVar 的值为 5 或者 $vVar2 的值大于 6 则条件为 True)
Not逻辑 Not(非) 运算. 例如: Not 1 (不是 1, 则条件为 False)
条 件 运 算 符
? :依据条件选择表达式. 例如: $condition ? $expression1 : $expression2(如果$condition 为 True 则 $expression1 成立; 否则如果 $condition 为 False 则 $expression2 成立) 参考 Ternary运算符的示例.

运算符的优先权

当表达式内含有多个运算符时,其运算的先后顺序由 运算符的优先级来控制.

AutoIt 中运算符的优先级如下所示. 处于同一优先级的两种运算符,则按从左到右的顺序运算

从最高到最低的优先级:

 NOT
 ^
 * /
 + -
 &
 < > <= >= = <> ==
 AND OR

乘号 * 拥有比加号 + 更高的优先级. 可以使用括号强行首先计算表达式的一部分

例如: (2 + 4) * 10 等于 60.

当使用逻辑运算符 AND, OR 时,请注意以下几点:

例如: If  MyFunc1() OR MyFunc2() Then     ( 如果 MyFunc1() 返回 true, 则不调用 MyFunc2() ).

例如: If  MyFunc1() AND MyFunc2() Then   ( 如果 MyFunc1() 返回 false, 则不调用 MyFunc2() ).

相关内容

6.【Au3基础】用户界面...
AutoIt 有能力创建包含窗口和控件的简单图形用户界面 (GUI...
2024-12-01 21:06:36
5.【Au3基础】循环语句
循环 是指多次重复执行一段脚本代码. 您应该指定循环次数, 或依据...
2024-12-01 21:06:21
4.【Au3基础】条件语句
条件判断只有 True (非零) 或 False (0) 两种可能...
2024-11-30 19:18:27
3.【Au3基础】函数
一个函数就是一个代码段, 可以供脚本调用来执行一定的"功...
2024-11-30 19:17:42
2.【Au3基础】变量、常...
在Au3中只有一个叫做 Variant(变量)。 变量可以包含数字...
2024-11-30 17:45:19
1.【Au3基础】学习前的...
Au3 是一款 类似于 BASIC 语言的一个免费软件,不需要认证...
2024-11-30 17:20:32