2009-03-25 296 views
25

¿Alguien puede explicarme esto?¿Cuál es la diferencia entre IF-ELSE y SWITCH?

+0

Solo un puntero: no obtendrá muchas respuestas útiles si no se toma el tiempo para formular correctamente la pregunta. –

+0

No importa :) ya está hecho. –

+0

Ya hay una pregunta sobre esto en SO: [Switch vs if-else] (http://stackoverflow.com/questions/97987/switch-vs-if-else) ** [EDIT] **
Como "lc "declaró en un comentario a esta respuesta, la pregunta anterior no es un duplicado, pero aún podría darle una buena idea del funcionamiento y qué usar si ocurre esa situación específica. – RuudKok

Respuesta

33

Son bastante similares, pero cada uno tiene algunas características especiales.

interruptor

  • switch es por lo general más compacto que un montón de anidado if else y por lo tanto, más fácil de leer
  • Si omite los break entre dos carcasas de interruptor, puede caer a través de la siguiente caso en el muchos lenguajes tipo C Con if else necesitaría un goto (que no es muy agradable para sus lectores ... si el lenguaje es compatible con goto).
  • En la mayoría de los idiomas, switch solo acepta tipos primitivos como clave y constantes como casos. Esto significa que puede ser optimizado por el compilador usando una tabla de salto que es muy rápida.
  • No está claro cómo formatear correctamente switch. Semánticamente, los casos son objetivos de salto (como las etiquetas para goto) que deben alinearse a la izquierda. Las cosas empeoran cuando tienes llaves:

    case XXX: { 
    } break; 
    

    ¿O deberían las llaves entrar en líneas propias? ¿Debería el corchete de cierre ir detrás del break? ¿Qué tan ilegible sería eso? etc.

  • En muchos idiomas, switch solo acepta solo algunos tipos de datos.

if-else

  • if permite expresiones complejas en la condición mientras el interruptor quiere una constante
  • No se puede olvidar accidentalmente los break entre if s pero se puede olvidar el else (especialmente durante el corte de pasta)
  • acepta todos los tipos de datos.
+1

Una nota para mencionar que el comportamiento de caída del caso es específico del lenguaje, c lo permitirá felizmente hacerlo, pero C# impone algunas restricciones al pasar de una declaración de caso a otra. –

+0

una de las principales diferencias es la forma en que comprueban la condición: con 'if-else' solo se puede verificar la igualdad, mientras que con' switch' se puede hacer un poco más ... –

-1

Creo que la diferencia principal es que en los bloques si-si no podemos probar conditions.but no va exactamente en la misma forma que en el interruptor

0

SI persona - Se utiliza para tomar unas decisiones

Instrucción de cambio: se usa para probar el valor de la variable dada con una lista de valor de caso.

1

La diferencia principal es que switch despachos inmediatamente a la case en cuestión, normalmente a través de un salto de indexado, en lugar de tener que evaluar todas las condiciones que serían necesarios en una cadena if-else, lo que significa que el código en el final de la cadena se alcanza más lentamente que el código al principio.

A su vez, impone algunas restricciones en la declaración switch que la cadena no tiene if-else: no puede manejar todos los tipos de datos, y todos los valores case tiene que ser constante.

0
The difference between Switch and if-else statement is below: 

This is the general syntax of if-else ladder: 
if (condition1) { //Body of if } 
else if (condition2) { //Body of if } 
else if (condition3) { //Body of if } 


And this is the general syntax for switch: 
switch (variable) 
{ 
case <variable value1>: //Do Something 
              break; 
case <variable value2>://Do Something 
              break; 
default: //Do Something 
       break; 
} 

# The if-else ladder is of type strict condition check, 
# while switch is of type jump value catching. 

Ventajas del interruptor de más de if-else escalera:

  • Una sentencia switch funciona mucho más rápido que equivale escalera si-else. Es porque el compilador genera una tabla de salto para un cambio durante la compilación. En consecuencia, durante la ejecución, en lugar de verificar qué caso se satisface, solo decide qué caso se debe ejecutar.
  • Es más legible y en comparación con las sentencias if-else.
2

Diferencias entre if-else y cambiar

  1. expresión dentro if decidir si ejecutar las sentencias en el interior si el bloque o en bloques más. Por otro lado, la expresión dentro de la sentencia switch decide qué caso ejecutar.

  2. La instrucción If-esle comprueba la igualdad así como la expresión lógica. Por otro lado, cambie las verificaciones solo por igualdad.

  3. La instrucción if evalúa entero, carácter, puntero o tipo de punto flotante o tipo booleano. Por otro lado, la declaración de cambio evalúa solo el carácter o un tipo de datos entero.

  4. La secuencia de ejecución es como cualquiera de las instrucciones en if block se ejecutará o se ejecutarán las sentencias en else block statement. Por otro lado, la expresión en la sentencia switch decide qué caso ejecutar y, si no aplica una instrucción break después de cada caso, se ejecutará hasta el final de la instrucción switch.

  5. Si la expresión adentro si las salidas son falsas, se ejecutará la instrucción dentro del bloque else. Si la expresión dentro de la instrucción switch resulta ser falsa, se ejecutan las declaraciones predeterminadas.

  6. Es difícil editar sentencias if-else, ya que es tedioso rastrear dónde se requiere la corrección. Por otro lado, es fácil editar instrucciones de cambio ya que son fáciles de rastrear.

Cuestiones relacionadas