Duda return
#1
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?
Responder
#2
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.
Responder
#3
lamento invadir el tema, pero ese era un duda que tambien tenia, si solo afecta el return;

que pasa cuando ponen

Código PHP:
continue; 
??
Si no te gusta algo, cámbialo. Si no lo puedes cambiar, cambia la forma en que piensas sobre ello <3
Responder
#4
(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:
continue; 
??

Código PHP:
function test() {
    for(new 
07i++) {
        if(
== 2) {
            
//continue;
        
}

        if(
== 4) {
            
//break;
        
}

        if(
== 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.
Responder
#5
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
Responder
#6
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
Competitive/Face it Pick Up Game (PUG) servidor de prueba: 45.77.94.109:27016 Click para Entrar
[Imagen: b_350_20_5A6C3E_383F2D_D2E1B5_2E3226.png]

(14/08/2015, 10:15 PM)Sugisaki escribió: "El mundo es caotico, irracional e injusto. No tiene ningun significado"
Palabras que desde hace mucho tiempo he buscado para describir, ¿Que es el mundo?
Crab

Código PHP:
if(ayuda && free)
{
    exit();

Responder
#7
(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(; 
5i++) {
        if(
== 3) {
            break;
        }
    }

    if(
== 3) {
        return;
    }


versus

Código PHP:
function test() {
    for(new 
05i++) {
        if(
== 3) {
            return;
        }
    }


Hasta lo utilicé en el socket_handshake: https://amxmodx-es.com/Thread-Desvirtue-...#pid186036

[Imagen: WX56Rc.jpg]

El cual está funcionando perfectamente en mi Live Scoreboard.
Responder
#8
(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
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)