¿Necesita romper el interruptor cuando se usa el retorno?

110

Me preguntaba si necesito usar "break" en la función "switch" cuando se usa "return".

function test($string)
{
  switch($string)
  {
    case 'test1':
      return 'Test 1: ' . $string;
    case 'test2':
      return 'Test 2: ' . $string;
  }
}

Lo he probado y funciona bien sin "interrupción". Pero necesito saber si esto es seguro. Gracias.

EMC
fuente
1
qué pasará si $ string = 'testx';
Jagadeesan

Respuestas:

132

Sí, puede usar en returnlugar de break...

breakes opcional y se utiliza para evitar " caer " en todas las demás casedeclaraciones. Por tanto, returnse puede utilizar de forma similar, ya que returnfinaliza la ejecución de la función.

Además, si todas sus casedeclaraciones son así:

case 'foo':
   $result = find_result(...);
   break;

Y después de la switchdeclaración que acaba de tener return $result, usar return find_result(...);en cada uno casehará que su código sea mucho más legible.

Por último, no olvide agregar el defaultcaso. Si cree que su código nunca llegará al defaultcaso, entonces puede usar la assertfunción, porque nunca puede estar seguro.

insumidad
fuente
Gracias Luzhin, eso es lo que pensé.
EMC
16

No necesita un descanso, el retorno detiene la ejecución de la función.

(para referencia: http://php.net/manual/en/function.return.php dice:

Si se llama desde dentro de una función, la declaración return () finaliza inmediatamente la ejecución de la función actual

)

Nanne
fuente
4

No, no es necesario, porque cuando se llama a la palabra clave return, indicará que la función particular a la que se llamó el interruptor / caso ha llegado a su fin.

Gayan Hewa
fuente
3

No, no necesita breakuna switch casedeclaración. En breakrealidad, es opcional, pero utilícelo con precaución.

Martín pescador
fuente
2

No lo necesita, pero le recomiendo encarecidamente que lo use en cualquier caso como una buena práctica.

Martin Bean
fuente
6
no tiene sentido, ya que el retorno claramente existe por sí mismo en la ejecución =) Menos código es mejor.
EMC
7
¡Menos código! = Mejor. Ve a jugar al golf de código. Prefiero tener un código explícito y legible que un código sobre optimizado solo para que pueda estar en una línea a expensas de la legibilidad y la comprensibilidad.
Martin Bean
3
Puedes argumentar esto en ambos sentidos. Algunos compiladores advierten sobre código no ejecutable después de un retorno en un cambio, otros no lo hacen. Es una preferencia personal, y para mí al menos está influida por la cantidad de veces que me ha mordido al caer a través de un interruptor, me gusta ver la ruptura.
Harry
2

Break es solo una declaración de precaución que se usa para limitar el control de la estructura del interruptor para que no entre en otro caso ... por ejemplo, si tiene tres declaraciones de casos y el valor es para el primer caso y ha utilizado el caso sin ninguna estructura de ruptura, entonces todos los siguientes casos se ejecutará a pesar de que se cumpla la condición solo para el primer caso ... Return puede realizar la función asme, por lo que no será un problema si usa return en lugar de break porque return quitará el control de la declaración del caso de cambio cual es la necesidad en ese momento ... espero que ayude ....

Abhimanyu Srivastava
fuente
1

return devuelve el control al método de llamada, donde as break salta a la primera instrucción después del bloque de cambio.

Nishant Baranwal
fuente