Это очень тривиальная проблема:
Существует четыре логических функции: a (), b (), c () и d (). Я хочу продолжать называть их по порядку, пока не вернется первый true
, вместо того, чтобы делать традиционные
if(!a()) {
if(!b()) {
if(!c()) {
d();
}
}
}
или же
if(!a() && !b() && !c()) d();
Я подумал о написании выражения как о закороченной оценке.
(a() || b() || c() || d());
Но я никогда не видел, чтобы этот тест проводился таким образом в коде C / C ++. Есть ли проблема с этим подходом, который я пропускаю?
Благодарю.
Код, который вы написали, действителен. d()
будет оцениваться только в случае возврата других булевых функций false
,
Однако короткозамкнутая оценка менее читаема и подвержена ошибкам с точки зрения обслуживания, поскольку читатель может не понять ее тривиально.
Они эквивалентны, но решение для короткого замыкания может быть менее читабельным, особенно если имена функций длинные или принимают параметры.