问题标签 [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 投票
4 回答
1795 浏览

haskell - Haskell中的前置条件检查有哪些选项

这是一个简单的问题,我认为答案很复杂。

一个非常常见的编程问题是返回某些内容或未通过前置条件检查的函数。IllegalArgumentException在 Java 中,我会使用一些在方法开头抛出的断言函数,如下所示:

我喜欢这个的是,它是每个先决条件的单线。我不喜欢的是抛出异常(因为异常〜goto)。

在 Scala 中,我使用过 Either,这有点笨拙,但比抛出异常要好。

有人给我建议:

我不喜欢的是强调真假,它们本身没有任何意义;前提条件隐藏在attemptedSuicide语法之间,因此与 Nothing 没有明确的关系,并且putStone(boardAfterMove) 的实际实现并不是核心逻辑。启动它不会编译,但我确信这不会破坏我的问题的有效性。

在 Haskell 中可以干净地完成前置条件检查的方法是什么?

0 投票
1 回答
522 浏览

ada - 先决条件不适用于 GNAT?

我对 Ada 还是有点陌生​​,我想我误解了先决条件的使用,因为通过 GNAT RM 看起来检查似乎不是在运行时执行的。此外,这里的前提条件的 GNAT RM没有指定如果不满足前提条件则抛出哪个异常。

这是我正在尝试的代码:

如果我理解正确,那么这个程序应该在调用 Put_Line 过程之前引发一些未指定的异常。但是您可以看到,当我运行该程序时,调用该过程时使用了一个无效的 Size 参数,该参数违反了 Precondition Destination'Size ≥ Size ≤ Source'Size。相反,我必须放置一条if语句来实际捕获错误并引发异常 Constraint_Error 以保持正常。

我尝试过像添加这样的变体,pragma Precondition ( ... )但这也不起作用。

一件奇怪的事情是,如果我在通用过程主体/定义中重复该with Pre =>子句,程序实际上会编译。它通常不允许过程这样做并引发错误(即,前提条件应该只在正式声明中,而不是在定义中)。在这种情况下,通用过程是一个例外吗?

我也很惊讶 use 子句可以添加到泛型过程声明中。这使得定义形式参数名称更容易(那些非常长的名称),但看起来更像是一个错误,因为这不能用于正常/常规过程声明。

PS 我想用 Ada 语言实现我最接近 C 中的 memcpy() 的模仿,以用于学习目的。

0 投票
5 回答
27124 浏览

java - java中的前置条件与后置条件?

例如我有以下代码:

我只是对这些术语的确切含义感到困惑?上面的代码是我认为的,但是任何人都可以用我的理论指出我正确的方向吗?

0 投票
1 回答
622 浏览

optimization - 带有局部变量的 Clojure 前置条件

有什么方法可以存储在前提条件下执行的计算结果,以便可以在实际的函数体中使用它。

这太糟糕了(昂贵的计算运行两次):

我想按照这些思路做一些事情。但这不起作用。

0 投票
5 回答
7367 浏览

java - Guava 先决条件的自定义异常

这是一个很简单的问题,我经常在我的项目中使用 com.google.common.base.Preconditions 来验证参数和参数,例如:

Preconditions.checkNotNull(parameter, "message");
Preconditions.checkArgument(parameter > 0, "message");

此代码可能会产生 IllegalArgumentException 或 NPE。但很多时候我需要抛出自己的异常。我怎样才能通过这个图书馆做到这一点?或者,也许你可以建议另一个?先感谢您!

更新:我明白,我可以创建自己的简单实用程序类,但我有兴趣找到现成的解决方案。请让我知道,如果有人知道这是可能的。

0 投票
1 回答
89 浏览

sql - 带有 SQL 前提条件的 Joomla 表单扩展/组件以重定向页面

我想知道是否有允许我查询后端表的 Joomla 扩展/组件;

如果查询结果为“1”,则显示用户可以提交的表单,结果返回后端;并且用户重定向到 XYZ 页面

如果查询结果为“0”,用户直接跳转到XYZ页面

我试过 Fabrik 组件,不幸的是“表单”中没有前置条件

提前致谢!

0 投票
2 回答
695 浏览

java - Java - 方法前置条件和后置条件执行

我的问题很简短。编译器是否强制执行方法前置条件和后置条件?

0 投票
2 回答
235 浏览

clojure - clojure:函数内部定义的 var 打破了先决条件

我有这个功能:

先决条件不起作用。不知何故,变量tipos-transicoes-pes 和tipos-estados-peso 在前置条件代码中创建了一个错误。我知道我可以将这些变量放在我的函数之外以使其工作。但我想将这些定义保留在我的函数中。我怎样才能做到这一点?

0 投票
1 回答
883 浏览

java - 使用 Java `assert` 专门用于非空方法前提条件

是的,有很多关于 Javaassert语句的问题和非常好的答案,以及何时应该使用异常。这个问题是关于一个特定的用例,该用例通常属于“从不使用assert以确保先决条件”的声音类别——或类似的词。所以,请再忍耐我一会儿……

默认情况下,所有 Java 对象引用都可以是null并且是null。除了仅引用实现中指定的值集之外,甚至enum引用也可以。因此,在大多数 Java 程序中都必须进行大量测试。其中一些测试包括检查给定 API 返回的值,该值表示不存在、打算由调用者处理的故障或其他一些状态信息。但是,大多数测试都意味着在发生意外时提前失败nullenumnullnullnullnull遇到。为了尽可能频繁地正确“提前失败”,同时还使用可执行代码作为自记录前提条件,可以使用引发异常的条件测试来检查不需要的null值。

但...

不需要的null值通常会导致 aNullPointerException在某个点被抛出,尽管它可能null在测试或调试应用程序时很容易确定其来源的点之后很长时间。因此,null值通常不会未被发现,只是错误使用的自我报告可能不是很有帮助。但是,无论异常是由于检测到意外事件null还是由于尝试取消引用而引起的,该异常几乎可以肯定是致命的,或者必须在完全消除导致任何致命异常的原因的级别上进行处理。

所以,一个不受欢迎的、无意的null最终会在某个时间点咬人。在最好的情况下,测试先决条件只是将该点移动到一个时间点,这可能使开发人员更容易找到问题的根源。但是,如果使用显式测试或异常来检查所有可能不需要的null值,无论多么不可能,这会导致编译代码中出现大量条件分支,其中预期的和公共分支是跳过引发异常的代码的分支.

鉴于所有这些以及 Java 对象引用的性质,似乎assert语句应该特别适用于排除null值的前提条件。在开发和测试中,先决条件被启用并有助于检测和修复缺陷。在生产中,来自意外null值的致命错误稍后会发生,但通常不会发生 - 在任何情况下都不能接受null值的关键代码总是可以使用显式测试并抛出异常,即使在assert其他地方使用也是如此。因此,assert对于这个常见且几乎无处不在的前提条件,使用可以限制生产代码中不必要的开销。

考虑到这一切,是否有合理的论据反对使用assert先决条件语句来专门记录和拒绝null无效参数、输入或状态的值?

0 投票
2 回答
336 浏览

packages - 包私有的 Ada 方面

假设我有世界上最愚蠢的环形缓冲区。

因为我的代码很烂,所以我想添加前置条件和后置条件,以确保我不会滥用它。所以我改变Push的实现如下:

但是,我得到一个编译错误,因为我需要将方面定义放在过程的声明中,而不是在实现中。

问题是,这是一个包裹。我的声明是公开的。前提条件所依赖的值属于包体,它对声明不可见。为了将方面定义放在声明中,我将不得不重构我的代码以将实现细节公开到包的公共部分(在本例中为readptrwriteptr)。我不想那样做。

我可以想出几种方法来解决这个问题,例如让我的Push()调用实现PushImpl()仅在实际上具有前提条件的主体中定义的私有过程......但这太可怕了。这样做的正确方法是什么?