Mensajes: 25
Temas: 13
Registro en: Oct 2017
Reputación:
0
Hola buenas noches gente tengo una duda sobre los return
Código PHP: public funcion(id) { if(!is_user_connected(id)) { return PLUGIN_CONTINUE } if(g_perdido[id]) { bla bla bla return PLUGIN_HANDLED } }
en el if de si no esta conectado, con el return plugin_continue, seguira leyendo los if que estan de abajo ? como por ejemplo el de g_perdido ?
a diferencia del plugin_handled detiene toda la funcion en ese if cierto?
Mensajes: 713
Temas: 32
Registro en: Jul 2014
Reputación:
19
Hola.
Todos los return detienen la función por lo que las siguientes instrucciones no se ejecutan.
Excepto que hagas "return print_something()", sería lo único.
PLUGIN_CONTINUE y los demás, son valores numéricos.
Es como si harías "return 123", son simplemente números.
Cada valor (PLUGIN_HANDLED y otros) tienen su propio comportamiento pero para una función propia (que vos mismo creaste) no realizan ningún comportamiento adicional.
Como vos mismo dijiste, la condición sobre g_perdido no se va a ejecutar en caso de que no esté conectado pero no tiene nada que ver con que el return sea PLUGIN_CONTINUE o HANDLED, es sólo por el return.
Mensajes: 449
Temas: 32
Registro en: Apr 2017
Reputación:
6
lamento invadir el tema, pero ese era un duda que tambien tenia, si solo afecta el return;
que pasa cuando ponen
??
Si no te gusta algo, cámbialo. Si no lo puedes cambiar, cambia la forma en que piensas sobre ello <3
Mensajes: 713
Temas: 32
Registro en: Jul 2014
Reputación:
19
19/08/2018, 12:47 AM
(Última modificación: 19/08/2018, 01:00 AM por LuKks.)
(19/08/2018, 12:14 AM)Saber escribió: lamento invadir el tema, pero ese era un duda que tambien tenia, si solo afecta el return;
que pasa cuando ponen
??
Código PHP: function test() { for(new i = 0; i < 7; i++) { if(i == 2) { //continue; }
if(i == 4) { //break; }
if(i == 6) { //return; }
server_print("%d", i); }
server_print("holas"); }
Así tal cual debería mostrar: 0, 1, 2, 3, 4, 5, 6 y holas.
Si activas solamente continue: 0, 1, 3, 4, 5, 6 y holas.
Si activas solamente break: 0, 1, 2, 3 y holas.
Si activas solamente return: 0, 1, 2, 3, 4 y 5.
Si activas continue y break: 0, 1, 3 y holas.
Si activas continue y return: 0, 1, 3, 4 y 5.
Si activas continue, break y return: 0, 1, 3 y 5.
Espero no haberlo vuelto más confuso pero tienen ahí casi todas las posibilidades para analizar de manera visual.
edit:
Siento que me faltó una explicación más textual.
continue es como un mini return porque hace que no se ejecuten las siguientes instrucciones del bucle pero lo continúa (continue = continuar).
break es el return de los bucles, detiene todo el bucle (break = romper).
return se puede utilizar fuera y dentro de bucles, es un break para toda la función, se llama return (= devolver) porque tiene la funcionalidad de hacer que las funciones devuelvan valores.
Mensajes: 449
Temas: 32
Registro en: Apr 2017
Reputación:
6
entendió mas con la mini explicación de abajo xD que con la numérica
Si no te gusta algo, cámbialo. Si no lo puedes cambiar, cambia la forma en que piensas sobre ello <3
Mensajes: 1,933
Temas: 39
Registro en: Jul 2014
Reputación:
23
return se puede usar en un bucle en otro lenguaje pero en pawn es un error, incluso en cualquier lenguaje lo es, lo correcto es hacer un break y return al final de la funcion o segun la condicion
Mensajes: 713
Temas: 32
Registro en: Jul 2014
Reputación:
19
(19/08/2018, 01:23 AM)Sugisaki escribió: return se puede usar en un bucle en otro lenguaje pero en pawn es un error, incluso en cualquier lenguaje lo es, lo correcto es hacer un break y return al final de la funcion o segun la condicion
Pero cuál sería la razón para que sea un error?
Al terminar un bucle las variables que crees no las puedes utilizar fuera del bucle (en Pawn).
Cómo verificarías si tenes que hacer el return o no? tendrías que crear las variables fuera del bucle pero for tiene sus tres espacios y el return se puede utilizar.
Código PHP: function test() { new i;
for(; i < 5; i++) { if(i == 3) { break; } }
if(i == 3) { return; } }
versus
Código PHP: function test() { for(new i = 0; i < 5; i++) { if(i == 3) { return; } } }
Hasta lo utilicé en el socket_handshake: https://amxmodx-es.com/Thread-Desvirtue-...#pid186036
El cual está funcionando perfectamente en mi Live Scoreboard.
Mensajes: 3,466
Temas: 18
Registro en: Oct 2013
Reputación:
54
(19/08/2018, 01:23 AM)Sugisaki escribió: return se puede usar en un bucle en otro lenguaje pero en pawn es un error, incluso en cualquier lenguaje lo es, lo correcto es hacer un break y return al final de la funcion o segun la condicion
El gusto de los returns en medio o fuera de un ciclo va en las costumbres del programador. Es un tema discutido, bastante debatido, no hay aristas correctas. https://stackoverflow.com/questions/3537...-of-a-loop cosa de leer comentarios así, busca "disadvantages return mid loop" o similares
|