StackOverflow 上有几个问题讨论何时应该使用断言语句而不是抛出异常。 (例子here https://stackoverflow.com/questions/4333371/when-to-use-assert-and-when-to-use-try-catch, here https://stackoverflow.com/questions/4537609/is-it-a-good-practice-to-use-assert-in-java, here https://stackoverflow.com/questions/368750/some-anti-patterns-on-using-assert-java-and-others, here https://stackoverflow.com/questions/3018683/what-does-assert-do, and here https://stackoverflow.com/questions/2759199/is-java-assert-broken.
然而,我开始怀疑断言与抛出的传统观点是基于您在 JVM 中运行的假设。在 GWT 世界中,您的 Java 被转写为 JavaScript 并在浏览器上下文中运行,这组权衡感觉有所不同:在浏览器中运行时,断言总是被编译掉,并且任何可以使 JavaScript 大小保持较小的东西这是一个胜利,特别是如果您的 Web 应用程序必须在移动手机上运行。然而,断言确实在 DevMode 下运行,因此它们在开发期间具有实用性。
所以我的问题是:是否有人考虑过一组最佳实践规则来管理如何在 GWT 中使用断言语句?我的团队成员问我“既然断言被编译出来了,拥有它们有意义吗?”,我想为他们提供一个好的答案。
另外,有人对 Google 的 GWT 开发人员在这个主题上的理念有任何见解吗?查看 GWT 源代码,他们似乎经常使用它。
谷歌的FAQ http://code.google.com/webtoolkit/doc/1.6/FAQ_Client.html says
仅将断言用于调试目的,而不是生产逻辑,因为断言仅在 GWT 的开发模式下工作。默认情况下,它们由 GWT 编译器编译,因此在生产模式下不会产生任何影响,除非您显式启用它们。
这与您链接到的问题的答案没有任何不同。无论Java代码是通过javac以通常的方式编译还是通过GWT编译为JavaScript,
“assert”的意思是“如果这不是真的,我就有一个错误”。相反,形式的代码
if (condition) throw new Exception(msg);
意思是“如果这是真的,那么我们就遇到了程序必须处理的意外情况。”
对于不明白断言意义的团队成员,请解释他们应该有一堆在启用断言的情况下运行的单元测试。如果测试具有良好的代码覆盖率并且没有一个测试导致断言失败,则证明断言语句指示的假设成立。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)