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 類, 你可以定義一個 + 函數來實現兩個向量相加。

< + | []
> / ^ []=
<= ~/ & ~
>= * << ==
% >>  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章