何时在客户端和通用 GWT 代码中使用断言

2024-02-02

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(使用前将#替换为@)

何时在客户端和通用 GWT 代码中使用断言 的相关文章

随机推荐

  • 如何链接不同的表单?

    我在第一个问题中得到了很大的帮助 希望有人能告诉我或让我参考有关该主题的早期问题 我想链接不同的表单 就像我单击第一个表单上的按钮一样 它会打开第二个 基本上 我要为手机功能 如短信 通话等 制作一个菜单 所以我希望如果我单击 通话 则会打
  • VIM - 基于搜索正则表达式替换

    我有一个包含多条 1000 多条 记录的文件 例如 lbc3 ssa2 lie1 sld0 ssdasd 我可以通过以下方式找到它们 s w l 0 9 我想要做的是将找到的每个模式的最后部分替换为 我做不到 s s w l 0 9 因为它
  • 如何对齐换行成多行的跨度中的缩进线?

    有谁知道如何对齐第二行 span info margin left 10px color b1b1b1 font size 11px font style italic font weight bold span class info sp
  • Protocol Buffer 首次使用高延迟

    在我们的一个 java 应用程序中 我们有相当多的协议缓冲区类 并且 jar 本质上公开了一个接口 其中包含另一个应用程序使用的一种方法 我们注意到 第一次调用此方法时 调用时间非常长 gt 500ms 而后续调用则要快得多 当在不同的应用
  • CoreData:错误:严重的应用程序错误。核心数据更改处理期间捕获异常

    嗨 我崩溃了 当我尝试将 1000 条记录插入后台数据库时 出现以下异常 CoreData error Serious application error 在核心数据更改处理期间捕获异常 这通常是观察者内部的错误 NSManagedObje
  • Python:防止信号传播到子线程

    import threading import time def worker i while True try print i time sleep 10 break except Exception msg print msg thre
  • Angular,从当前服务调用服务功能

    我有一个名为 sharedData 的服务 其中包含一些函数 如何从另一个此类函数调用其中一个函数 这里是代码 用 标记故障函数 谢谢 service sharedData function http var refillList var
  • 将 numpy 数组与公共维度“合并”[重复]

    这个问题在这里已经有答案了 我有两个矩阵 对应于数据点 x y1 and x y2 x y1 0 0 1 1 2 2 3 3 4 4 5 5 x y2 0 5 0 5 1 5 1 5 2 5 2 5 3 5 3 5 4 5 4 5 5 5
  • 卡桑德拉不可用异常()

    线程 main 中的异常不可用异常 在 org apache cassandra thrift Cassandra batch mutate result read Cassandra java 16485 在 org apache cas
  • 如何将空跨高度设置为等于默认行高?

    我有一套 span 元素 每个元素都嵌套到对应的 div 他们构建了一堆面板 如下图所示 当 span 包含一些文本时 它具有正常的高度 但是当它为空时 它的高度是0px 但我需要它有一个正常的高度 使它看起来像图片中的那样 如何实现这种行
  • jade/pug 是否可以在 include 语句中使用变量?

    我正在开发 Nodejs 应用程序 但我对 include 语句有疑问 当我像这样使用它时它会起作用 include mixins root pug 但是可以在包含中使用变量吗 这些都不起作用 include process env MIX
  • context="module" 在 Svelte 和 Sapper 中如何工作?

    当我使用 Sapper 构建项目时 每当我从服务器获取数据时 预加载函数都会在 script context module 内部声明 如下所示 根据document
  • 可以在cmd中启动多线程命令吗?

    我有大约 290 个文件需要在短时间内优化 当我做optipng png大约需要10分钟才能完成交易 然而当我这样做时optipng a png and optipng m png在两个单独的命令行中 它可以在 5 分钟内完成工作 现在有没
  • 如何以编程方式使 iOS 文本标签居中对齐?

    我想设置文本标签的对齐方式 该怎么做 我认为这些答案对您有帮助 正确的方法是 yourLabelName textAlignment NSTextAlignmentCenter 有关更多文档 您可以阅读以下内容 https develope
  • 如何从另一个 xml 模式扩展一个 xml 模式?

    我有一个类似于下面的 xml 文档 resources xml 以及相应的 xml 架构 resources xsd 该 xml 文档是手动维护的 即添加 删除 编辑资源元素 总共可能有 500 1000 个资源元素 每个资源可以是vari
  • INI 文件 - 通过 VBS 中的键名检索节名

    我想从 INI 文件中检索仅具有唯一键名称的部分名称 我的ini文件 Area 104 Title Central North America Local Scenery NAMC Layer 104 Active TRUE Require
  • Modbus 无法从 epever Tracer 1210a 读取数据到树莓派

    我想为tracer制作一个监控程序 我使用 RS485 USB 转换器将 epever Tracer1210a 连接到树莓派 3 型号 B from pymodbus client sync import ModbusSerialClien
  • 如何为后备字体设置不同的字体粗细?

    我在网站上使用的自定义字体遇到了问题 所以我对文本使用以下 CSS font family Open Sans Helvetica Arial font weight 600 由于网站是用我的母语构建的 我必须使用 UTF 8 符号 这似乎
  • 仅在 GUI 模式下运行某些 Emacs init 命令

    有没有办法仅当我处于 GUI 模式而不是终端模式时运行某些命令 来自 init el 我想在运行 GUI 版本时设置某种颜色方案 但该方案严重破坏了终端窗口的颜色 我正在寻找一些变量 函数 它看起来像这样 if gui mode color
  • 何时在客户端和通用 GWT 代码中使用断言

    StackOverflow 上有几个问题讨论何时应该使用断言语句而不是抛出异常 例子here https stackoverflow com questions 4333371 when to use assert and when to