Usando Break & Continue -
Josma_cmd - 06.05.2011
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:
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:
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:
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:
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б =)
Re: Usando Break & Continue -
JOKERBOY - 06.05.2011
Paraabйens JOSMA!!
Re: Usando Break & Continue -
CyNiC - 06.05.2011
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.
Re: Usando Break & Continue -
Chainksain - 06.05.2011
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...
Re: Usando Break & Continue -
faeldk - 06.05.2011
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?
Re: Usando Break & Continue -
steki. - 06.05.2011
Esse negocio do return no loop й uma coisa que me fez derrubar cafe nas pernas, parabens.
Re: Usando Break & Continue -
Chainksain - 06.05.2011
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
Re: Usando Break & Continue - [S]trong - 06.05.2011
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.
Re: Usando Break & Continue -
JonathanFeitosa - 06.05.2011
Bom, "Gosma"
Re: Usando Break & Continue -
The Knight - 06.05.2011
Gostei, bom tutorial e bem explicado.