在函数式编程中,模式匹配相较于条件语句有哪些优势?(通俗易懂地解释)

5
以通俗易懂的方式来说,除了历史原因外,模式匹配有哪些好处?我发现大多数答案超出了我的理解范围(例如,我不明白堆分配与此有什么关系)。
我有Python背景,最近才重新开始学习Haskell。
所以在其他语言的上下文中,我很难理解其他答案。

你遇到了什么答案? - Willem Van Onsem
6
一个分支口的十字路口:本文介绍了一个经典的计算机科学问题,即如何在从一组选项中选择最佳选项的过程中进行决策。它使用了Haskell编程语言来实现和解决这个问题,并通过对代码的详细说明和说明来帮助读者理解程序的实现。 - Daniel Wagner
1
@DanielWagner 谢谢!非常好的链接。 - user12173013
@WillemVanOnsem 我找不到我在问题中提到的确切链接,但我也看过这个链接:https://www.reddit.com/r/elixir/comments/34jyto/what_are_the_benefits_of_pattern_matching_as/ - user12173013
1
我还建议阅读关于布尔盲的内容。 - chi
1个回答

10

使用模式匹配而不是条件语句最有用的一个方面之一是可以允许仅涉及 total 操作的 API,即从不导致运行时异常/错误的操作。

考虑下面的代码,利用一个假设的函数runOperationOn,返回Maybe String

case runOperationOn someData of
   Just res -> putStrLn ("The operation was successful: " ++ res)
   Nothing  -> putStrLn "The operation failed!"

在这里,模式匹配允许检查操作是否成功并在成功时同时获取结果。最后一个部分很关键。如果使用布尔值,我们需要使用类似以下的内容:

if canRunOperationOn someData
then putStrLn ("The operation was successful: " ++ doRunOperationOn someData)
else putStrLn "The operation failed!"

这看起来很相似,但与模式匹配相比,它有显着的缺点:

  • 它将功能拆分为两个函数:一个用于检查是否可以执行操作,另一个用于实际执行操作。
  • 它涉及到一个部分函数doRunOperationOn,它返回一个String,但在无效输入时会崩溃。

后者很糟糕,因为它给程序员带来了一些负担,他必须记得要问“我可以吗?”或冒着崩溃的风险。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接