Duda break;
#1

Bueno, hay una duda que siempre me llena la cabeza de preguntas y es la funciуn "break;". Esta funciуn si o si tiene que utilizarse al hacer la comprobaciуn en un loop?, es decir, si yo tengo el valor deseado y lo compruebo con una condiciуn, debo si o si usar break para matar el loop? o no es necesario?.

Por ejemplo yo hago un loop de MAX_VEHICLES, donde obtengo su posiciуn y compruebo si el jugador estб cerca de йl con IsPlayerInRangeOfPoint, dentro de la condiciуn (en caso de que йsta de verdadera) retorno la ID del vehнculo el cual el usuario se encuentra dentro de el, lo hago con "return i;" en este caso, debo utilizar si o si "break;" debajo del return?. Liberenme esa duda por favor, muchas gracias a todos!

EDIT: Comprobй que poner break luego del return no sirve ademбs da un warning, asн que en la funciуn que solo retorno la ID del coche no tendrнa que ir їpero que me dicen de las demбs? siempre es recomendable usar break luego de comprobar la condiciуn? saludos
Reply
#2

break esencialmente rompe el bucle cuando ya obtienes el resultado deseado, para evitar asн obtener futuros resultados que ya serнan superfluos.

Un ejemplo (en PAWN):
pawn Код:
for(new i = 0; i != 10; i++)
{
    if(i == 3) {
        printf("i = 3");
        break;
    }
    else {
        printf("i = %i", i);
        // Se llama i = 0, i = 1, i = 2 pero no i = 4 en adelante
    }
}
Obviamente es un ejemplo muy simple pero no recuerdo uno mбs practico ahora. En cuanto a tu duda si es necesario colocar 'break' luego de 'return', pues no necesariamente. 'return' rompe la secuencia del cуdigo, la diferencia es que se puede utilizar en cualquier parte del cуdigo y retorna un valor, mientras que 'break' solo rompe del bucle y todo el cуdigo posterior fuera del mismo continua.

Es necesario que utilices 'break' y no 'return' cuando debes romper con el bucle pero quisieras ejecutar mбs cуdigo posteriormente fuera del bloque del bucle. Por ejemplo, obtener el vehнculo mбs cercano y luego realizar operaciones con йl fuera del bucle. Almacenas la ID en una variable e inmediatamente rompes el bucle, y al final de la funciуn puedes retornar esa ID. En cualquier otro caso, colocar 'return' dentro del bucle es suficiente.

Por ъltimo, es imposible que cualquier cуdigo ejecutado luego del 'return' en la misma funciуn vaya a ser ejecutado, ya que al retornar un valor le indicas al servidor que ya terminaste de usar la funciуn y se corta su ejecuciуn, todo el cуdigo posterior estarнa de adorno, y esto te lo advierte el compilador para que puedas reorganizar tu cуdigo. En tu caso, creo que colocar 'break' luego del return no es algo realmente necesario especнficamente para tu funciуn. Me gustarнa enlazarte al siguiente artнculo que tiene informaciуn valiosa con respecto a las estructuras y las diversas funciones: https://sampwiki.blast.hk/wiki/Control_Structures

Saludos.
Reply
#3

no es necesario si o si pero es recomendable para la optimizacion ya que con el break finalizas el bucle y evitas la sucesion del bucle hasta que este termine.
Reply
#4

Gracias chicos, el break siempre me confundiу. De todas maneras yo obtengo la posiciуn del coche mбs cercano desde un Stock y ahн mismo retorno la id del coche, luego ya llamo a la funciуn obteniendo esa ID sin necesidad de usar ningъn bucle, solo en el Stock.

Pero resolvieron mi duda. Muchas gracias!!
Reply
#5

Ya todo esta aclarado, entonces nomas quisiera decir lo siguiente (para ser mas claro sobre esto):

Tambien podrias hacer lo siguiente:
pawn Код:
for(new i = 0; i < 10; i++)
{
    if(i == 3)
        {
        return i;
    }
}
Rempera el bucle, saliendose (exit) de la funcion, y retornara un valor.
Reply
#6

Quote:
Originally Posted by SickAttack
Посмотреть сообщение
Ya todo esta aclarado, entonces nomas quisiera decir lo siguiente (para ser mas claro sobre esto):

Tambien podrias hacer lo siguiente:
pawn Код:
for(new i = 0; i < 10; i++)
{
    if(i == 3)
        {
        return i;
    }
}[
Rempera el bucle, saliendose (exit) de la funcion, y retornara un valor.
Exactamente eso es lo que hago. Muchas gracias.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)