问题标签 [preconditions]

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.

0 投票
1 回答
5181 浏览

sql - 唯一约束的 Liquibase 前提条件

我想使用 Liquibase 向列添加唯一约束。当然,我想使用前提条件检查是否存在重复行。

我想出了这个:

然而,这会Empty set在 MySQL 和可能的其他数据库上产生。

我尝试使用expectedResult=""expectedResult="null"但两者都不起作用。

0 投票
1 回答
167 浏览

http - HTTP PUT 的比较和交换?

有没有办法让比较和交换风格的机制成为修改某些资源的唯一方法,同时遵循 HTTP 标准?

有一个If-Match实现正确行为的标头,但是这个标头是可选的:据我所知,如果If-Match没有提供,服务器应该尊重PUT. (也就是说,由客户端决定是否要进行比较和交换,或者只是交换。)412 Precondition Failed如果客户端尝试提供PUTPOST不提供If-Match标头,是否可以接受响应?

0 投票
3 回答
800 浏览

java - 是否有可能在编译时禁用 guava 的先决条件,就像我们禁用 Java 1.4 的 assert 关键字一样?

我曾经在我的代码中插入 java1.4 的断言结构,发现它非常实用,因为它允许我在调试时启用插入的断言并在编译时禁用它们。

我的问题是: 是否可以对 Guava 库中的现代 Preconditions.checkArgument(..) 等做同样的事情?
了解这一点很重要。我们在代码中可能有很多 guava 的前置条件检查,但大部分都是为了调试目的,当这种前置条件的数量迅速变大时,可能会影响性能。

谢谢你的想法。

0 投票
5 回答
1296 浏览

c++ - C++ 前置条件/​​断言

这不是我的作业——我只是在练习。我似乎无法围绕这个断言概念来思考。

0 投票
1 回答
2826 浏览

java - Junit前置条件和测试数据

我有一个 Java 任务来创建一个地址簿,然后对其进行测试和评估。我创建了它并创建了一些junit测试。在作业的可交付成果部分,它说要在一个表格中列出整个程序的所有测试用例以及:

  • 唯一的标识
  • 测试说明
  • 运行测试的前提条件
  • 测试数据
  • 预期结果

有人可以告诉我以下测试的前提条件和测试数据是什么意思:

尝试给导师发电子邮件(我是一个遥远的学习者),但它需要很长时间才能得到回复。前提条件是 entry1 需要填充吗?测试数据:“艾莉森·默里”?感谢任何帮助

0 投票
1 回答
662 浏览

domain-driven-design - 客户应该检查后置条件/应该调用方法检查前置条件吗?

公共方法的前置条件后置条件构成了该方法与其客户端之间的契约。

1.根据调用者不应该验证后置条件被调用方法不应该验证前置条件

让我们回忆一下平方根函数 sqrt 的前置条件和后置条件,如程序 49.2 所示。调用 sqrt 的函数负责将非负数传递给函数。如果传递了一个负数,平方根函数根本不应该做任何事情来处理它。另一方面,如果将非负数传递给 sqrt,则 sqrt 有责任提供满足后置条件的结果。因此, sqrt 的调用者根本不应该检查或纠正结果。

如果操作的前置条件失败,则归咎于调用者 如果操作的后置条件失败,则归咎于被调用的操作

但正如在另一篇文章中包含的代码中所见,被调用的方法确实验证了先决条件

a)既然满足方法的先决条件是客户的责任,那么被调用的方法是否也应该 检查先决条件是否得到满足?

b) 由于被调用方法有责任交付满足后置条件的结果,调用者是否应该检查后置条件

2.第一篇文章中提到的一个好处是“前置条件和后置条件可用于在OOP中划分类之间的责任”,我理解这也是说验证前置条件不是被调用方法的责任,它调用者不负责验证postcondition

但是坚持这样的理念不会使我们的代码更容易受到攻击,因为它盲目地相信对方(对方是调用者方法)会兑现它的承诺吗?

3.如果调用者/被调用方法不盲目信任对方,那么我们不要失去很多后置条件前置条件提供的好处,因为现在被调用方法必须承担检查前置条件的责任,调用方必须承担责任验证后置条件

谢谢

编辑

3.

如果调用者/被调用方法不盲目信任对方,那么我们不要失去很多后置条件和前置条件提供的好处,因为现在被调用方法必须承担检查前置条件的责任,调用方必须承担验证的责任后置条件?

调用者不需要验证后置条件,因为它们应该由被调用的方法来确保。被调用的方法确实需要验证先决条件,因为没有其他方法可以强制执行合同。

a)您是否假设后置条件只应声明/保证返回值是指定类型或null(如果 返回值可以为)?除了返回值的类型之外,后置条件还不能说明其他事情(无法通过类型系统验证),例如返回值是否在指定范围内(例如:不能后置条件也说明返回值的类型int将在 ) 的范围内10-20?在这种情况下,客户是否还需要检查后置条件

b)那么我们可以说第一篇文章声称被调用的方法不应该检查先决条件是错误的吗?

2. 编辑

不,后置条件可以是任何东西,而不仅仅是空检查。无论哪种方式,客户端都可以假设后置条件已经过验证,例如,如果合同声明它已被确保,您不需要验证 int 范围。

