Я считаю это наиболее полезным в цепочках действий, которые часто связаны с обнаружением ошибок и т. Д.
if ((rc = first_check(arg1, arg2)) != 0)
{
report error based on rc
}
else if ((rc = second_check(arg2, arg3)) != 0)
{
report error based on new rc
}
else if ((rc = third_check(arg3, arg4)) != 0)
{
report error based on new rc
}
else
{
do what you really wanted to do
}
Альтернатива (не использующая присвоение в условии):
rc = first_check(arg1, arg2);
if (rc != 0)
{
report error based on rc
}
else
{
rc = second_check(arg2, arg3);
if (rc != 0)
{
report error based on new rc
}
else
{
rc = third_check(arg3, arg4);
if (rc != 0)
{
report error based on new rc
}
else
{
do what you really wanted to do
}
}
}
При длительной проверке ошибок альтернатива может работать с RHS на странице, тогда как версия с условным присвоением этого не делает.
Проверки ошибок также могут быть «действиями» - first_action()
, second_action()
, third_action()
- конечно, а не просто проверками. То есть они могут быть проверены этапами процесса, которым управляет функция. (Чаще всего в коде, с которым я работаю, функции выполняются в соответствии с проверками предварительных условий или выделением памяти, необходимой для работы функции, или в аналогичных строках).