带你Dart带你Diao之操作符

笔者这次主要讲的是Dart 中定义的操作符,核心内容如下

  1. 操作符表
  2. 算术操作符
  3. 相等相关的操作符
  4. 赋值操作符
  5. 逻辑操作符
  6. 条件表达式
  7. 级联操作符
  8. 其余操作符

操作符一表览

dart操作符.png

在上面的操作符表格中所列的操作符都是按照优先级顺序从左到右,从上到下的方式来列出的,上面和左边的操作符优先级要高于下面和右边的。例如%操作符优先级高于 ==,而等号高于 &&。

算术操作符

算术操作符.png

这些都很简单,唯一需要注意的一个是'~/'和'/'一样也表示除号,但它除过的结果是整数。

Dart也是支持递增、递减前缀和后缀操作

++var   var = var + 1 (该表达式的结果是var+1)

var++   var = var + 1 (该表达式的结果是var,下一次用到该变量时var的值是var+1)

--var   var = var – 1 (该表达式的结果是var-1)

var--   var = var – 1 (该表达式的结果是var,下一次用到该变量时var的值是var-1)

关于递增递减这些操作的规则和其他大多数语言都是一样的。

相等相关的操作符

==  相等
!=  不等
>   大于
<   小于
>=  大于等于
<=  小于等于

要测试两个对象代表的是否为同样的内容,使用 == 操作符

在某些情况下,你需要知道两个对象是否是同一个对象,使用identical()方法。

类型判定操作符

as、 is、 和 is! 操作符是在运行时判定对象 类型的操作符

as  类型转换
is  如果对象是指定的类型返回 True
is! 如果对象是指定的类型返回 False

只有当obj实现了T的接口,obj is T才是 true。例如 obj is Object总是 true

举栗子

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

//上述代码简写
(emp as Person).firstName = 'Bob';

上面这两个代码效果是有区别的。如果emp是null或者不是Person 类型, 则第一个示例使用is则不会执行条件里面的代码,而第二个情况使用 as 则会抛出异常。

赋值操作符

使用 = 操作符来赋值。 但是还有一个 ??= 操作符用来指定 值为 null的变量的值。

a = value;   // 给 a 变量赋值
b ??= value; // 如果 b 是 null,则赋值给 b;
             // 如果不是 null,则 b 的值保持不变

逻辑操作符

!expr   对表达式结果取反(true 变为 false ,false 变为 true)
||      逻辑 OR
&&      逻辑 AND

条件表达式

Dart 有两个特殊的操作符可以用来替代 if-else 语句:

condition ? expr1 : expr2

//栗子
var finalStatus = m.isFinal ? 'final' : 'not final';

如果 condition 是 true,执行 expr1 (并返回执行的结果),否则执行 expr2 并返回其结果。

expr1 ?? expr2

//栗子
String toString() => msg ?? super.toString();

如果 expr1 是 non-null,返回其值,否则执行 expr2 并返回其结果。

级联操作符

级联操作符 (..) 可以在同一个对象上连续调用多个函数以及访问成员变量。使用级联操作符可以避免创建临时变量, 并且写出来的代码看起来更加流畅

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

第一个方法 querySelector() 返回了一个 selector 对象。 后面的级联操作符都是调用这个对象的成员, 并忽略每个操作 所返回的值。

等价于这样写

var button = querySelector('#button');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));

可以看出来用级联操作符可以避免创建了临时变量,代码看起来更简洁。它还可以嵌套使用

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

严格来说, 两个点的级联语法不是一个操作符。 只是一个 Dart 特殊语法

其余操作符

()      代表调用一个方法
[]      访问 list 中特定位置的元素
.       访问元素,例如 foo.bar 代表访问 foo 的 bar 成员
?.      和 . 类似,但是左边的操作对象不能为 null,例如 foo?.bar 如果 foo 为 null 则返回 null,否则返回 bar 成员
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容