оператор else должен заботиться о возврате false в каждом случае, которое в первом случае if неверно.
Правильно, но что, если первое if
условие истинно, новторое if
условие не является?
То есть: что если regIOobject::read()
возвращает true
, но permeabilityModelPtr_->read(subDict("permeability"))
возвращает false
?
Затем поток управления входит в первыйБлок if
, не возвращает, но не входит в блок else
(потому что первое условие было истинным), поэтому он просто выпадает из конца функции без нажатия на оператор return
.
Если вы хотите, чтобы часть else { return false; }
применялась к любому из условий, вы можете просто наивно скопировать / вставить ее:
if (COND1) {
if (COND2) {
return true;
} else {
return false;
}
} else {
return false;
}
Но это довольно частое дублирование кода.Лучшим решением является замена вложенного if
одним условием:
if (COND1 && COND2) {
return true;
} else {
return false;
}
Еще есть некоторое дублирование: обе ветви состоят из оператора return
, за которым следует некоторое выражение.
Мы можем выделить общие части (return
) и вставить условие в выражение:
return COND1 && COND2 ? true : false;
Но ? true : false
является избыточным: если условие истинно, оценивается как истинное, иначе оценивается как ложное?Ну, это именно то, что делает само условие:
return COND1 && COND2;
Или с вашими конкретными выражениями:
return regIOobject::read()
&& permeabilityModelPtr_->read(subDict("permeability"))
&& magnetizationModelPtr_->read(subDict("magnetization"));