【问题标题】:What are advantages of pattern matching over conditionals in FP (in layman's terms)?与 FP 中的条件匹配相比,模式匹配有哪些优势(用外行的话来说)?
【发布时间】:2019-10-06 17:15:26
【问题描述】:

通俗地说,除了历史原因之外,模式匹配到底有什么好处?我遇到的答案大多超出了我的水平(例如我不明白堆分配与此有什么关系)。

我有 Python 的背景,最近才重新开始学习 Haskell。

所以我很难理解在其他语言背景下给出的其他答案。

【问题讨论】:

标签: haskell functional-programming pattern-matching conditional-statements


【解决方案1】:

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

考虑这段代码,利用假设函数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,但会在无效输入时崩溃。

后者相当糟糕,因为它给程序员带来了一些负担,程序员必须记住问“我可以吗?”,否则会面临崩溃的风险。

【讨论】:

    猜你喜欢
    • 2022-10-20
    • 2016-05-02
    • 2013-09-22
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    相关资源
    最近更新 更多