Flutter Package系列 --- fpdart

fpdart 是 Dart 和 Flutter 中函数式编程的软件包。 fpdart 的目标是让开发人员能够在其应用程序中学习和使用函数式编程,提供了许多其他函数式语言开箱即用的所有主要函数式编程类型。

yaml 复制代码
# pubspec.yaml
dependencies: 
  fpdart: ^1.1.0

Option

使用Option 处理缺失值。您可以将类型定义为 Option ,而不是使用 null,会产生更佳简洁的写法

ini 复制代码
/// 一般对于null 的处理
const int? a = null;
int result = 0;
if (a != null) { 
   result = a * 2;
} 
/// 使用Option 对null 的处理
final Option<int> b = none<int>(); 
final result = b.getOrElse(() => 0) * 2;

当函数在某些边缘情况下无法返回值时,这非常有用。如果不想抛出异常(不建议抛出异常的做法),可以使用 Option。

scss 复制代码
/// 抛出异常 Exception 方式
double divide(int x, int y) { 
  if (y == 0) { 、
    throw Exception('Cannot divide by 0!'); 
  } 
  return x / y;
} 
/// Option 方式
Option<double> divideF(int x, int y) {
  if (y == 0) { 
      return none(); 
  } 
  return some(x / y);
}

Either

在使用Dartz 针对网络请求进行封装一文中我们也介绍了这个Either,这里也简单的说明一下。

Either 用于处理错误。 Either 可以是 Right 或 Left(不能两者兼而有之!)。 Right 包含函数成功时返回的值,Left 包含函数失败时的一些错误或消息。

arduino 复制代码
/// 抛出异常的做法 
double divide(int x, int y) { 
   if (y == 0) { 
      throw Exception('Cannot divide by 0!'); 
   } 
   return x / y;
} 
/// Error 的做法
Either<String, double> divide(int x, int y) { 
   if (y == 0) { 
       return left('Cannot divide by 0'); 
   }
   return right(x / y);
 }

Task

Task允许您以更可组合的方式运行异步函数:

正常的异步

javascript 复制代码
/// 一般做法
Future<int> async() { 
   return Future.value(10).then((value) => value * 10);
} 
/// Task 做法
Task<int> asyncF() { 
  return Task(() async => 10).map((a) => a * 10);
}

发生异常的异步

对于可能出现异常的情况,可以使用下面的做法。

dart 复制代码
/// catchError 的做法
Future<int> async() { 
   return Future<int>.error('Some error!') .then((value) => value * 10)    
                      .catchError((dynamic error) => print(error));
} 
/// TaskEither 的做法
TaskEither<String, int> async() { 
return TaskEither<String, int>( () async => left('Some error'), ).map((r) => r * 10);
}

结尾

更多的使用方法,请查看一下链接pub.dev/packages/fp...

相关推荐
flash俊杰26 分钟前
屏幕感知双通道:截图之外,为什么还要一份 UIA 控件清单
前端
熟的生菜26 分钟前
从零造一个腱绳驱动灵巧手——仿真器篇3:VTK 渲染与 3D 交互——看得见、点得着、转得动
前端
Henry-SAP2 小时前
SAP PP中的核心业务流程——离散制造、重复制造、流程制造三大模式解析
前端·数据库·人工智能·制造
徐小夕2 小时前
下载量超 30 万的开源智能体 Prime Agent:它把自己从 TypeScript 重写成了 Rust
前端·vue.js·github
Zhao-Jichao2 小时前
AI Prompting for Everyone 课程笔记 - P20 实验与期末项目 Lab and Final Project
前端·人工智能·笔记
行者-全栈开发2 小时前
Flutter 插件 device_calendar_plus 开源鸿蒙适配实战:从权限弹窗失灵到循环日程跑通
flutter·跨平台·harmonyos·arkts·日历·适配·开源鸿蒙
Moment2 小时前
为什么这么多 Agent Harness 都选择 TypeScript
前端·后端·面试
toooooop82 小时前
CRMEB 故障排查笔记:安全网关只放行 GET/POST 怎么办
前端·javascript·vue.js·thinkphp6·crmeb
涛涛ing3 小时前
我现在最怕的不是 AI 写不出代码,是它写得太快,快到我不好意思说“等一下”
前端
AllData公司负责人3 小时前
【产品便捷使用一】AIIData 数据中台:企业基础版核心能力支持,一站式全链路数据处理实操指南
大数据·前端·数据治理·数据可视化·数据开发·数据服务·数据接入