【发布时间】:2018-09-08 00:25:58
【问题描述】:
我只是好奇,除了 Java 之外还有其他语言使用检查异常吗?
我确实尝试查找有关此的信息,但找不到任何答案。
【问题讨论】:
我只是好奇,除了 Java 之外还有其他语言使用检查异常吗?
我确实尝试查找有关此的信息,但找不到任何答案。
【问题讨论】:
您无法使用检查异常找到任何其他语言的信息的原因是它们从 Java 的错误中吸取了教训。
编辑:因此,澄清更多检查异常完全是 Java 的事情,理论上听起来是一个非常好的主意,但实际上实际上在消费函数和被消费函数之间创建了紧密耦合。这也使得处理可以处理的异常变得更加乏味。相反,您必须在抛出异常的位置和实际可以处理的位置之间捕获并重新抛出每个函数。我可以在这里全部重写,但我认为这篇文章很好地解释了为什么检查异常真的不是一个好主意。
【讨论】:
检查异常不是主流语言中的常见功能,因为在 Java 中使用它们的体验不佳。然而,Java 并不是唯一实现它们的语言,仅仅因为 Java 的实现有缺陷并不意味着它们通常是一个不好的特性。
Nim 已检查异常。
已检查的异常已实现为Purescript library。
检查异常可以在Koka 中通过自定义效果来实现。
Java 中检查异常的一些常见问题可以通过更好的设计来处理。
类型签名中的“抛出”子句的传播可能导致由于必须更新方法签名而导致的大量重构,可以通过完整的类型推断来解决。 Haskell 有一个很好的方法来解决带有 partial type signatures 的类型类(它以与类型签名中检查异常相同的方式传播 - 并且也可以用于实现类型化异常) - 本质上将“空白”类型的任意部分留给编译器进行推断。
高阶函数/lambda 的问题可以通过多态性/泛型来解决。在通过效果系统(如 Koka)实现检查异常的语言中,效果多态性是解决问题的一种特别好的方法。
Haskell、Koka、Purescript 和 Nim 都是功能强大的语言,它们经常使用 lambda 和高阶函数,并且它们没有 Java 的检查异常问题。
【讨论】: