与FP中的条件匹配相比,模式匹配有什么优势(以外行的术语而言?

问题描述 投票:0回答:1

外行的说法,除了历史原因之外,模式匹配的好处到底是什么?我遇到的答案大多超出了我的水平(例如,我不了解与此相关的堆分配)。

我有Python的背景,只是最近才再次接触Haskell。

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

haskell functional-programming pattern-matching conditional-statements
1个回答
0
投票

使用模式匹配而不是条件匹配的最有用的方面之一是允许仅涉及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 res)
else putStrLn "The operation failed!"

这看起来很相似,但是与模式匹配相比有很多缺点:

  • 将功能分为两个功能:一个检查我们是否可以执行该操作,另一个实际执行该操作。
  • 它包含一个partial函数doRunOperationOn,该函数返回一个String,但是在无效输入时会崩溃。

后者非常糟糕,因为它给程序员带来了负担,程序员必须记住问“我可以吗?”,否则就有崩溃的危险。

© www.soinside.com 2019 - 2024. All rights reserved.