09.07.2012, 15:37
Declaraзхes e Estruturas de Controlo
________::Introduзгo
Neste tutorial vou explicar a maior parte e as mais importantes Estruturas de Controlo da linguagem Pawn,
para servidores que tenham como include principal a <a_samp>
________::Estruturas de Controlo
__::Condicionais
::if
Verifica se algo й verdadeiro ou falso
pawn Код:
new lol =2;
if(lol == 2)
{
print("Como lol tem valor 2, vai ser impresso isto na caixa preta (CmdBox)");
}
pawn Код:
if(AlgumaFuncao(...) == 2)
{
print("O Valor de AlgumaFuncao(...) й 2");
}
pawn Код:
if(AlgumaFuncao(...) == 2 && OutraFuncao(...) == 52)
{
print("O Valor de AlgumaFuncao(...) й 2 e de OutraFuncao(...) й 52");
}
::else
Chamado quando "if" falha
pawn Код:
new lol = 2;
if(lol == 5)
{
print("Isto nao vai ser impresso, porque lol nao й igual a 2");
}
else
{
print("Isto vai ser impresso, porque o if falhou");
}
pawn Код:
new lol = 2;
if(lol == 5)
{
print("Isto nao vai ser impresso, porque lol nao й igual a 2");
}
else if(lol == 3)
{
print("Tambйm nao vai ser impresso, porque lol nгo й 3");
}
else if( lol == 2)
{
print("Vai ser impreso, porque lol й igual a 2");
}
::?
Basicamente serve para efetuar uma alteraзгo, dentro de um "if" ou "else"
pawn Код:
new
primeira = 3,
segunda;
if(primeira == 3)
{
segunda = 2;
}
else if(primeira == 5)
{
segunda = 1;
}
else
{
segunda = 0;
}
pawn Код:
segunda = (primeira == 3) ? (2) : ((primeira == 5) ? (1) : (0));
__::Loops
::while
"while" serve para fazer determinada aзгo, quando a demonstraзгo for verdadeira:
pawn Код:
//Um looping usando while
new
i = 0;
while(i < MAX_PLAYERS)
{
DeterminadaFuncao(...);
i++;
}
::for
"for" significa "para":
pawn Код:
for(new i = 0; i < MAX_PLAYERS; i++)
//pode-se ler:
//para( nova variavel "i", de valor 0, para "i" menor que MAX_PLAYERS; faz i++ (aumenta "i" em um valor inteiro)
{
DeterminadaFuncao(...);
}
Este loop pode ser tambйm escrito da seguinte forma:
pawn Код:
new
i = 0;
for( ; i < MAX_PLAYERS ;)
{
DeterminadaFuncao(...);
i++;
}
NOTA
este tipo de loop й mais utilizado por ser menos extenso, porйm faz mais verificaзхes...
Um GM com grandes quantidades de loops deste tipo acaba por lagar mais do que um GM
com iguais quantidade de loops tipo "while"
::do-while
"do-while" faz determinada aзгo, enquando a demonstraзгo se verificar verdadeira
pawn Код:
new
i = 0;
do
{
DeterminadaFuncao(...);
i++;
}
while(i < MAX_PLAYERS);
::if-goto
Este loop й bastante facil de entender... Porйm й bastante longo, o que nao permite ser muito usado
pawn Код:
new
i = 0;
loop:
if(i < MAX_PLAYERS)
{
DeterminadaFuncao(...);
i++;
goto loop;
}
__::Switch(s)
::switch
Basicamente й o mesmo que o "if/else if", porйm de uma forma mais simples, mais curta e mais rapida de escrever/entender
pawn Код:
new
skin = 150;
switch(skin)
{
case 149:
{
print("isto nгo vai ser impresso");
}
case 150:
{
print("isto vai ser impresso");
}
case 151:
{
print("isto nгo vai ser impresso");
}
default:
{
print("isto nгo vai ser impresso");
}
}
pawn Код:
new
skin = 150;
if(skin == 149)
{
print("isto nгo vai ser impresso");
}
else if(skin == 150)
{
print("isto vai ser impresso");
}
else if(skin == 151)
{
print("isto nгo vai ser impresso");
}
else
{
print("isto nгo vai ser impresso");
}
::case
"case" й a base de qualquer Switch... Significa "caso ... seja verdadeiro"
pawn Код:
new skin;
switch(skin)
{
case 1, 2, 4, 8, 16, 32:
{
DeterminadaFuncao(...);
}
}
pawn Код:
new skin;
if(skin == 1 || skin == 2 || skin == 4 || skin == 8 || skin == 16 || skin == 32)
{
DeterminadaFuncao(...);
}
a estrutura "case" tem vбrios modos de escrever, atribuindo determinado significados:
pawn Код:
new
a;
switch(a)
{
case 1:
{
print("Caso a == 1");
}
case 2,3,4:
{
print("Caso a == 2, ou a== 3, ou a== 4");
}
case 6 .. 11:
{
print("Para todos os valor entre 6 e 11, inclusive");
print("a == 6 || a== 7 || a== 8 || a == 9 || a == 10 || a == 11");
}
}
::default
Estб para "case", como "else" estб para "if"
pawn Код:
new a;
switch(a)
{
case 2:
{
print("se a == 2, imprime isto");
}
default:
{
print("se a != 2 (a estrutura if(a == 2) falhou), imprime isto");
}
}
Й o mesmo que isso:
pawn Код:
new a;
if(a == 2)
{
print("se a == 2, imprime isto");
}
else
{
print("se a != 2 (a estrutura if(a == 2) falhou), imprime isto");
}
__::Declaraзхes Rбpidas(s)
::break
"break" pбra um loop quando aplicado:
pawn Код:
for(new i = 0; i < 400; i++)
{
if(i == 99) break;
//para o loop quando "i" for igual a 99
}
::continue
salta/reinicia o loop
pawn Код:
for(new i = 0; i < 4; i++)
{
if(i != 3) continue;
printf("i = %d", i);
//no log, vai imprimir apenas o 3, pois para todos os restantes valores, o
//loop foi reiniciado antes da parte de imprimir o valor de "i"
}
::return
Esta declaraзгo tem vбrios usos
Um deles й para interromper uma funзгo/loop
pawn Код:
main()
{
print("1");
ImprimirLol("1");
print("2");
}
ImprimirLol(num)
{
//se num for igual a um nao vai imprimir nada
if(num == 1)
{
return;
}
//caso "if(num == 1) falhe, executa este "else"
else
{
print("2");
//imprime "2"
}
}
Por outro lado, esta declaraзгo pode tambйm ser utilizada para retornar um valor:
pawn Код:
main()
{
print("1");
if(RetornarValor(1) == 27)//Quando o argumento da funcao
//RetornarValor, se esse valor
// retornado foir 27...
{
print("2"); // imprime na CmdBox: "2"
}
print("3");
}
RetornarValor(num)
{
if(num == 1)
{
return 27;//caso o argumento (num) for igual a 1, a funcao
//retorna o valor 27
}
return false;//caso num != 1, retorna/diz que a verificaзгo й falsa
}
________::Conclusгo
й isso galera.... Espero que tenham gostado
Qualquer coisa comente/pergunte...
Caso tenha gostado do tutorial, ou tenha sido util para vc, comente
________::Links
Postei no pastebin todos os exemplos que criei ai em cima:
http://pastebin.com/1Ybvak01
________::Crйditos
Crйditos a:
andmeida10, por ter criado o tutorial
Wiki-SAMP - Onde aprendi e desenvolvi os meus conhecimentos
SAMP Team, por suportar este forum