Scala学习笔记18: Either 类型
目录
第十八章 Either 类型
Either
类型是Scala函数式编程中处理可能失败操作的重要工具 ;
它提供了一种类型安全、优雅的方式来表达成功和失败两张可能性, 使代码更易读、更易维护 .
1- Either 语义: 两种可能的容器
Either
字面意思是’两者之一’, 它表示一个值可能属于两种类型之一 ; Either
有两个子类型: Left
和 Right
;
Right
代表操作成功, 并包含成功的结果值 ; 通常, 我们会将Right
视为默认的 ‘好’ 路径 ;Left
代表操作失败, 并包含失败的原因; 这个原因可以是异常信息、错误码、或者任何能解释失败的信息 ;
Either
的强大之处在于它强制开发者在使用结果之前考虑两种可能性, 从而避免潜在的错误, 例如臭名昭著的 NullPointerException
;
2- 创建 Either 实例
创建 Either
实例非常简单, 可以使用 Left
或 Right
的构造方法:
// 创建一个表示成功的 Either, 值为INT 类型
val success: Either[String, Int] = Right(1)
// 创建一个表示失败的 Either, 值为String 类型
val failure: Either[String, Int] = Left("error!!!")
需要注意的是, Left
和 Right
的类型参数需要与 Either
的类型参数一致 .
3- Either 用法
3.1 模式匹配
可以使用模式匹配来处理 Either
的结果:
// 创建一个表示成功的 Either, 值为INT 类型
val success: Either[String, Int] = Right(10)
// 创建一个表示失败的 Either, 值为String 类型
val failure: Either[String, Int] = Left("error!!!")
success match {
case Right(value) => println(value)
case Left(error) => println(error)
}
// Output: 10
3.2 fold
方法
Either
提供了一个 fold
方法, 可以更简洁地处理两种情况 :
// 创建一个表示成功的 Either, 值为INT 类型
val success: Either[String, Int] = Right(10)
// 创建一个表示失败的 Either, 值为String 类型
val failure: Either[String, Int] = Left("error!!!")
val result = success.fold(
error => s"操作失败: $error", // 处理 Left 的情况
value => s"操作成功: $value" // 处理 Right 的情况
)
println(result) // Output: 操作成功: 10
3.3 函数式操作
Scala 2.12 或更高版本 Either
支持 map
、 flatMap
、 filter
等高阶函数, 方便进行函数式操作:
val maybeInt: Either[String, Int] = Right(6)
// 使用 `map` 函数对 Right 中的值进行操作
val maybeDouble: Either[String, Double] = maybeInt.map(_ * 2.5)
// 使用 `flatMap` 函数进行链式操作
val result: Either[String, Int] = for {
i <- maybeInt.right // 注意这里使用 Right 投影
j <- Right(i + 100 * i + 10 * i).right
} yield j
println(result) // Right(666)
3.4 与其他类型的结合
Either
可以与其他类型结合使用, 例如: Option
:
val maybeValue: Option[Either[String, Int]] = Some(Right(10))
val result = maybeValue match {
case Some(Right(value)) => s"The value is $value ;"
case Some(Left(error)) => s"There was an error: $error ;"
case None => "There is no value !"
}
println(result) // Output: The value is 10 ;
4- 总结
Either
类型为 Scala 开发者提供了一种更优雅、更安全的方式来处理可能失败的操作 ;
它鼓励开发在代码中显式地处理成功和失败两种情况, 从而提高代码的健壮性和可读性 .
end
原文地址:https://blog.csdn.net/Taerge0110/article/details/140501155
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!