Мало того, что здесь есть избыточность, но в зависимости от языка, также может быть разница в правильности / достоверности.Рассмотрим этот код C #:
int value;
bool condition = DateTime.UtcNow.Second < 30;
if (condition)
{
value = 10;
}
else
{
value = 20;
}
// No problem, value is definitely assigned
Console.WriteLine(value);
Это полностью верно.Но если мы напишем его в избыточном стиле, мы получим ошибку во время компиляции:
int value;
bool condition = DateTime.UtcNow.Second < 30;
if (condition)
{
value = 10;
}
if (!condition)
{
value = 20;
}
// error CS0165: Use of unassigned local variable 'value'
Console.WriteLine(value);
То же самое будет верно в Java, и я подозреваю, что и во многих других языках.Компилятор может учитывать тот факт, что в if
/ else
выполнение будет выполняться точно в одну из этих ветвей.В стиле «два утверждения if» языковые правила не дают такой гарантии.