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

2022-12-07 18:28:22 浏览数 (1)

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方法,这个就是用来进行计算的方法:

代码语言:javascript复制
class Bucket {
    int size

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

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

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

代码语言:javascript复制
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的语言结构。也就是语法和代码结构的相关知识点。

0 人点赞