#符号

这个操作符通过自动将其左侧的表达式分组后再应用任何后续运算,简化了表达式的表示。这种模式有助于保持代码的清晰度,并减少了由于操作符优先级导致的错误的可能性. 之所以选取#符号, 是因为其英文为"pound", 有磅、重击之意, 对"调整代码表达式的权重"有比较合适的表达效果

使用方式

井号 (#) 操作符设计用于需要明确控制操作顺序的情况,而无需在代码中添加过多的圆括号。这在复杂的数学计算、逻辑运算或其他可能因优先级引起歧义或意外结果的情景中尤其有用。

使用 # 操作符时,将它放在两个操作之间,其中左侧的操作, 会因为被提高了算法优先级, 会在计算后再与右值结合进行计算。

浅显的来说, 就是我们都知道四则运算里, */ 符号的优先级高于 +-, 如果需要先进行 + / - 操作, 则需要用括号把 + / - 操作包起来, 使用 #符号之后, 就可以更简便的完成"包括号"的操作了, 无须退回到代码前面进行编辑

一般语法

expression1 # operation expression2

这将被解释为:

(expression1) operation expression2

原理说明

在解析语句时, 如果遇到#, 会往#的位置放入一个右括号), 然后往左边找, 跳过成对的括号, 直到遇到下方符号(下称左端符号)中的其中一个时会停止, 并在该左端符号后面放入一个左括号(

#的左端符号列表

{
[
(
@{
;
\n
return
,
=>
+=
&=
&^=
=
:=
&&=
||=
??=
*=
|=
**=
/=
%=
<<=
>>=
?=
-=
^=
<-
->
|>
<>
:
?

代码示例

示例 1: 基础算术

// 希望先执行加法再除法
result = 1.5 + 1.5 # / 2
print(result)  // 输出:1.5,等同于 (1.5 + 1.5) / 2

示例 2: 结合变量使用

x = 10
y = x + 20 # / 5
print(y)  // 输出:6,等同于 (x + 20) / 5

示例 3: 嵌套井号操作符

// 使用嵌套的 # 操作符进行更复杂的运算
result = 3 + 4 # * 2 # - 5
print(result)  // 输出:9,等同于 ((3 + 4) * 2) - 5

##符号

如果你已经掌握上面的#符号, 在使用一段时间后, 可能会有一些情况仍然无法令你满意, 其中一个原因就是其左端符号列表可能过于广泛了

##的左端符号列表

{
[
(
@{
;
\n
return
=>
+=
&=
&^=
=
:=
&&=
||=
??=
*=
|=
**=
/=
%=
<<=
>>=
?=
-=
^=

可以发现, 对比#, ##的左端符号少了以下符号

,
:
?
<-
->
|>
<>

###符号

更极端的情况下, 例如你需要的是本语句前面全部内容都用括号括起来, 那么可以使用###, 它的左端符号列表只有这些:

{
[
(
@{
;
return

示例

a = [1, 2, 2, 3]###.len
// 等于 (a = [1, 2, 2, 3]).len

结论

Z1h 语言中的井号 (#) 系列操作符提供了一种简洁的方式来强制和澄清表达式中的操作顺序。通过自动化操作分组,这个操作符有助于保持代码的可读性和可维护性,特别是在需要进行复杂计算的场景中。因此,它为寻求编写既简洁又清晰的代码的开发者提供了一个不错的表达方式。