正如您所说,先决条件被定义为在继续执行代码之前必须始终为true的条件。
这意味着,在执行其他代码之前,在函数开头检查某个条件的任何操作都将被视为先决条件。
//We will do something cool here
//With an integer input
int doSomethingCool(final int input)
{
//Wait, what if input is null or less than 100?
if(null == input || input < 100)
{
//Return a -1 to signify an issue
return -1;
}
//The cool bit of multiplying by 50. So cool.
final int results = input * 50;
//Return the results;
return results;
}
在这个例子中,函数,
input
在执行任何其他操作之前检查。只要满足条件,其余代码就会执行。
//We will do something cool here
//With an integer input
int doSomethingCool(final int input)
{
//Want to make sure input is not null and larger than 100
if(null != input && input > 100)
{
//The cool bit of multiplying by 50. So cool.
final int results = input * 50;
//Return the results;
return results;
}
//Return a -1 to signify an issue because the
//preconditions were not met for some reason
return -1;
}
在本例中,先决条件是检查
输入
不是
null
if
前提条件应该进行检查,并且只在检查失败时返回。不应该在一个先决条件下做任何工作。
符合Liskov替代原理,如果类型
S
是类型的子类型
T
,然后键入
T型
可替换为类型
. If类型
S码
doSomethingCool
并且改变了前提条件,那么它就违反了,因为类型
T型
现在你来回答
是的,简单的条件仍然是先决条件。只要它们位于使用该变量的所有其他代码的前面,条件就是程序所需要的。另外,如果函数在子类型中并且重写父类,则不应更改前提条件。
但是,不要将需要在前提条件内运行的代码包围起来。那是坏习惯。如果
value
value < 100
并在
如果