varias switch sentencias sentencia que programacion else ejemplos condiciones condicionales condicional objective-c cocoa performance if-statement switch-statement

objective-c - switch - sentencia if else en c++



Evaluando cada enunciado condicional en un bloque if... else if... (3)

¿Objective-C evalúa cada enunciado en un bloque if... else if... o evalúa cada uno tal como viene a ellos y luego omite las evaluaciones restantes si se ha encontrado una condición verdadera?

Esta es más una pregunta pragmática relacionada con el rendimiento que cualquier otra cosa.

Y sí, sí sé que el contenido del bloque if en sí mismo no se ejecuta, pero me refiero a las declaraciones reales que se evalúan.

Ejemplo

if ([condition A] == test) { // Do something } else if ([condition B] == test) { // Do something } else if ([condition C] == test) { // Do something } else { // Do something because all other tests failed }

Entonces ... si la condición A es verdadera, ¿las condiciones B y C se evalúan de todos modos?

Si lo hacen, ¿el uso de una declaración de cambio se realiza de la misma manera o un interruptor solo prueba cada condición a medida que avanza y luego sale de la evaluación debido a la interrupción?

Según tengo entendido, en un bloque if... else if... cada condición se evalúa y, por lo tanto, se usa un interruptor o se anida si (ugh - no disfrutas el pensamiento allí) podría ser más rápido en operaciones de evaluación grandes en un lote de datos (cientos de miles de elementos que se verifican contra potencialmente cien declaraciones).

Sólo curioso :-)


Fuera del objetivo de [], c se comporta exactamente de la misma manera que C.

Para if() ... else if() ... else ... chains significa que cada expresión se evalúa hasta que se evalúa como verdadera y se ingresa el bloque. Básicamente

if (a) { ... } else if (b) { ... } else { ... }

se interpreta como

if (a) { ... } else { if (b) { ... } else { ... } }


No, si se cumple la condición A, B y C no se evalúan. De hecho, son parte de las cláusulas else que de todos modos no se ejecutarán.

Solo una nota al margen: if (condA || condB) o if (condA && condB) también evalúa perezosamente, es decir, en el primer caso condB solo se evalúa si condA es falso, en el segundo caso cuando condA es verdadero.


Solo los evalúa a medida que les llega. Un bloque if ... else if es equivalente a if.. else {if...} . Se comporta de la misma manera que ifs anidados, está formateado muy bien y omite algunas llaves.