Flutter的Either模块中Left与Right分别是什么?
Dart中Left、Right的作用及原理
核心本质
Left和Right是函数式编程错误处理模型Either的两个子类,核心遵循左错右对的行业通用约定:
- 泛型定义为
Either<L, R>,Left<L, R>用来承载错误类型L的结果 Right<L, R>用来承载正常返回类型R的结果
核心用途
- 显式标记函数的返回结果可能性:只要函数返回值是
Either类型,调用方就可以明确知道这个函数执行可能出错,必须同时处理成功、失败两种场景 - 替代传统异常抛出的错误处理模式:避免运行时未捕获异常导致的崩溃,两种返回结果的类型都是编译期可校验的,代码健壮性更高
结合你提供的代码示例说明
你贴出的业务代码逻辑非常典型:
try { return Right(_doSomethingAndReturnSingleValue()); } on CustomException { return Left(CustomException()); }
这段逻辑的作用就是把原本会抛出异常的逻辑封装成Either类型返回:
- 当
_doSomethingAndReturnSingleValue()执行无异常时,把返回值包裹在Right中返回,代表这是成功结果 - 当执行抛出
CustomException类型异常时,把异常对象包裹在Left中返回,代表这是错误结果
调用方可以直接通过Either自带的fold方法统一处理两种场景,不需要再嵌套try-catch:
final res = executeFunction(); res.fold( (err) { // 处理错误逻辑,比如提示用户操作失败 }, (data) { // 处理成功逻辑,比如渲染返回的业务数据 } );
fold方法会根据返回的是Left还是Right自动执行对应的回调,强制调用方必须同时处理两种场景,避免漏处理错误的问题。
内容的提问来源于stack exchange,提问作者Turkey
相关产品推荐
相关产品推荐

