导入
处理不纯函数简介
简要了解如何处理不纯函数。
世界充满了不一致,而由此带来的不可预测性正是我们使用非纯函数的原因。
非纯函数是指对相同的输入可能返回不同结果的函数。
如果我们编写一个期望用户输入数字的函数,什么能阻止用户输入“热狗”?如果我们在网站上有一个登录表单,什么能防止用户提交错误的密码?如果我们的程序从数据库获取数据,又有什么保证数据始终存在?
每个程序都必须处理错误和意外结果。程序员的责任就是在这样一个充满不确定性的世界中,设计出友好的用户体验。虽然为每一种不确定性情况编写代码可能令人厌烦,但如果不采取任何策略,最终写出的代码将难以维护。真正的软件必须是可靠的。
构建健康代码库的主要策略是识别并隔离那些可能出现意外结果的部分,并让它们变得可预测。这样一来,系统的其余部分就可以基于一致的值进行工作。在本章中,我们将讨论并比较四种实现这一目标的策略:
- 条件结构:包括
case、if等类似的语句。 - Elixir 的
try:专为异常处理设计,对于来自 C++、Ruby 或 Java 的开发者来说会非常熟悉。 - 错误单子(Error monad):在具有静态类型系统的函数式语言中非常常见。
- Elixir 的
with:一种特殊指令,结合了模式匹配与条件执行。
为了实践这四种策略,我们将继续使用第7章《设计你的 Elixir 应用》中的地牢探险应用程序。
我们的第一步并不是采用某种策略,而是探索如何识别程序中那些可能产生不确定结果的非纯函数。