Само логично а?

Ответ может быть очевиден для некоторых из вас, но, поскольку я не могу найти ответ, мне нужно спросить его.
Часто, если функция должна возвращать, было ли все выполнено без проблем, я использую логическое значение, которое отслеживает любой сбой.

bool myFunction()
{
bool ok = true;
if (...) {
if (...) {
ok = ...;
}
ok = ok && (...);
}
ok = ok && (...);
return ok;
}

Как нет &&= существует, я много использую этот синтаксис: ok = ok && (...) ((...) может быть условием или значением). Но я нахожу это довольно нелегким. Есть ли какой-нибудь C ++-совместимый способ написать это более лаконично и элегантно?

0

Решение

Вы можете просто использовать &= с логическим флагом:

bool myFunction()
{
bool ok = true;
if (...) {
if (...) {
ok &= ...;
}
ok &= ...;
}
ok &= ...;
return ok;
}
2

Другие решения

Просто вернитесь рано, так как никакой дополнительный код не выполняется, если ok становится false:

bool myFunction()
{
bool ok = true;
if (...) {
if (...) {
if (!...) return false;
}
if (!...) return false;
}

return (...);
}

Это еще одна причина, по которой исключения лучше, чем коды ошибок: если вы их не обрабатываете, вы не разбираете код для нормальных путей кода.

2

Ты можешь использовать &= оператор, который равен, потому что bool является 1-битным типом и все арифметические операторы работают.

1

попробуйте использовать:

&=

вместо &&знак равно

1

В качестве альтернативы вы можете не использовать возвращаемые значения.

Передайте объект или указатели на функции для использования в случае успеха или неудачи.

Например. с объектом:

void onConditionOtherwise(BooleanAction& action)
{
if (...) && (...) {
action.success();
} else {
action.failure();
}
}
0

Самый стандартный способ сделать это — вернуть false, если ваше условие не выполнено, в противном случае вернуть true в конце метода. Так что на самом деле вам даже не нужна эта логическая переменная.
Просто используйте это так:

bool myFunction()
{
if (...) {

} else return false;

return true;
}

Если вы настаиваете на использовании логического значения, используйте &= оператор.

0
По вопросам рекламы [email protected]