[Tutorial] Usando Break & Continue
#1

Necessбrio entender sobre Loop: https://sampforum.blast.hk/showthread.php?tid=195395

Break
Break's sгo usados em Loop's, podendo parar o processo do mesmo.
loop faz uma conta rбpida de um numero a outro, exemplo: de 0 a 500, com o Break vocк poderб parar essa conta em qualquer numero entre 0 e 500...

Exemplo:
pawn Код:
new string[20];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(i == GetMaxPlayers())
        {
            format(string, sizeof(string), "Slots: {1E90FF}%d", i);
            SendClientMessageToAll(Branco, string);
            break;
        }
    }
Esse Loop vai fazer a conta de 0 a 500(que й o valor mбximo de slots), porem, quando o (i) que й a variбvel criada no loop chegar ao numero mбximo de slots(do servidor) ele irб formatar uma string e mandar uma mensagem para todos com o numero de slots do servidor. Apуs isso, irб parar o loop usando break.

Jб se vocк mudar a ordem do cуdigo, colocando o format e o SendClientMessage fora das chaves do if que compara a variбvel do loop com o numero mбximo de slots, ele terб um resultado diferente.

Exemplo de como ficaria o cуdigo:
pawn Код:
new string[20];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(i == GetMaxPlayers())
        {
            break;
        }
        format(string, sizeof(string), "Slots: {1E90FF}%d", i);
        SendClientMessageToAll(Branco, string);
    }
No exemplo acima, ele nгo mandaria o resultado obtido e sim todos os resultados durante o progresso da conta, em um servidor de 3 slots por exemplo ele mandaria vбrias mensagems com a seguinte string:

pawn Код:
0
1
2
Essa ordem ainda pode ser alterada, colocando o format e o SendClientMessage acima do if que contem o break, ficando assim:

pawn Код:
new string[20];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        format(string, sizeof(string), "Slots: {1E90FF}%d", i);
        SendClientMessageToAll(Branco, string);
        if(i == GetMaxPlayers())
        {
            break;
        }
    }
O resultado nesse caso seria:
pawn Код:
0
1
2
3
4
5
Continue
Da mesma forma que а uma funзгo que pare um loop tambйm а uma que faзa ele continuar, e o nome й bem apropriado. continue. O continue pode ser usado para pular um ou mais numeros no loop, exemplo:

pawn Код:
new string[20];
    for(new i = 0; i < 5; i++)
    {
        if(i == 3)
        {
            continue;
        }
        format(string, sizeof(string), "Slots: {1E90FF}%d", i);
        SendClientMessageToAll(Branco, string);
    }
    return 1;
    }
Neste exemplo, estariamos fazendo a conta com o resultado mбximo de 5(que supostamente seria o numero de slots) entгo, o continue faria o loop pular o numero 3, o resultado seria esse:

pawn Код:
0
1
2
4
Para pular mais de um numero й simples, vocк sу precisa usar operadores ">, &&, <"
pawn Код:
new string[20]
    for(new i = 0; i < 10; i++)
    {
        if(i > 3 && i < 7)
        {
            continue;
        }
        format(string, sizeof(string), "Slots: {1E90FF}%d", i);
        SendClientMessageToAll(Branco, string);
    }
    return 1;
    }
Neste caso, ele pularia apуs o numero 3 e antes do numero 7, tendo o resultado:

pawn Код:
0
1
2
3
7
8
9
Bom, fiz este tutorial bбsico por que ao fazer a lista de tutoriais notei que nгo hб nenhum tutorial sobre o assunto, apesar de ser uma coisa simples, por nгo haver muitos lugares com informaзхes algumas pessoas nгo sabem que utilidade pode ter Break e Continue, entгo ai estб =)
Reply
#2

Paraabйens JOSMA!!
Reply
#3

Bom tutorial, recursos super importantes que devem estar em mente a todo momento.
Vale lembrar que return e goto tambйm param o loop, jб vi gente dizendo por ai que usando return em vez de break o loop nгo para.
Reply
#4

estб bem explicado porйm acho que break e continue sу se faz realmente necessбrio qdo se utiliza o switch, nгo que este nгo possa ser utilizado de outra formas...
Reply
#5

Esse break para o processo do loop quando ele chega ao resultado?
Por exemplo se eu tivesse 50 Slots no meu server quando chegasse no 50 ele pararia o calculo certo?
Entгo quando nгo tem o break ele faz os calculos atй 500 mesmo ja achando o resultado?
Reply
#6

Esse negocio do return no loop й uma coisa que me fez derrubar cafe nas pernas, parabens.
Reply
#7

Quote:
Originally Posted by faeldk
Посмотреть сообщение
Esse break para o processo do loop quando ele chega ao resultado?
Por exemplo se eu tivesse 50 Slots no meu server quando chegasse no 50 ele pararia o calculo certo?
Entгo quando nгo tem o break ele faz os calculos atй 500 mesmo ja achando o resultado?
a resposta й sim, e isto pode tbm contribuir para o lag no servidor, loops q nгo param enquanto nгo acabam muitas vezes inutilmente "roubam" memуria de processamento da maquina que poderia estar sendo utilizado de outra forma
Reply
#8

Isso vai depender do seu max_players nй cara, se vocк definer seu max_players a 20 o loop vai parar no 20, se vocк definir o seu max_players a 1 o loop para em 1 e assim vai,o loop nгo necessariamente checa 500 vezes, mais sim quantas vezes ele for colocado para checar, digamos que colocaremos ao loop para sua checagem chegar a 40
pawn Код:
for (new x; x < 40; x ++)
ele vai dar "stop" em 40 e nгo em 500 e й claro vocк pode substituir este 40 ou o MAX_PLAYERS no seu loop para GetMaxPlayers() assim ele vai parar no nъmero de slots do seu servidor.
Reply
#9

Bom, "Gosma"
Reply
#10

Gostei, bom tutorial e bem explicado.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)