C# 函数/方法的后置条件

C# 函数/方法的后置条件,c#,java,c++,math,documentation,C#,Java,C++,Math,Documentation,你们中有没有人用前后条件记录过函数或方法?(我这样问是因为我的老师说这是正式/正确的方法): 图例:(因为我无法键入特殊字符) 3-将其理解为“存在”&存在 E-是(如集合中)的成员 A-适用于所有人 -->-暗示 假设s是一个非空字符串。设B(s)是一组整数,它们给出字符串s中位置的索引。 以下是该函数的文档: int FirstOccurence(String s, Char c) precondition: (s.lenght() > 0) && 3 in

你们中有没有人用前后条件记录过函数或方法?(我这样问是因为我的老师说这是正式/正确的方法):

图例:(因为我无法键入特殊字符) 3-将其理解为“存在”&存在
E-是(如集合中)的成员
A-适用于所有人
-->-暗示

假设s是一个非空字符串。设B(s)是一组整数,它们给出字符串s中位置的索引。
以下是该函数的文档:

int FirstOccurence(String s, Char c)   
precondition: 
  (s.lenght() > 0) && 3 int i in B(s) [s.charAt(i) == c]    
这是先决条件等待后决条件;)

后置条件:
(firstoccurrence(s,c)eb)&&&&&&&&&&&&&&&&(s,c)firstoccurrence&=c
A int i B(s)[(i<首次出现(s,c))-->!(s.charAt(i)=c)]

你们中有人在现实世界中遇到过这样一种记录函数/方法的方法吗?

是的。我也遇到过这种情况,尽管这在行业中不是正常的做法

在某些情况下,正式指定和将被视为最佳实践。例如:

  • 使用时;e、 g.正式证明程序正确,或
  • 当使用像Eiffel这样的编程语言时,支持
如果您想了解埃菲尔语言如何支持契约式设计的示例,请查看



顺便说一句,倒E代表“存在”,倒A代表“所有人”是标准的数学符号,如果你上过大学一年级的数学课,你就会遇到它们。人们使用的形式化方法是种类或符号,这(可以说)有点令人遗憾。它不必要地吓跑了绝大多数(通常)对数学感到不舒服的程序员。

我在大学里也用过它,在记录一些函数时,我发现它很有用

在“现实”世界中,这并不常见(一般来说,人们不会记录太多)

我认为任何文档都是好的,在函数前后输入/输出参数的状态不是很清楚的情况下,先决条件和后决条件是最好的选择

顺便说一下,在HTML中,您可以使用
&exist-->∃ <代码>&forall-->∀ 以及其他一些字符实体:

记录post条件,如下所示:

static void Main(string![] args)
    requires args.Length > 0
{
    foreach(string arg in args)
    {
        Console.WriteLine(arg);
    }

我以正式的方式编写了前置条件和后置条件以及类不变量。当没有理解形式符号的临界质量时,问题就出现了

  @Requires({
    "h >= 0",
    "h <= 23"
  })
  @Ensures("getHour() == h")
  void setHour(int h);
我必须承认,我花了更长的时间去理解B(s)中的A I:Is[I]!=c
不仅仅是:
s在第一次出现(s,c)之前没有出现c

形式主义只有在

  • 对功能的“直观”理解变得太难了。然后,您只能求助于形式化方法来证明正确的实现或用法
  • 需要自动验证
  • 查看文档,例如。它们也使用半正式的符号,我经常看到人们在努力理解这样记录的函数的含义。

    (Contracts for Java)通过使用注释提供了类似于Eiffel的契约

      @Requires({
        "h >= 0",
        "h <= 23"
      })
      @Ensures("getHour() == h")
      void setHour(int h);
    
    @需要({
    “h>=0”,
    
    “请你指出一些链接,代码示例好吗?这个概念对我来说很模糊。有价值的一课:代码读的次数比写的要多。因此,任何提高阅读能力的东西都可能会对编写部分产生一些影响。这种文档在(不久的)将来是值得的。@Gamecat所以你说的是“这”(前提条件)以目前的形式更容易理解:如果c不在s中,则返回c在s中的第一次出现或零?@X如果我完全同意你的观点,那并不是我害怕数学,正如Stephen c.所建议的那样(我大学一年级的成绩都是A)但问题是,阅读和理解完全不是直观的。我确实看到这种只在极少数FNC中描述前/后条件的方法的价值,这将是难以用语言描述的。