[Tutorial] sobre Switch
Autor: Progressão Pawn | Publicado: 2011-10-26T17:47:00-02:00

O que é o switch?Switch é um comparador de resultados semelhante às estruturas if e else if porem, ele trabalha com uma mecânica um pouco diferente dessas citadas; funciona como um loop que verifica todos os possiveis resultados do primeiro ao último case ou default.Qual a diferença entre o else if e o switch?Switch além de mais organizado é mais prático economizando e muito o uso de operadores relacionais além de ser de fácil compreensão, porem, em alguns códigos é mais aconselhável o uso do if para empregar estruturas não indicadas no switch.Este é um exemplo de uma das formas de se fazer um /admins em if, elseif e em switch.if (strcmp(cmdtext, "/admins", true) == 0){for(new i = 0; i &lt;= MAX_PLAYERS; i++){    if(IsPlayerConnected(i) == 1 &amp;&amp; PlayerInfo[i][pAdmin] &gt; 0)    {        if(PlayerInfo[i][pTrampo] == 1)        {            GetPlayerName(i, sendername, sizeof(sendername));            if(PlayerInfo[i][pAdmin] == 1)            {                format(string, sizeof(string), "Nome: %s [Moderador] (Trabalhando)", sendername);                SendClientMessage(playerid, COR_ADMINS, string);            }            if(PlayerInfo[i][pAdmin] == 2)            {                format(string, sizeof(string), "Nome: %s [Administração Nível 2] (Trabalhando)", sendername);                SendClientMessage(playerid, COR_ADMINS, string);            }            if(PlayerInfo[i][pAdmin] == 3)            {                format(string, sizeof(string), "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 abaixoif(strcmp(cmdtext, "/admins", true) == 0){  for(new i, PP = GetMaxPlayers(); i &lt; PP; 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;}Criando o seu switch:Crie seu switch com a função a 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  case 2: O que deve ser executado caso seja igual a 2  case 3: O que deve ser executado caso seja igual a 3  default: O que deve ser executado caso não seja igual aos exemplos acima //Não obrigatório}Você pode também modificar a sequencia de case's para que ele possa procurar resultados diferentes pra executar a mesma ação.case 1, 2, 3: //O que deve ser executado caso seja igual a 1, 2 ou 3Veja um exemplo do mesmo código abaixo usado com ifif(Função == 1 || Função == 2 || Função == 3){  //O que deve ser executado caso a função seja igual a 1, 2 ou 3  return 1;}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 10Em if ficaria assimif(Função &gt;= 1 &amp;&amp; Função &lt;= 3){  //O que deve ser executado caso a Função se enquadre entre ou igual 1 ou 4  return 1;}Abaixo um exemplo bem distinto dos cases:if (strcmp(cmdtext, "/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:}