侧边栏壁纸
  • 累计撰写 372 篇文章
  • 累计创建 60 个标签
  • 累计收到 109 条评论

目 录CONTENT

文章目录

12. Groovy 运算符-优先级和运算符重构学习

Z同学
2022-11-13 / 0 评论 / 2 点赞 / 36 阅读 / 1,187 字
温馨提示:
本文最后更新于 2022-11-15,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1. 介绍

本篇为Groovy学习第12篇内容。从第6篇开始学习Groovy中有关运算符的相关知识。而那些知识只是介绍了各种运算符的使用以及注意事项。

而本篇就来学习各种运算符的优先级方面的知识。因为如果多种运算符同时使用时,程序会先执行哪个后执行哪个。这个是开发中很重要的一个知识点。

2. 运算符优先级

下面,通过表格的形式,展现所有Groovy中运算符的优先顺序。顺序是从先到后的。

Level 运算符 解释
1 new () 对象创建,显式括号
() {} [] 方法调用, 闭包操作, List和Map调用
. .& .@ 成员访问, 对象获取,方法或属性访问 https://zinyan.com/?p=396
?. * *. *: 安全导航展开运算符
~ ! (type) 按位取反运算符逻辑非运算符,以及最后的类型转换
[] ?[] ++ -- 列表对象获取,和列表对象安全获取, 累加或累减
2 ** 幂运算
3 ++ -- + - 基本的算术运算符,累加和累减 (PS:官方也是这样标注的,我觉得应该是前加和后加的区别)
4 * / % 乘,除,取余
5 + - 加减运算符
6 << >> >>> .. <..< 左右位移运算符, 无符号位移区间运算符
7 < <= > >= in !in instanceof !instanceof as 大于等于比较运算符, in 和非in 成员运算符, instanceof和not instanceof, as 类型转换运算符
8 == != <=> === !== 比较运算符三元比较运算符
=~ ==~ 正则表达式操作符
9 & 位运算符:and
10 ^ 位运算符: xor
11 | 位运算符:or
12 && 逻辑运算符:逻辑与
13 || 逻辑运算符:逻辑或
14 ? : 三元运算符
?: 条件运算符,可以算三元运算符的缩写
15 = **= *= /= %= += -= \<<= >>= >>>= &= ^= |= ?= 其他各种运算符了。

再次强调一下:1级是最先执行的,15级是最后执行的。

3. 运算符重载

Groovy允许您重载各种运算符,以便它们可以与您自己的类一起使用。

我在前面的介绍中,也有使用过相关的重载方法。

总而言之,各种运算符其实就是对方法的简写。而所谓的运算符重写。就是将各运算符所代表的方法,进行重载。我们可以重新定义该运算符在使用时的意义。

示例如下所示 我重载了plus方法,这个就是用来进行计算的方法:

class Bucket {
    int size

    Bucket(int size) { this.size = size }

    Bucket plus(Bucket other) {                     
        return new Bucket(this.size + other.size)
    }
}

然后我们再使用该值的计算方法:

def b1 = new Bucket(4)
def b2 = new Bucket(11)
println(b1+b2.size) //输出为15

下面是运算符及其相应方法的完整列表:

运算符 方法 运算符 方法
+ a.plus(b) a[b] a.getAt(b)
- a.minus(b) a[b] = c a.putAt(b, c)
* a.multiply(b) a in b b.isCase(a)
/ a.div(b) << a.leftShift(b)
% a.mod(b) >> a.rightShift(b)
** a.power(b) >>> a.rightShiftUnsigned(b)
| a.or(b) ++ a.next()
& a.and(b) -- a.previous()
^ a.xor(b) +a a.positive()
as a.asType(b) -a a.negative()
a() a.call() ~a a.bitwiseNegate()

我们可以根据自己的实际需求,进行自定义类后重载相关方法。那么在该类使用运算符的时候,计算逻辑就会按照我们定义的方法进行了。

如果不能理解。那么就多修改几个方法试试吧。

这种特性在新出的一些高级语言中可以说都是存在的。例如python 和Kotlin等语言中,也有类似的重载机制。

4. 小结

本篇,可以说是针对运算符的各种符号的一个归纳介绍。 如果对某个运算符不了解的话,建议看我分享的运算符详细知识。

到这里,有关运算符的相关知识就分享结束了。在学习这些运算符的同时,我们对于Groovy的语言的特性也在不断的了解中。

本篇内容知识来源于Groovy官网文档:http://docs.groovy-lang.org/docs/groovy-4.0.6/html/documentation/#_operator_precedence

如果觉得我介绍的还可以,希望能够给我一个赞。鼓励一下我。谢谢。

从下一篇开始,介绍Groovy的语言结构。也就是语法和代码结构的相关知识点。

2

评论区