a) 您之前说过,为了使代码不那么容易受到攻击,需要通过调用方法检查前置条件,但我们是否也不能推断调用方需要验证后置条件(例如,验证返回值是否在后置条件承诺的范围内)为了使调用者的代码不那么容易受到攻击?int

b)如果客户可以盲目地信任后置条件的声明(我会说当后置条件提出返回值在某个范围内的声明时,这是一种盲目信任),为什么被调用方法也不能相信调用者会满足被调用方法的先决条件

0 投票
1 回答
621 浏览

domain-driven-design - 类不变量如何加强前置条件和后置条件?

关联

您可以将类不变量视为健康标准,操作之间的所有对象都必须满足该标准。作为类的每个公共操作的先决条件,因此可以假设类不变量成立。此外,它可以假定为类不变量所具有的每个公共操作的后置条件。从这个意义上说,类不变量作为类中公共操作的前置条件和后置条件的一般强化。有效的前提条件是与类不变量一起制定的前提条件。类似地,有效的后置条件是与类不变量一起制定的后置条件。

1.如果类上定义了类不变量Server

a)前提条件通常是根据被调用操作的形式参数制定的,那么类不变量如何加强方法的 ( Foo')前提条件

b)后置条件是根据被调用方法的返回值制定的,那么类不变量如何加强方法的Foo置条件呢?

2.在类上定义的类不变量能否Caller以任何方式加强Foo前置条件后置条件

3.如果在's参数上定义了类不变量:FoocmdIn

a) 如果在 range 内的状态的前提条件,但是在应该在 range 内的状态上定义的类不变量之一,那么前提条件确实得到了加强?FoocmdIn.Length1-20InputInput.Length2-19Foo

b) a ) 中的逻辑不是有点缺陷吗,因为如果类不变量已经声明Input.Length应该在范围内2-19,那么Foo定义一个并不总是存在的前提条件true不是错误(cmdIn.Length不能保存值120

c) 但是如果在应该在 range 内的状态上定义类不变量,那么' 的前提条件不是加强吗?InputInput.Length0-100Foo

d)定义的类不变量cmdIn也能以某种方式加强后置条件吗?Foo

4.如果在返回值上定义了类不变量Foo

a)如果在 range 内的状态的后置条件,但是在应该在 range 内的状态上定义的类不变量之一,那么的后置条件确实是加强的?FoocmdOut.Length1-20OutputOutput.Length2-19Foo

b)但是如果在应该在 range 内的Output状态上定义不变量,那么' 的后置条件不是加强的吗?Output.Length0-100Foo

c)定义的类不变量Output也能以某种方式加强Foo前提条件吗?

( _ _ _ _ _ Foo_还是强化Foo前置条件后置条件?如果这就是文章的实际含义,那怎么可能?

谢谢

0 投票
5 回答
2719 浏览

inheritance - 弱化前置条件和加强后置条件不也违反里氏替换原则吗?

子类型的实际前提条件是通过组合(使用逻辑OR基类型的前提条件和子类型的前提条件来创建的,这使得生成的前提条件 限制较少。

子类型的实际后置条件是通过组合(使用逻辑AND基本类型的置条件和子类型的后置条件来创建的,这使得生成的后置条件 更具限制性。

以下是加强前置条件削弱后置条件的示例,因此违反了 LSP(链接):

  1. 假设您的基类与成员 int 一起使用。现在您的子类型要求该 int 为正数。这是强化的先决条件,现在任何以前使用负整数都可以正常工作的代码都被破坏了。

  2. 同样,假设相同的场景,但用于保证成员在被调用后为正的基类。然后子类型改变行为以允许负整数。对对象起作用的代码(并假设后置条件是一个正整数)现在被破坏了,因为后置条件没有得到支持。

a) 为什么当被覆盖的方法削弱了先决条件时,它也被认为是违反 LSP的,因为该方法可能使用基本类型的合约不可接受的参数。因此,我们不能声称违反了基本类型的合同,因此也违反了 LSP 吗?

b) 为什么当被覆盖的方法增强后置条件时,它也不被认为是违反 LSP的,因为调用此方法的客户端只会收到原始方法可能结果的子集。因此,我们不能声称违反了基本类型的合同,因此也违反了 LSP 吗?

例子:

基类后置条件保证方法的返回值在范围内1-10,但随后子类型将后置条件更改为只允许返回值在范围内2-9。现在,处理从此方法返回的对象的代码(并假设后置条件在一个范围内1-10)被破坏了,因为后置条件没有得到支持。

0 投票
4 回答
923 浏览

java - 带有前提条件的轻量级 Java 库?

当我可以使用它时,我是使用Guava 的忠实粉丝Preconditions. 然而,Guava jar 是 2 MB,这可能相当大......

我有一个项目,其 jar 重 26k,因此问题是,是否有一个轻量级库具有这样的实用程序类,除了 JDK(6+)之外没有其他依赖项?虽然我可以创建一个,但我不想重新发明轮子!

0 投票
3 回答
12546 浏览

mysql - Liquibase 前提条件:如何检查不可为空的列?

我有一个数据库升级脚本来删除列上的非空约束。我想做一个前置条件检查,并且ALTER TABLE只在它非空时调用。

master.xml 脚本是一个渐进的脚本,我不断添加脚本,并且每次都运行整个脚本。在我的 Alter Table 脚本第一次运行后,我不希望它再次运行。

无法为此找到预定义的前提条件,也无法编写 sqlcheck。