Sé que usar un switch-case es más eficiente que vincular declaraciones else-if cuando se verifican múltiples valores de variables posibles. Pero lo que no sé es cómo "salta" al valor correcto tan rápido. ¿Qué tipo de función o protocolo utiliza generalmente?
Gracias.
Fíjate en esto, ahí está bastante bien explicado:
Cuando el compilador compila una declaración de cambio, inspeccionará cada una de las constantes del caso y creará una "tabla de salto" que usará para seleccionar la ruta de ejecución según el valor de la expresión.
Para un pequeño número de condiciones, la diferencia es bastante pequeña, pero para muchas condiciones es mejor usar un interruptor. La razón es que cuando hay muchos valores y condiciones, usa un hashtable/hashmap (un diccionario), es una estructura de datos con una complejidad O(1) de acceso a los elementos, para asegurar que todos los valores tengan el mismo tiempo de acceso. Esta es la razón por la cual los interruptores son mejores que los ifs cuando hay muchas condiciones para verificar.
Para publicar preguntas como How is <A> more efficient than <B> ?, debe estar bastante seguro de que, de hecho, es cierto.
Apuesto a que puedo encontrar algunos ejemplos para los cuales if...else if... funcionarán mejor. Por ejemplo, beneficiándose de la predicción de ramas.
Además, la complejidad O(1) puede llevar más tiempo que O(n) , dependiendo del costo constante. Y n , por supuesto.