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
0
投稿
猜你喜欢
- spring与IoCIoC:控制反转,将由代码操纵的对象控制权,交给第三方容器,反转给第三方容器。这种对象依赖的关系管理方式,称作IoC。I
- 本文实例讲述了Android启动画面的实现方法。分享给大家供大家参考。具体分析如下:在应用程序中经常用到启动画面,会启动一个后台线程为主程序
- 前言本文主要给大家介绍了关于Android模仿美团顶部滑动菜单的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。先
- 本文实例讲述了Java实现批量向mysql写入数据的方法。分享给大家供大家参考,具体如下:private static String use
- 先决条件先运行mongodb肯定是必须的,然后导入以下包:import com.mongodb.MongoClient;import com
- 实例如下所示:public class JsonExtracter { public static void main(String[] a
- 之前的文章向大家介绍了几个项目中常用的实用功能,那么在这篇文中,我将向大家介绍如何获取Android手机中已经安装的手机应用程序,好了,废话
- 实现代码超简单,具体实现方法如下:有时候当我们的游戏人物遇敌时,我们需我怪物随机根据概率选择处理方式,如下:1、50%的机会友好的问候2、2
- 本文提供了基于MD5加密16位和32位的方法,具体内容如下import java.io.IOException;import java.ma
- 本文实例讲述了Android中WebView用法。分享给大家供大家参考,具体如下:WebView相当于一个迷你浏览器,采用WebKit内核,
- 二叉树的结构public class TreeNode { int val; &nbs
- 拆分字符串:这个可以使用两次分割,第一次使用 | 分割,放到arr数组里,然后使用循环对arr[i]进行使用:分割public static
- 一、什么是稀疏数组当一个数组a中大部分元素为0,或者为同一个值,那么可以用稀疏数组b来保存数组a。首先,稀疏数组是一个数组,然后以一种特定的
- 随着kotlin在Android开发领域越来越火,协程在各个项目中的应用也逐渐变得广泛但是协程到底是什么呢?协程其实是个古老的概念,已经非常
- 详解C#使用AD(Active Directory)验证内网用户名密码1. 连到内网,找到AD的domain地址nslookup set t
- java生成json时产生栈溢出错误环境java + hibernate +html本来,java中使用json事件很正常的事,但小心有的地
- collect通知flow执行public suspend inline fun <T> Flow<T>.colle
- Java代码package com.zzx.controller;import com.zzx.model.User;import org.
- 1.介绍有时候我们在Linux中运行Java程序时,需要调用一些Shell命令和脚本。而Runtime.getRuntime().exec(
- 简介最近几年,各种新的高效序列化方式层出不穷,不断刷新序列化性能的上限,最典型的包括:专门针对Java语言的:Kryo,FST等等跨语言的: