poh*_*ohl 8 java gwt assert design-by-contract
StackOverflow上有几个问题讨论了何时应该使用assert语句而不是抛出一些异常的问题.(这里,这里,这里,这里和这里的例子.
但是,我开始怀疑assert-versus-throw的传统智慧是基于您在JVM中运行的假设.在GWT Universe中,您的Java被音译为JavaScript并在浏览器的上下文中运行,这一组权衡感觉不同:在浏览器中运行时,断言总是被编译掉,并且任何使JavaScript的大小变小的东西是一个胜利,特别是如果你的网络应用程序必须在手机上运行.断言确实可以在DevMode中运行,因此它们在开发过程中具有实用性.
所以我的问题是:有没有人考虑过一套最佳实践规则来管理如何在GWT中使用断言语句?我有我的团队成员问我"因为断言被编译出来,有它们是否有意义?",我想对他们有一个好的答案.
此外,是否有人对Google的GWT开发人员在此主题上的理念有所了解?查看GWT源代码,他们似乎经常使用它.
gat*_*kin 14
谷歌的常见问题解答说
仅使用断言进行调试,而不是生产逻辑,因为断言只能在GWT的开发模式下工作.默认情况下,它们由GWT编译器编译掉,因此除非您明确启用它们,否则在生产模式下不会产生任何影响.
这与您链接的问题的答案没有任何不同.无论Java代码是通过javac以通常的方式编译还是由GWT编译为JavaScript,"断言"意味着"如果这不是真的我有一个错误." 相反,形式的代码
if (condition) throw new Exception(msg);
Run Code Online (Sandbox Code Playgroud)
意味着"如果这是真的,那么我们就会遇到程序必须处理的意外情况."
对于没有看到断言点的团队成员,解释说他们应该有一堆单元测试,这些测试在启用断言的情况下运行.如果测试具有良好的代码覆盖率并且没有一个导致断言失败,那么断言语句指示的假设被证明是成立的.
| 归档时间: |
|
| 查看次数: |
2605 次 |
| 最近记录: |