用return替换map或flatMap并在Scala中试用,这是一种糟糕的风格吗?

用return替换map或flatMap并在Scala中试用,这是一种糟糕的风格吗?,scala,Scala,我想知道用return替换map并尝试可读性是否是一种糟糕的代码风格?假设我有一个变量,里面有Try,然后我需要对它做任何事情 val myData: Try[String] 我可以做到: myData.flatMap{ some long code } if (myData.isFailure) return myData val myString = myData.get some long code that use myString 或者我可以: if (myData.isFa

我想知道用return替换map并尝试可读性是否是一种糟糕的代码风格?假设我有一个变量,里面有Try,然后我需要对它做任何事情

val myData: Try[String] 
我可以做到:

myData.flatMap{
 some long code
}
if (myData.isFailure) return myData
val myString = myData.get
some long code that use myString
或者我可以:

if (myData.isFailure) return myData
val myString = myData.get
some long code that use myString

是的,我认为这是不好的风格。作为一名程序员,我最大的收获之一就是用表达式替换语句。因此,我将使用模式匹配重写您的示例

myData match {
  case Success(myString) =>
    some long code that use myString
  case Failure(_) => tFileDf
}
我理解,如果防护在java和C#等语言中非常常见,那么在这些情况下,它们甚至可以使代码更易于阅读。自从迁移到Scala之后,我发现如果警卫能够改进我的代码的情况就少了。然而,迁移到表达式大大提高了我所有代码的质量

一旦你做了这个改变,你将逐渐减少可变状态和副作用。渐渐地,您的方法将成为纯函数。它们可能会变短。然后您将发现总体功能的好处。这些东西改进了所有代码,如果防护是本地优化,那么这些优化将开始与现代scala代码冲突,甚至使其容易出错

在上述情况下,我可能会考虑暴露<代码>尝试,这会更明显地公开失败案例,而不是返回相同返回类型的默认值或错误值。

不鼓励使用
return
的另一个原因是它在函数中的作用并不总是很好


我的建议是接受Scala更具功能性的方面,看看它会把你带到哪里。与Java中的同类软件相比,它会花费更多的时间来编写,而且会很快产生回报。

是的,我认为这是一种糟糕的风格。作为一名程序员,我最大的收获之一就是用表达式替换语句。因此,我将使用模式匹配重写您的示例

myData match {
  case Success(myString) =>
    some long code that use myString
  case Failure(_) => tFileDf
}
我理解,如果防护在java和C#等语言中非常常见,那么在这些情况下,它们甚至可以使代码更易于阅读。自从迁移到Scala之后,我发现如果警卫能够改进我的代码的情况就少了。然而,迁移到表达式大大提高了我所有代码的质量

一旦你做了这个改变,你将逐渐减少可变状态和副作用。渐渐地,您的方法将成为纯函数。它们可能会变短。然后您将发现总体功能的好处。这些东西改进了所有代码,如果防护是本地优化,那么这些优化将开始与现代scala代码冲突,甚至使其容易出错

在上述情况下,我可能会考虑暴露<代码>尝试,这会更明显地公开失败案例,而不是返回相同返回类型的默认值或错误值。

不鼓励使用
return
的另一个原因是它在函数中的作用并不总是很好


我的建议是接受Scala更具功能性的方面,看看它会把你带到哪里。与Java中的同类软件相比,它会花费更多的时间来编写,而且会很快产生回报。

这是一个基于观点的问题。我建议,如果您需要从基础to提取结果,请使用
getOrElse
,或者使用模式匹配:为什么您要说这是基于选项的问题?我实际上是在说尝试。但是,是的,同样的技术也可以用于Option你的问题标题是“使用…是否是错误的代码?”。坏代码是主观的。是的。也许我应该问功能性风格代码使用什么更好这不是一个“基于选项的问题”。这是一个基于意见的问题,这违反了SO准则。这是一个基于意见的问题。我建议,如果您需要从基础to提取结果,请使用
getOrElse
,或者使用模式匹配:为什么您要说这是基于选项的问题?我实际上是在说尝试。但是,是的,同样的技术也可以用于Option你的问题标题是“使用…是否是错误的代码?”。坏代码是主观的。是的。也许我应该问功能性风格代码使用什么更好这不是一个“基于选项的问题”。这是一个基于意见的问题,这与SO准则背道而驰。