日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Flutter基于Dart?Unwrapping?Multiple?Optional小技巧_Android

作者:程序員界的小學生 ? 更新時間: 2023-01-07 編程語言

正文

接收到這樣一個需求,就是英文名字中firstName和lastName,其中任何一個為null,就返回Empty。

剛拿到需求,這不簡單,if判斷不就可以了

if (firstName == null || lastName == null) {
    return 'Empty';
} 
return '$firstName $lastName';

確實,30秒搞定了。

withAll函數

自己想能不能再有更好一點的思路呢?可以更拓展一點的, 例如說三個字符串呢? 例如不是字符串,而是Object類型的呢?

于是就有了下面的代碼

提供一個withAll函數,這個函數檢查整個列表的空值,如果發現任何空值,回調將不會被調用,如果列表沒有空值,回調將調用整個列表轉換為非可選項列表T

T? withAll<T>(
    List<T?> optionals,
    T Function<List<T>> callback,
) => optionals.any((e) => e == null)
        ? null
        : callback(optionals.cast<T>());

然后添加一個方法,調用withAll函數,為他提供可選值列表,只有當列表不包含任何空值的時候才會調用回調

String getFullName(
    String? firstName,
    String? lastName,
) => withAll([
        firstName,
        lastName,
    ], (names) => names.join(' ')) ?? 'Empty';

測試一下

void main(List<String> args) {
    print(getFullName(null, null));// Empty
    print(getFullName('John', null));// Empty
    print(getFullName(null, 'Deo'));// Empty 
    print(getFullName('John', 'Deo'));// John Deo
}

哈哈,這代碼可拓展性一下子就上來了,而且特別像官方API。

今天增加了一個讓別人看不懂代碼的小思考。

原文鏈接:https://juejin.cn/post/7172039787447058468

欄目分類
最近更新