gpt4 book ai didi

programming-languages - 什么是前置条件和后置条件?

转载 作者:行者123 更新时间:2023-12-04 08:39:50 31 4
gpt4 key购买 nike

我正在学习如何编程,但我无法理解的一件事是前提条件和 后置条件 .

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

我也在努力寻找 的任何例子前提条件我可以用我目前的编程知识理解,如果有人能证明一个简单的,那么我真的很感激(任何语言都可以)

最佳答案

在这个 c++'s paper 中有很好的说明

  • A precondition is a predicate that should hold upon entry into a function. It expresses a function's expectation on its arguments and/or the state of objects that may be used by the function.

  • A postcondition is a predicate that should hold upon exit from a function. It expresses the conditions that a function should ensure for the return value and/or the state of objects that may be used by the function.



先决条件 后置条件 属于基于契约的编程。

在 Dlang, 基于合约的编程有好的设计。 This document提供 sample :
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

    core.exception.AssertError@prog.d(8): Assertion failure

  • 后置条件 不满意可能是因为我们没有处理 do 中的逻辑引起的阻止,如返回 square而不是 square-root ,然后,后置条件 将工作: live demo

    core.exception.AssertError@prog.d(13): Assertion failure


  • 对于类,Dlang 也有不错的工具,阅读 the document了解更多

    顺便说一句,c++ 也将契约设计列入 c++20 的草案: https://www.reddit.com/r/cpp/comments/8prqzm/2018_rapperswil_iso_c_committee_trip_report/

    Here是提案,也许也有助于理解它们(虽然,比 D 丑得多,恕我直言)

    关于programming-languages - 什么是前置条件和后置条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35303332/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com