SA-MP Forums Archive
[Tutorial] Criando switch - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+----- Forum: Lançamentos/Releases (https://sampforum.blast.hk/forumdisplay.php?fid=56)
+----- Thread: [Tutorial] Criando switch (/showthread.php?tid=240470)



Criando switch - Josma_cmd - 15.03.2011

Bom, nгo achei tutorial sobre switch no search entгo resolvi criar um.

O que й o switch?
Switch й como um substituto ao if e else if, nгo й tгo eficaz mas й muito parecido e em alguns casos atй melhor por ser mais organizado.

Qual a diferenзa entre o else if e o switch?
Vamos tomar por exemplo o comando /admins, em vez de vocк criar um if seguido de vбrios else if pra cada nнvel de admin a aparecer no /admins voce sу irб precisar criar um switch(funзгo) seguido de cases, o case servirб como o else if mas de uma maneira mais compacta pois sу armazenarб o numero(enum) a ser verificado, abaixo o exemplo do /admins por if e o /admins por switch.

pawn Код:
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

pawn Код:
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;
    }
Criando o seu switch:
Crie seu switch com a funзгo a ser verificada que quiser, mas siga este formato abaixo:
pawn Код:
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 forma do case, pra procurar por mais de um resultado como no exemplo abaixo:
pawn Код:
case 1, 2, 3: { O que deve ser executado caso seja igual a 1, 2 ou 3 }
em um if vocк teria que usar algo maior como este abaixo
pawn Код:
if (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 a outro, como no exemplo abaixo.
pawn Код:
case 1 .. 10: { O que deve ser executado caso o resultado se enquadre entre 1 e 10 }
Em if ficaria assim
pawn Код:
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 1; }
Abaixo um exemplo bem distinto dos cases:

pawn Код:
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:
}
Crйditos: Chainksain que me ensinou usar Switch.
Crнticas: Manda brasa.
Sugestхes: Sу falar.
Bom, procurei mas nгo achei, se jб tiver outro tutorial de switch moderador sinta-se avontade pra apagar.
Vi que muita gente nгo sabia o que era switch, espero que gostem.


Re: Criando switch - StreetGT - 15.03.2011

muito bom o tutorial
estas de parabens


Re: Criando switch - Macintosh - 15.03.2011

Boom
10/10
Irб ajudar muitos que quiserem definir nъmeros ao invйs de grandes frases


Re: Criando switch - JonathanFeitosa - 15.03.2011

Bom Tutorial Axo Melhor Usar switch mesmo bem melhor


Re: Criando switch - LuxurioN™ - 15.03.2011

Tratando-se de "switch" realmente nгo hб muito o que explicar, й assim como todas as outras "estruturas comparativas" simples e objetiva.

Entretanto, nгo й viбvel utilizar-lo em todos os casos. Segue-se abaixo algumas desvantagens:
Porйm, o mesmo se aplica perfeitamente em certos casos, afinal, caso se aplicasse em todos nгo existiriam os outros comparadores!

Quote:
Originally Posted by Jonathan_Feitosa
Посмотреть сообщение
Bom Tutorial Axo Melhor Usar switch mesmo bem melhor
Nгo й melhor, й mais simples. Й melhor em certos casos, assim como os outros.


Re: Criando switch - JonathanFeitosa - 15.03.2011

Eu sei bem melhor em certos casos sim.

Mais й bem melhor й facil de fazer й aprender


Re: Criando switch - JOKERBOY - 16.03.2011

legal!!


Re: Criando switch - Kruger - 16.03.2011

9/10

Paraabens !


Re: Criando switch - [BGL]jonas_OwNer - 16.03.2011

switch й bom para certas coisas como por exemplo, textdraws random,checkpoint,gps ou outras coisas em dialog.

bom tutorial.


Re: Criando switch - Kalega - 16.03.2011

Otimo Tutorial By: Monster_FusioN


Re: Criando switch - Chainksain - 17.03.2011

bom, vejo que hб algumas informaзхes cruzadas aqui, o tutorial do josma estб bom mas faltou algumas especificaзхes, o Luxurion tentou complementar com estas especificaзхes porйm acho que faltou explicar melhor, entгo vou esclarecer aqui exatamente o que a estrutura de decisгo switch faz:

O comando switch permite selecionar uma entre vбrias aзхes alternativas. Embora construзхes if-else possam executar testes para escolha de uma entre vбrias alternativas, muitas vezes sгo deselegantes. O comando switch tem um formato limpo e claro.
A instruзгo switch consiste na palavra-chave switch seguida do nome de uma variбvel ou de um nъmero constante entre parкnteses. O corpo do comando switch й composto de vбrios casos rotulados por uma constante e opcionalmente um caso default. A expressгo entre parкnteses apуs a palavra-chave switch determina para qual caso serб desviado o controle do programa.
O corpo de cada caso й composto por qualquer nъmero de instruзхes. Geralmente, a ъltima instruзгo й break. O comando break causa a saнda imediata de todo o corpo do switch. Na falta do comando break, todas as instruзхes apуs o caso escolhido serгo executadas, mesmo as que pertencem aos casos seguintes.
Vocк nгo poderб usar uma variбvel nem uma expressгo lуgica como rуtulo de um caso. Pode haver nenhuma, uma ou mais instruзхes seguindo cada caso. Estas instruзхes nгo necessitam estar entre chaves.
O corpo de um switch deve estar entre chaves.
Se o rуtulo de um caso for igual ao valor da expressгo do switch, a execuзгo comeзa nele. Se nenhum caso for satisfeito e existir um caso default, a execuзгo comeзarб nele. Um caso default й opcional.
Nгo pode haver casos com rуtulos iguais.


Re: Criando switch - Josma_cmd - 17.03.2011

Exatamente, pelo que vejo esqueci de alguns pontos no tutorial, mas dб pro gasto jб que muita gente nгo sabia nem que switch existia(mesmo utilizando ele em muitos casos em seus GM's), valeu por complementar Chainksain.