Как вы сказали, предварительное условие определяется как условие, которое всегда должно быть истинным, прежде чем будет выполнен исходный код.
Это означает, что все, что проверяет условие в начале функции перед выполнением другого кода, считается предварительным условием.
Пример:
//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;
}
В этом примере предварительным условием является проверка того, что input
не является null
и больше 100. Это плохое предварительное условие, поскольку оно может привести к ненужному вложению if
с и циклов.
Предварительные условия должны выполнять проверки и возвращаться только в случае неудачи проверок. Не должно быть никакой работы в предварительном условии.
В соответствии с принципом подстановки Лискова, если тип S
является подтипом типа T
, то тип T
можно заменить на тип S
. Если тип S
переопределяет doSomethingCool
и изменяет предварительное условие, то это является нарушением, поскольку тип T
является базовым определением и определяет предполагаемые условия, которые должны быть выполнены.
Теперь для вашего ответа
Да, простые условия по-прежнему считаются предварительными условиями. Пока они находятся в начале всего остального кода, который использует переменную, условие соответствует требованиям программы. Кроме того, если функция относится к подтипу и переопределяет родительский класс, она не должна изменять предварительное условие.
Тем не менее, не окружайте код, который вам нужно запустить в предварительном условии. Это плохая практика. Если value
должно быть больше 100, отметьте value < 100
и установите возврат в проверке if
.