Ответ может быть очевиден для некоторых из вас, но, поскольку я не могу найти ответ, мне нужно спросить его.
Часто, если функция должна возвращать, было ли все выполнено без проблем, я использую логическое значение, которое отслеживает любой сбой.
bool myFunction()
{
bool ok = true;
if (...) {
if (...) {
ok = ...;
}
ok = ok && (...);
}
ok = ok && (...);
return ok;
}
Как нет &&=
существует, я много использую этот синтаксис: ok = ok && (...)
((...)
может быть условием или значением). Но я нахожу это довольно нелегким. Есть ли какой-нибудь C ++-совместимый способ написать это более лаконично и элегантно?
Вы можете просто использовать &=
с логическим флагом:
bool myFunction()
{
bool ok = true;
if (...) {
if (...) {
ok &= ...;
}
ok &= ...;
}
ok &= ...;
return ok;
}
Просто вернитесь рано, так как никакой дополнительный код не выполняется, если ok
становится false
:
bool myFunction()
{
bool ok = true;
if (...) {
if (...) {
if (!...) return false;
}
if (!...) return false;
}
return (...);
}
Это еще одна причина, по которой исключения лучше, чем коды ошибок: если вы их не обрабатываете, вы не разбираете код для нормальных путей кода.
Ты можешь использовать &=
оператор, который равен, потому что bool является 1-битным типом и все арифметические операторы работают.
попробуйте использовать:
&=
вместо &&знак равно
В качестве альтернативы вы можете не использовать возвращаемые значения.
Передайте объект или указатели на функции для использования в случае успеха или неудачи.
Например. с объектом:
void onConditionOtherwise(BooleanAction& action)
{
if (...) && (...) {
action.success();
} else {
action.failure();
}
}
Самый стандартный способ сделать это — вернуть false, если ваше условие не выполнено, в противном случае вернуть true в конце метода. Так что на самом деле вам даже не нужна эта логическая переменная.
Просто используйте это так:
bool myFunction()
{
if (...) {
} else return false;
return true;
}
Если вы настаиваете на использовании логического значения, используйте &= оператор.