網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
Flutter基于Dart?Unwrapping?Multiple?Optional小技巧_Android
作者:程序員界的小學(xué)生 ? 更新時(shí)間: 2023-01-07 編程語(yǔ)言正文
接收到這樣一個(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è)讓別人看不懂代碼的小思考。
原文鏈接:https://juejin.cn/post/7172039787447058468
相關(guān)推薦
- 2022-08-02 Python?的矩陣傳播機(jī)制Broadcasting和矩陣運(yùn)算_python
- 2022-07-03 無(wú)緩沖channel的內(nèi)存泄漏問(wèn)題
- 2022-11-05 python中的bisect模塊與二分查找詳情_(kāi)python
- 2022-12-08 C++?Boost?PropertyTree示例超詳細(xì)講解_C 語(yǔ)言
- 2022-12-08 C/C++高精度運(yùn)算(大整數(shù)運(yùn)算)詳細(xì)講解_C 語(yǔ)言
- 2022-05-15 c++11?實(shí)現(xiàn)枚舉值到枚舉名的轉(zhuǎn)換問(wèn)題_C 語(yǔ)言
- 2022-05-22 Nginx服務(wù)LNMP之WordPress部署流程步驟_nginx
- 2023-04-01 Android自定義View?Material?Design理念詳解_Android
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支