Dart-级联运算符

级联运算符(..)

参考教程:

1. 什么是级联运算符

class Model {
  String hello(String name) {
    var value = 'hello $name';
    print(value);
    return value;
  }
  
  void sayHi(String name) {
    print("hi $name");  
  }
  
  void sayGoodbye(String name) {
    print('goodbye $name');
  }
}

// 针对`Model`类基本的用法是:
var model = Model()
model.hello('world')
model.sayHi('bill')
model.sayGoodbye('bill');

// 但是dart提供了更加简便的打开方式,级联(..)
// 下面的代码等效于上面的传统调用方式。
var model = Model()
  ..hello('world')
  ..sayHi('bill')
  ..sayGoodbye('bill');

2. 级联运算符有啥作用

偷懒 + 整齐

3. 级联在各种类型上的实践

  • 自定义类
  • 数组(列表List)
  • 字典(Map)
  • 字符串和StringBuffer
  • 异步方法
void main() {
  // 针对自定义类的调用,中规中矩
  // 需要注意的是`hello()`方法,它有返回值,但是级联调用后
  // 返回值丢失了
  var model = Model()
    ..hello('world')
    ..sayHi('bill')
    ..sayGoodbye('bill');
  /*
   output: 
   hello world
   hi bill
   goodbye bill
   */ 
  
  // 针对列表的级联
  List<int> listInt = List()
    ..add(0)
    ..add(1)
    ..add(2)
    ..removeAt(1);
  print(listInt); // output: [0, 2]
  
  // 针对字典的级联
  Map<String,dynamic> aMap = Map()
    ..putIfAbsent('name', ()=>'bill')
    ..putIfAbsent('name', ()=>'gate')
    ..addAll({'sex':'male', 'age':1})
    ..remove('age');
  print(aMap); // output: {name: bill, sex: male}
  
  // 一个Bug示范:对字符串的级联add,add结果均抛弃了
  // 最后输出的是原字符串
  String aStr = ''
    ..add('line1\n')
    ..add('line2\n')
    ..add('line3');
  print('aStr:${aStr}_${aStr.length}'); // output: aStr:_0
  
  // 可变字符串的正确打开方式
  StringBuffer aStr2 = StringBuffer()
    ..write('hello ')
    ..write('world');
  print('aStr2:${aStr2}_${aStr2.length}'); // aStr2:hello world_11
  
  // 对异步方法处理
  // 由于异步方法的触发并需要特殊条件,所以级联调用跟普通方法一样
  // 区别是异步方法仍然会异步执行,某段时间后才会执行。
  class Model {
    ..
    Future<void> asyncSayHi(String name) {
            return Future.delayed(Duration(seconds: 1), (){
                    print('say hi from future $name');
            }); 
     }
  }
  
  var model1 = Model()
    ..hello('world')
    ..sayHi('bill')
    ..sayGoodbye('bill')
    ..asyncSayHi('bill');
  // output:
  // hello world
  // hi bill
  // goodbye bill
  // ..(其他输出)
  // say hi from future bill
  
  // 目前的使用场景-解析json到对象
  static Attachment json2Attachment(dynamic json) {
    if (json == null || json is Map == false) { return null; }
    
    var result =  Attachment()
      ..id = '${json["id"]}'
      ..filename = json["filename"]
      ..contentId = json["contentId"]
      ..contentType = json["contentType"]
      ..encoding = json["encoding"]
      ..estimateSize = json["estimateSize"]
      ..contentLength = json["contentLength"]
      ..inlined = json["inlined"]
      ..type = json["type"];
    return result;
  }

总结

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

推荐阅读更多精彩内容