有一种神奇叫做符号,它抽象、多变,楚然用之不明觉厉,看别人用之,逼格满满啊!真是让人又爱又恨,弃之不忍、欲罢不能啊!程序就是这个玩意的逻辑化,autohotkey又将它推向了极致!
所谓符号呢,可以是图形图像、文字组合,也不妨是声音信号、建筑造型,甚至可以是一种思想文化、一个时事人物。例如“=”在数学中是等价的符号,“紫禁城”在政治上是中国古代皇权的象征。总的来说,符号的意思就是一种“特征纪念”,就像绰号是为了让人容易记住,方便辨认的称呼。你记张三李四可能麻烦,但你记“大胡子”、“小眼镜儿”就方便多了,所以符号也可以说是由人的认识习惯造成的。
autohotkey将符号用到了极致,灵活、奇妙。不过不熟悉的话,只能臣妾心里苦了。这节课呢我们就一起来领略一下autohotkey符号的风骚吧!
第一弹:风骚的=
=是啥嘞?
老何曰:两种用法比较和赋值,前边文案中有讲解,不会的话可以去看看哈!
==又是啥嘞?
老何曰:区分大小写的比较。
>= 、<= 、!=就不用你说了大家都知道,哈哈。
~=这个又是啥玩意呢?
老何曰:对 RegExMatch 的简写,哈哈看不懂吗?这是一个函数,有兴趣的话可以去看下帮助文档喽!纳尼
:=、+=、-=、=、/=、//=、.=、|=、&=、^=、>>=、<<=* 哈哈,等号家族啊!老何曰:你确实挺会总结,这些都是赋值的表达形式. 对变量的内容进行运算, 然后把结果保存到同一个变量中 . 最简单的赋值运算符为 冒号等号 (:=), 它把表达式的结果保存到变量中.
+=和-= 运算符是从变量中增加或减少值的一种简写形式. 例如,Var+=2
和 Var:=Var+2
会得到相同的结果(不过前者执行的更好)。同样地,使用Var++、Var--、++Var 或 --Var可以让变量增加或减小 1。
*=和 /=运算符是用变量的值乘以或除以另一个值的一种简写形式. 如,Var*=2
和Var:=Var*2
会得到相同的结果。
其他的都是这个组合方式,例如,Var //= 2
执行向下舍除, 把 Var 除以 2, 然后把结果保存回 Var. 同样地, Var .= "abc"
为 Var := Var . "abc"
的一种简写形式.
与其他大多数运算符不同, 赋值运算是从右往左执行的. 因此, Var1 := Var2 := 0
这个语句中首先把 0 赋值给 Var2, 然后把 Var2 赋值给 Var1.
如果使用赋值运算的结果作为其他某些运算符的输出, 那么输入的值是变量自身. 例如, 如果变量 Var 新增值后大于 50, 那么表达式 (Var+=2) > 50
结果为真. 这样还允许赋值被作为 ByRef传递或获取它的地址, 例如:&(x:="abc")
.
需要避免语法错误或提供更直观的操作时, 会自动提升赋值运算符的优先级. 例如:not x:=y
等价于 not (x:=y)
. 同样地, ++Var := X
等价于 ++(Var := X)
;而 Z>0 ? X:=2 : Y:=2
等价于 Z>0 ? (X:=2) : (Y:=2)
.
这个=符号太风骚,简单展开就是一大段啊!
风骚.jpg第二弹:神奇的%
AHK 中有一个很特别的符号 %。几乎随便从网上下一段 AHK 代码,就可以看到里边有 % 符号,而且 % 在 AHK 里的用法和所有其他编程语言都不一样,基本靠猜的话是猜不出来的。关键是他能解决一些特殊的问题!灵活运用,好神奇的样子!!
咋用嘞??
老何曰:第一种用法我们在介绍赋值表达式的时候接触过,当用 = 对变量赋值时,如果一个字符串被两个 % 包围,并且中间没有空格,那么含义是取这个变量的值。
a = 123 b = %a% c = %a%456 MsgBox, %a%
% 还有另一种用法,这回它只出现一个,并且 % 的后边有至少一个空格。这样用表示 % 后边的内容按表达式来解析,也叫强制执行表达式,有强迫症的童鞋好多多使用额!!
a = 123
b = % a
MsgBox, % a 和 MsgBox, %a% 是一样的,实际上后者更强大一些。
如果 % 后边不只是一个变量名,而是一个表达式,那么“用法二”有效,“用法一”无效。
a := 1 b := 2 c := 3 MsgBox, % a + b + c ; 计算 a + b + c,结果为 6 MsgBox, %a + b + c %; 语法错误 MsgBox, %a% + %b% + %c%; 语法正确,但 + 失去计算功能,变成了字符串的一部分
我们发现“用法一”和“用法二”的功能上是有重叠的,那么实际情况应该怎么用呢?这个还是因人而异,尽量前后一致即可。但在某些场景“用法一”更方便,某些情况“用法二”更方便,甚至只能用“用法二”。
“用法一”更方便的场景:
; 变量本身包含双引号等特殊字符 c = "%a% %b%" ; 多行字符串中包含变量 c = ( xxx%a%%b% )
“用法二”更方便的场景:
; 字符串中的变量居多
MsgBox, % a " " b " " c " " d
只能用“用法二”的场景:
; 需要使用表达式 MsgBox, % a + b - c
另外如果考虑性能的话,“方法一”是要比“方法二”快二分之一到一倍的,但一般情况瓶颈不应该出现在这里,所以也不用过多在乎性能问题,如果真的是因为在很大的循环里使用而产生性能问题,修改一下也是很轻松的事情。
第三弹:没有存在感的,
任何命令中的首个逗号可以省略 (除非首个参数为空或以 := 或 = 开始, 或命令单独处于延续片段的顶部). 例如:
MsgBox This is ok. MsgBox,This is ok.
啊哈哈!第三弹是个小弹头哈,不过这个可能解开了很多人的疑惑呢,毕竟autohotkey中这个可有可无的东西有点打乱了我们飘逸严谨的态度。auutohotkey的神奇符号还有很多,我这里就是抛块砖啦!大家可以慢慢去雕琢自己的与玉喽!
网友评论