flutter【4】dart語言--操作符

先說下題外話哈,最近做了個(gè)領(lǐng)取電商平臺(tái)優(yōu)惠券的小程序,掃碼支持下哈~


image

操作符

詳細(xì)的各個(gè)操作符的作用不再贅述,參考官網(wǎng)-操作符一覽表 。

操作符可以進(jìn)行覆寫,參考Overridable operators

操作結(jié)果類型

操作符左右兩邊的操作對(duì)象不一致時(shí),操作結(jié)果以左側(cè)操作對(duì)象類型為準(zhǔn)。

下面介紹一些 dart中比較特殊的操作符。

相等操作符

== 操作符判斷兩個(gè)對(duì)象表示的東西是否一樣,如果兩個(gè)對(duì)象都是 null 返回true,如果有一個(gè)是 null ,返回 false。== 操作符其實(shí)就是返回 x.==(y) 的值,可以被覆寫。

如果需要嚴(yán)格的對(duì)比兩個(gè)對(duì)象,則使用 identical() 方法。

類型檢查操作符

  • as:類型轉(zhuǎn)換(也用來作為 library 前綴)
  • is:對(duì)象是定義類型則返回 true,當(dāng)對(duì)象是定義類型的子類或者實(shí)現(xiàn)類時(shí),也返回 true
  • is!:對(duì)象是定義類型則返回 false

as 操作符可以將對(duì)象類型判斷和使用兩個(gè)行為進(jìn)行合并,如下:

//is 方式
if (emp is Person) {
  // Type check
  emp.firstName = 'Bob';
}

//as 方式,注意當(dāng) emp 為 null 或者不是 Person類型時(shí),會(huì)拋出異常
(emp as Person).firstName = 'Bob';

賦值操作符

一般結(jié)構(gòu)為 po= ,如 ??= 表示當(dāng)左邊變量為 null 時(shí),將右邊的值賦給左邊變量。

// Assign value to b if b is null; otherwise, b stays the same
b ??= value;

條件操作符

  • condition ? expr1 : expr2 :滿足條件返回 expre1,否則返回expre2
  • expr1 ?? expr2:expre1 不為 null時(shí)返回 expre1,否則返回 expre2
var visibility = isPublic ? 'public' : 'private';

String playerName(String name) => name ?? 'Guest';

級(jí)聯(lián)操作符(..)

使用 .. 操作符可以對(duì)同一對(duì)象執(zhí)行一系列操作,能夠節(jié)省中間步驟和臨時(shí)變量,讓代碼更高效。

其實(shí)嚴(yán)格來說, .. 級(jí)聯(lián)語法不是一個(gè)操作符。 只是一個(gè) Dart 特殊語法。

querySelector('#confirm') // Get an object.
  ..text = 'Confirm' // Use its members.
  ..classes.add('important')
  ..onClick.listen((e) => window.alert('Confirmed!'));

另外 .. 操作符可以嵌套使用

final addressBook = (AddressBookBuilder()
      ..name = 'jenny'
      ..email = 'jenny@example.com'
      ..phone = (PhoneNumberBuilder()
            ..number = '415-555-0100'
            ..label = 'home')
          .build())
    .build();

需要注意的是在方法上使用級(jí)聯(lián)操作符很容易出錯(cuò),例如下面代碼就會(huì)出錯(cuò)。

// Does not work
var sb = new StringBuffer();
//sb.write() 函數(shù)返回一個(gè) void, 無法在 void 上使用級(jí)聯(lián)操作符。
sb.write('foo')..write('bar');

條件成員訪問符(?.)

和 . 類似,但是左邊的操作對(duì)象不能為 null,例如 foo?.bar 如果 foo 為 null 則返回 null,否則返回 bar 成員

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容