Flutter基于Dart Unwrapping Multiple Optional小技巧
作者:程序员界的小学生 发布时间:2023-07-05 11:44:19
标签:Flutter,Dart,Multiple,Optional
接收到这样一个需求,就是英文名字中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


猜你喜欢
- 很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友。对于软件配置参数的保存,
- 在实际开发中,我们经常会需要在页面跳转的时候携带路由参数,典型的例子就是从列表到详情页的时候,需要携带详情的 id,以便详情页获取对应的数据
- 已知两个链表list1和list,2,各自非降序排列,将它们合并成另外一个链表list3,并且依然有序,要求保留所有节点。实现过程中,lis
- yaml语法注解配置文件两种形式application.properties和.yaml第一种语法 key=value第二种key:空格va
- flutter material widget组件之信息展示组件,供大家参考,具体内容如下widget分为两类:widgets librar
- 报错翻译: compileSdkVersion android-24”需要JDK 1.8或更高版本编译。报错现象如下图:原因:st
- 1.返回ModelAndView对象(.jsp)controller代码:package controller;import java.ut
- 本Demo为练手小项目,主要是熟悉目前主流APP的架构模式.此项目中采用MVC设计模式,纯代码和少许XIB方式实现.主要实现了朋友圈功能和摇
- 一、Monkey 是什么?Monkey 就是SDK中附带的一个工具。二、Monkey 测试的目的?:该工具用于进行压力测试。 然后开发人员结
- forward_list 概述forward_list 是 C++ 11 新增的容器,它的实现为单链表。forward_list 是支持从容
- webp格式图片webp格式图片是google推出的,相比jpg png有着巨大的优势,同样质量的图片webp格式的图片占用空间更小,在像电
- 参考:How to catch an Exception from a threadIs there a way to make Runna
- springboot项目启动慢的问题排查springboot项目,随着时间的推移,启动耗时逐步增加,从几分钟慢慢的达到30多分钟,有点恐怖!
- 光流的概念是由一个叫Gibson的哥们在1950年提出来的。它描述是空间运动物体在观察成像平面上的像素运动的瞬时速度,利用图像序列中像素在时
- 本文实例为大家分享了Android实现支付宝支付密码输入界面的具体代码,供大家参考,具体内容如下效果图:主要代码:import java.u
- 什么是JMMJMM全称Java Memory Model, 中文翻译Java内存模型,一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问
- 前言通过此篇文章,你将了解到:Flutter windows和Android桌面应用屏幕适配的解决方案;屏幕适配的相关知识和原理;flutt
- Lambda 表达式Lambda 表达式是现代 C++ 中最重要的特性之一,而 Lambda 表达式,实际上就是提供了一个类似匿名函数的特性
- 为什么要使用路由在之前我们的代码中,页面跳转使用的代码如下所示:Navigator.of(context).push( Mate
- 大致分为以下几个方面:一些查询指令整理使用SQL语句进行特殊查询检测表字段是否存在数据库升级数据库表字段赋初始值一、查询指令整理1.链式执行