如何解决务实的程序员 - 断言式编程
我正在阅读 The Pragmatic Programmer 并且在 Assertive Programming 部分中,作者说:
不要使用断言代替真正的错误处理。断言检查不应该发生的事情:您不想编写如下代码:
puts("Enter 'Y' or 'N': ")
ans = gets[0] # Grab first character of response
assert((ch == 'Y') || (ch == 'N')) # Very bad idea!
我只期待两个值(Y/N),如果它收到其他输入,我想断言它并抛出错误。我想了解为什么 assert 方法是错误的,什么是更好的方法?
解决方法
如果用户输入了无效的内容,您应该通过错误消息或警告让他们知道。由于用户的错误而故意导致崩溃永远不是一个好主意。
假设您正在编写一个简单的登录过程。如果用户输入了错误的密码,您是否会告诉他们密码不正确或导致崩溃而不让他们知道原因?
正如您提供的来源中所说,断言应该用于不应该发生的事件,并且大多数情况下,如果事件确实发生,您的程序将无法从中恢复。应妥善处理与用户输入、网络、传感器数据等相关的错误。
正如@markspace 所提到的,断言通常被禁用/可以被禁用,因此永远不应该用来代替用户端的任何类型的错误处理。
,请查看Differences between Exception and Error
断言用于验证程序的逻辑。他们抛出一个 AssertionError,表明代码中有错误。
要处理用户错误,您应该抛出异常,并酌情处理。如果用户输入无效,则 IllegalArgumentException 是合理的,但您可能更喜欢自己的 Exception 层次结构。使用已检查或未检查的异常取决于您的偏好。
如果你想经常验证这个,你可能需要实现一个简单的验证库:
public static <T> void ensureValue(T value,T... legalValues) {
if (!Arrays.asList(legalValues).contains(value)) {
throw new IllegalArgumentException("Invalid value: " + value);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。