Lo encuentro más útil en cadenas de acciones que a menudo implican la detección de errores, etc.
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
}
La alternativa (no utilizando la asignación en la condición) es:
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
}
}
}
Con la comprobación de errores prolongada, la alternativa puede funcionar con el RHS de la página mientras que la versión asignación-in-condicional no hace eso.
Estoy de acuerdo, pero escribiría: while ((var = GetNext())! = 0) {...} sin pensarlo dos veces, en parte porque GCC se queja si no lo hago con mis opciones de compilación predeterminadas . –
cierto. Suponiendo que está utilizando un lenguaje que admita declaraciones for-loop, y que aún no esté utilizando var fuera del ciclo. – Gerald
en algunos idiomas, como ANSI C, las reglas de alcance no permiten este enfoque, @KerrekSB – wirrbel