问题标签 [design-by-contract]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
functional-programming - Racket:关于高阶函数的合约
我正在使用 Racket 合约系统,我想导出一个没有参数的函数,它返回一个没有参数的 lambda 表达式,例如:
有谁知道如何为这种功能编写合同?
java - 带有断言的部分合同设计
我想就合同设计的部分实施的想法获得一些意见。目标是在不需要外部库的情况下向不提供轻量级合约(仅不变量和后置条件)的语言添加。
我的示例是用 Java 编写的,但我认为这个想法适用于许多 OO 语言。
我们有一个这样的类:
我们以这种方式扩展上面的代码:
这种方法的局限性:
- 没有先决条件。
- 合同不是继承的(但请注意,不变量和后置条件受到保护,可以被子类重用)。
- 没有检查不变量和后置条件不会修改我们对象的状态,因此存在副作用的风险。
- 合同不是明确的我们文件的一部分。
- 我们需要让每个类都可以克隆。
现在,一些问题:
- 这种方法是否会以任何方式损害表演?我的意思是如果禁用断言,JIT 编译器甚至会删除 old 和 res 局部变量?
- 你觉得这种方法有什么缺点吗?你为什么不在课堂上使用它?
- 你能建议任何改进吗?
感谢您的阅读和您的意见。
scheme - How does Racket Scheme's "design by contract" features different from Eiffel?
I know that both Eiffel (the progenitor) and Racket both to implement "Design by Contract" features. Sadly, I am not sure how one would different from the other. Eiffel's DBC is reliant on the OOP paradigm and inheritance, but how would Racket, a very different language account for such a disparity?
java - 何时添加前提条件以及何时(仅)抛出异常?
我正在学习先决条件以及何时使用它们。我被告知前提条件
不适合以下代码:
为什么是这样?
编辑:另一个例子
作为示例,我们假设以下内容是以“正确”的方式完成的。请注意 IllegalArgumentException 和前提条件。请注意行为是如何定义良好的,以及即使设置了前提条件也是如何进行 throws 声明的。最重要的是,请注意它不包含 NullPointerException 的先决条件。再说一遍,为什么不呢?
这些示例是否避免使用额外的先决条件?有人可能会争辩说,如果我们要避免先决条件,那为什么还要有它们呢?也就是说,为什么不用@throws 声明替换所有前提条件(如果避免它们是这里所做的)?
c# - 可以按合同设计允许我执行私有方法吗
我不能用语言做到这一点 如何强制私有方法,因为接口方法只是公共的?
那么我可以改用合同设计吗?
php - php 是否有按合同设计的框架?
是否有 php 的框架或库可以帮助我在我的应用程序中实现合同设计?
在最好的情况下,它会在注释中使用 javadoc 之类的注释。
haskell - 将合同设计与类型系统进行比较
我最近阅读了一篇论文,比较了按合同设计与测试驱动开发。DbC 和 TDD 之间似乎有很多重叠、一些冗余和一点点协同作用。例如,有一些系统可以根据合同自动生成测试。
DbC 以何种方式与现代类型系统(例如在 haskell 或其中一种依赖类型语言中)重叠,并且在某些方面使用两者都比两者都好?
java - 何时在客户端和通用 GWT 代码中使用断言
StackOverflow 上有几个问题讨论何时应该使用断言语句而不是抛出一些异常的问题。(示例在这里、这里、这里、这里和这里。
但是,我开始怀疑断言与抛出的传统智慧是基于您在 JVM 中运行的假设。在 GWT 世界中,您的 Java 被音译为 JavaScript 并在浏览器的上下文中运行,权衡的集合感觉不同:在浏览器中运行时断言总是被编译掉,并且任何使 JavaScript 大小保持较小的东西是一个胜利,特别是如果您的 Web 应用程序必须在手机上运行。然而,断言确实在 DevMode 中运行,因此它们在开发过程中具有实用性。
所以我的问题是:有没有人考虑过一套管理如何在 GWT 中使用 assert 语句的最佳实践规则?我的团队成员问我“既然断言被编译出来,拥有它们是否有意义?”,我想为他们提供一个好的答案。
另外,是否有人对 Google 的 GWT 开发人员在此主题上的理念有任何见解?查看 GWT 源代码,他们似乎经常使用它。
c#-4.0 - C# 4.0 中的代码协定
我做了一个这样的方法
现在调用代码需要正确处理空值。有没有办法为所有调用者表达他们需要能够处理此方法返回的空值的合同?
我想要的是 p 被标记为潜在的问题。
编辑 我刚刚修改了代码并添加了调用代码和预期的行为。我还添加了一个可能在 GetPerson 方法上不存在的属性
java - 如何扫描使用 COFOJA 编写的合同中使用的注释?
我正在做一个项目,我必须为使用 COFOJA 的方法编写合同,并且必须使用启发式方法从合同中生成方法代码。
1) 我如何能够扫描 COFOJA 中使用的注释,例如 @requires、@ensures 等?2)如果我生成抽象语法树,AST是否也会包含注释/合同语言?
例如:考虑对我的项目进行以下输入