Criando switch 



O que é um switch?
Switch é um comparador de resultados semelhante ao if e else if porem com uma estrutura diferenciada, em alguns casos chega à ser mais rápido(caso usado corretamente com auxilio de break).

Exemplo de uso:
Vamos tomar por exemplo o comando /admins, em vez criarmos um if seguido de vários else if pra cada nível de admin à aparecer no /admins precisaremos apenas criar um switch(função) seguido de cases, o case servirá como o else if mas de uma maneira mais compacta e otimizada pois só armazenará o numero(enum) à ser verificado, abaixo o exemplo do /admins por if e o /admins por switch.

if (strcmp(cmd, "/admins", true) == 0)

{

for(new i = 0; i <= MAX_PLAYERS; i++) {     if(IsPlayerConnected(i) == 1 && PlayerInfo[i][pAdmin] > 0)  {

    if(PlayerInfo[i][pTrampo] == 1) { GetPlayerName(i, sendername, sizeof(sendername));

if(PlayerInfo[i][pAdmin] == 1)

{

    format(string, 256, "Nome: %s [Moderador] (Trabalhando)", sendername);

SendClientMessage(playerid, COR_ADMINS, string);

}

if(PlayerInfo[i][pAdmin] == 2)

{

format(string, 256, "Nome: %s [Administração Nível 2] (Trabalhando)", sendername);

SendClientMessage(playerid, COR_ADMINS, string);

}

if(PlayerInfo[i][pAdmin] == 3)

{

format(string, 256, "Nome: %s [ Administração Nível 3] (Trabalhando)", sendername);

    SendClientMessage(playerid, COR_ADMINS, string);

}

}

}

return 1;

}


O exemplo acima mostra como seria um /admins usando else if, veja como ficaria este comando usando switch abaixo.

if (strcmp(cmd, "/admins", true) == 0)

{

 for(new i = 0; i <= MAX_PLAYERS; i++)  {      switch(PlayerInfo[i][pAdmin])//Função a ser verificada   {       case 1: { format(string, 256, "Nome: %s [Moderador] (Trabalhando)", sendername); SendClientMessage(playerid, COR_ADMINS, string); } //Se a função verificada for igual a 1       case 2: { format(string, 256, "Nome: %s [Administrador nível 2] (Trabalhando)", sendername); SendClientMessage(playerid, COR_ADMINS, string); } //Se a função verificada for igual a 2       case 3: { format(string, 256, "Nome: %s [Administrador nível 3] (Trabalhando)", sendername); SendClientMessage(playerid, COR_ADMINS, string); } //Se a função verificada for igual a 3       default: { Aqui a função a ser execultada caso nada se iguale aos resultados acima. }      }  }     return 1; }


É lógico que nem todos os comandos /admin serão assim.

Criando o seu switch:
Crie seu switch com a função à ser verificada que quiser, mas siga este formato abaixo:

switch (Função) //Coloque por exemplo um PlayerInfo[player][info] ou qualquer outra coisa

{

 case 1:

 {

  //O que deve ser executado caso seja igual a 1

  return true;

 }

 case 2:

 {

  //O que deve ser executado caso seja igual a 2

  return true;

 }

 case 3:

 {

  //O que deve ser executado caso seja igual a 3 }

  return true;

 }

 default: //Não obrigatório

 {

  //O que deve ser executado caso não seja igual aos exemplos acima

 }

}


Lembrando, não necessariamente o resultado deverá seguir este padrão de 1, 2, 3.... Você tem total liberdade pra pular ou adequar valores.

Você pode também modificar a forma do case, pra procurar por mais de um resultado como no exemplo abaixo:

case 1, 2, 3:

{

 //O que deve ser executado caso seja igual a 1, 2 ou 3

 return true;

}


em um if você teria que usar algo maior como este abaixo

if (Função == 1 || Função == 2 || Função == 3) //Ou como os valores são consecutivos usar operadores relacionais < >

{

 O que deve ser executado caso a função seja igual a 1, 2 ou 3

 return true;

}


Você pode também verificar resultados de um numero à outro, como no exemplo abaixo.

case 1 .. 10:

{

 //O que deve ser executado caso o resultado se enquadre entre 1 e 10

 return true;

}


Em if ficaria assim

if (Função >= 1 && Função <= 3) {  //O que deve ser executado caso a Função se enquadre entre ou igual 1 ou 4  return true; } 


Abaixo um exemplo bem distinto dos cases:

if (strcmp(cmd, "/org", true) == 0)

{

switch (PlayerInfo[playerid][pMembro])

{

 case 1 .. 3:

 {

         SendClientMessage(playerid, Cor, "Você pertence a uma org igual ou entre 1 e 3");

 }

 case 7, 8, 10:

 {

         SendClientMessage(playerid, Cor, "Você pertence a org 7, 8 ou 10");

 }

 case 4:

 {

         SendClientMessage(playerid, Cor, "Você pertence a org 4");

 }

 default:

 {

         SendClientMessage(playerid, Cor, "Você pertence a uma org que não é 1, 2, 3, 4, 7, 8 ou 10");

 }

}

return 1:

}


Qualquer duvidas é só perguntar, como sempre.

0 comentários:

Postar um comentário

Related Posts Plugin for WordPress, Blogger...
Kenon. Tecnologia do Blogger.

About Me

Random