Flutter学习笔记之Dart重载运算符

重载运算符作为Dart一个重要特征,初学者可能很难理解,加之Flutter本身作为一种全新的开发方式,网上的学习资料甚少。

笔者作为一名安卓开发工程师在学习Dart的时候也遇到了重载运算符的问题,第一次看感觉很难理解。

其实翻看Dart语言的手册不难发现,Dart本身也是充分吸收了各个开发语言所长,在重载运算符这块,和C++有着极其相似的地方。

先上一段实验代码:

//dart实验代码
void main() {
  var man1 = new man(1, 2);
  var man2 = new man(3, 4);
  (man1 - man2).printM();
  (man1 + man2).printM();
}

class man {
  int a; 
  int b;
  man(this.a, this.b);
  man operator +(man v){//这其中,左边的man作为返回类型,可写可不写
    return new man(a + v.a, b);
  }
  man operator -(man v){//operator作为重载运算符的标志,必须写上,后面跟一个需要重载的运算符
    return new man(a - v.a, b);
  } 
  printM(){
    print("a: $a, b :$b");
  }
}

通过代码可以看出在main函数中首先创建了两个man对象,在man类中,重新定义了“+”,“-”运算符,这其中,operator关键字必须写上,运算符后面的括号中代表的是传入的参数类型和形参。

在方法体中,return也是必要的,后面跟着需要返回的对象或类型。

其实通过参考C++的重载运算符不难发现,不论是Dart还是C++,我们在学习时候可以把它理解为本质是一种函数调用,只不过是一种加了operator关键字的函数,后面的运算符也就是我们需要被重载的运算符,在函数调用的过程中使用运算符调用了相关函数。

这样做的好处就是我们可以做一些传统意义上运算符做不了的操作,就像上面这段代码例子中的man1和man2进行加减操作一样,在类似于Java这样的语言中,肯定是不允许两个对象直接做加减运算的,但是Dart的重载运算符特性可以让我们重新定义运算符的一些计算规则。

相信你看了以上的介绍一定对Dart的重载运算符有了一定的了解,但凡是都有例外,Dart中限定了一些可以被重载的运算符,这里贴一个Flutter官网关于Dart重载运算符的规定吧:

Overridable operators(可覆写的操作符)

下表中的操作符可以被覆写。 例如,如果你定义了一个 Vector 类, 你可以定义一个 + 函数来实现两个向量相加。

< + | []
> / ^ []=
<= ~/ & ~
>= * << ==
% >>  
发布了41 篇原创文章 · 获赞 8 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/huma8848888/article/details/96710878