我正在学习如何编程,但我不能完全理解的一件事是前置条件和后置条件

在调用函数之前是否将if语句视为前提条件,或者在大多数语言中是否有单独的更有效的方法?

我也在努力寻找前提条件的任何示例,这些示例可以用我目前的编程知识理解,如果有人可以证明简单的话,那么我将不胜感激(任何语言都可以)

最佳答案

这个c++'s paper陈述得很清楚



前置条件后置条件属于基于契约(Contract)的编程。

在Dlang中,基于契约(Contract)的编程具有良好的设计。 This document提供了一个示例:

long square_root(long x)
in
{
    assert(x >= 0);
}
out (result)
{
    assert(result ^^ 2 <= x && (result + 1) ^^ 2 > x);
}
do
{
    return cast(long)std.math.sqrt(cast(real)x);
}

前置条件in块中,后置条件out块中。
  • 如果满足前置条件后置条件,则它将愉快地进行编译,就像将9传递到函数中一样。 live demo
  • 如果不满足前提条件,例如将-1传递到函数中。 live demo

  • 如果不满足后置条件,这可能是由于我们没有处理do块中的逻辑所致,例如返回square而不是square-root,那么后置条件将起作用: live demo


  • 对于类,Dlang也有很好的工具,请阅读the document了解更多

    顺便说一句,C++还将契约(Contract)设计列为C++ 20的草案:https://www.reddit.com/r/cpp/comments/8prqzm/2018_rapperswil_iso_c_committee_trip_report/

    Here是建议,可能也有助于理解它们(尽管比D,恕我直言要难看得多)

    09-10 01:41
    查看更多