塞耶龙运算符

   |       塞耶龙

我们已经讨论了 塞耶龙运算符的理论,但我遗漏了给出它们的实际列表。在编制这个运算符列表时,我们试图选择那些使代码更容易阅读而不是更难阅读的运算符。 (塞耶龙应该是一种避免ASCII艺术的编程语言。) 列表中有一两个运算符我有些怀疑,特别是 格式运算符$,它用于将对象格式化为字符串。

运算符优先级

塞耶龙比Java有更多的运算符,并且由于 运算符多态,它们在某些方面更加灵活,因此我们决定将运算符分类为 ,以使它们更容易获得一致的前缀。根据语言规范

有15个不同的运算符优先级级别,但这些级别被组织成层,以便更容易预测。
  • 第一层的运算符生成、转换和组合值。
  • 第二层的运算符比较或断言值,产生一个布尔结果。
  • 第三层的运算符是逻辑运算符,它对布尔参数进行操作以产生一个布尔值。
  • 第四层的运算符执行赋值。
在每个层内,后缀运算符的优先级高于前缀运算符,前缀运算符的优先级高于二元运算符。有一个例外是:二元指数运算符**的优先级高于前缀运算符+-。这是因为以下表达式应该是等效的
-x**2	//means -(x**2)
0 - x**2	//means 0 - (x**2)

当然,传统的规则,如

  • 乘法运算符*, /,和%的优先级高于 加法运算符+-,和
  • 的优先级高于 合取运算符&&&的优先级高于 析取运算符||, |^

的规则也受到尊重。

在大多数情况下,这些规则会产生与C、Java和C#中相同的相对运算符优先级。但有一个例外需要注意。逻辑非运算符!在C中的优先级很高,但在Ceylon中的优先级很低(因为它属于第3层)。

现在,最后,这是列表,省略了复合赋值运算符,例如+=。(此列表不是按优先级顺序分类的。)

基本调用和赋值运算符

  • 选择lhs.member
  • 调用lhs(x,y,z),或lhs { x=x; y=y; z=z; }
  • 赋值lhs := rhs
  • 格式化$rhs

相等性和比较运算符

  • 相同lhs === rhs
  • 等于lhs == rhs
  • 不等于lhs != rhs
  • 比较lhs <=> rhs
  • 较小lhs < rhs
  • 较大lhs > rhs
  • 小等于lhs <= rhs
  • 大等于lhs >= rhs
  • lhs in rhs
  • lhs is Rhs
  • 满足Lhs satisfies Rhs

逻辑运算符

  • !rhs
  • 条件或lhs||rhs
  • 条件与lhs&&rhs

处理null值的运算符

  • 存在lhs exists
  • 非空lhs nonempty
  • 默认lhs ? rhs
  • Nullsafe选择lhs?.member

对应和序列运算符

  • 查找lhs[index]
  • Nullsafe查找lhs?[index]
  • 子范围lhs[x..y]
  • 上界范围lhs[x...]
  • 展开成员lhs[].member

创建对象的运算符

  • 范围lhs .. rhs
  • 条目lhs -> rhs

算术运算符

  • 后继++rhs
  • 前驱--rhs
  • 递增lhs++
  • 递减lhs--
  • 正数+rhs
  • 负数-rhs
  • 求和lhs + rhs
  • lhs - rhs
  • 乘积lhs * rhs
  • lhs / rhs
  • 余数lhs % rhs
  • lhs ** rhs

位运算符

  • 补码~rhs
  • lhs | rhs
  • lhs & rhs
  • 异或lhs ^ rhs
  • 补码在内lhs ~ rhs

请注意,位运算符适用于集合以及二进制字符串,如此处简要讨论。因此,集合的并集写作U|V,集合的交集U&V,以及集合的补集U~V.


返回顶部