Flutter基于Dart Unwrapping Multiple Optional小技巧
正文
接收到這樣一個(gè)需求,就是英文名字中firstName和lastName,其中任何一個(gè)為null,就返回Empty。
剛拿到需求,這不簡(jiǎn)單,if判斷不就可以了
if (firstName == null || lastName == null) { return 'Empty'; } return '$firstName $lastName';
確實(shí),30秒搞定了。
withAll函數(shù)
自己想能不能再有更好一點(diǎn)的思路呢?可以更拓展一點(diǎn)的, 例如說(shuō)三個(gè)字符串呢? 例如不是字符串,而是Object類型的呢?
于是就有了下面的代碼
提供一個(gè)withAll函數(shù),這個(gè)函數(shù)檢查整個(gè)列表的空值,如果發(fā)現(xiàn)任何空值,回調(diào)將不會(huì)被調(diào)用,如果列表沒(méi)有空值,回調(diào)將調(diào)用整個(gè)列表轉(zhuǎn)換為非可選項(xiàng)列表T
T? withAll<T>( List<T?> optionals, T Function<List<T>> callback, ) => optionals.any((e) => e == null) ? null : callback(optionals.cast<T>());
然后添加一個(gè)方法,調(diào)用withAll函數(shù),為他提供可選值列表,只有當(dāng)列表不包含任何空值的時(shí)候才會(huì)調(diào)用回調(diào)
String getFullName( String? firstName, String? lastName, ) => withAll([ firstName, lastName, ], (names) => names.join(' ')) ?? 'Empty';
測(cè)試一下
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 }
哈哈,這代碼可拓展性一下子就上來(lái)了,而且特別像官方API。
今天增加了一個(gè)讓別人看不懂代碼的小思考。
以上就是Flutter基于Dart Unwrapping Multiple Optional小技巧的詳細(xì)內(nèi)容,更多關(guān)于Flutter Dart Multiple Optional的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
關(guān)于Android 6.0權(quán)限的動(dòng)態(tài)適配詳解
Android 6.0版本(Api 23)推出了很多新的特性, 大幅提升了用戶體驗(yàn), 同時(shí)也為程序員帶來(lái)新的負(fù)擔(dān). 動(dòng)態(tài)權(quán)限管理就是這樣, 一方面讓用戶更加容易的控制自己的隱私, 一方面需要重新適配應(yīng)用權(quán)限,本文介紹了關(guān)于Android 6.0權(quán)限動(dòng)態(tài)適配的相關(guān)資料,需要的朋友可以參考下。2017-11-11php 異步調(diào)用方法實(shí)現(xiàn)示例
客戶端與服務(wù)器端是通過(guò)HTTP協(xié)議進(jìn)行連接通訊,客戶端發(fā)起請(qǐng)求,服務(wù)器端接收到請(qǐng)求后執(zhí)行處理,并返回處理結(jié)果2014-01-01Android實(shí)現(xiàn)QQ手機(jī)管家懸浮小火箭效果
這篇文章主要介紹了Android實(shí)現(xiàn)QQ手機(jī)管家懸浮小火箭效果,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05Android入門之使用eclipse進(jìn)行源碼開發(fā)的方法
這篇文章主要介紹了Android入門之使用eclipse進(jìn)行源碼開發(fā)的方法,較為詳細(xì)的分析了使用eclipse進(jìn)行Android源碼開發(fā)的具體步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-02-02Android項(xiàng)目仿UC瀏覽器和360手機(jī)衛(wèi)士消息常駐欄(通知欄)
本篇文章主要介紹了Android項(xiàng)目仿UC瀏覽器和360手機(jī)衛(wèi)士消息常駐欄(通知欄),可以仿照360的通知欄,有興趣的可以了解一下。2016-11-11android判斷點(diǎn)擊位置是否在扇形區(qū)域內(nèi)
這篇文章主要為大家詳細(xì)介紹了android判斷點(diǎn)擊位置是否在扇形區(qū)域內(nèi),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05Android指紋識(shí)別功能深入淺出分析到實(shí)戰(zhàn)(6.0以下系統(tǒng)解決方案)
指紋識(shí)別在現(xiàn)實(shí)應(yīng)用中已經(jīng)很多了,本篇文章主要介紹了Android指紋識(shí)別功能,具有一定的參考價(jià)值,有需要的可以了解一下。2016-11-11Android通過(guò)單點(diǎn)觸摸移動(dòng)圖片
這篇文章主要為大家詳細(xì)介紹了Android通過(guò)單點(diǎn)觸摸移動(dòng)圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04Android編程之控件狀態(tài)配置文件實(shí)例
這篇文章主要介紹了Android編程之控件狀態(tài)配置文件,以實(shí)例形式分析了Android控件狀態(tài)配置文件對(duì)于選中、獲得焦點(diǎn)、按下時(shí)的狀態(tài)等相關(guān)設(shè)置技巧,需要的朋友可以參考下2016-01-01