[Tutorial] Criando switch
#1

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.
Reply
#2

muito bom o tutorial
estas de parabens
Reply
#3

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

Bom Tutorial Axo Melhor Usar switch mesmo bem melhor
Reply
#5

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:
  • Switch nгo permite o uso de operadores lуgicos. Portanto, nгo й possнvel fazer uma comparaзгo. Isso limita o case a apenas valores definidos.
  • O switch executa seu bloco em cascata. Ou seja, se a variбvel indicar para o primeiro case e dentro do switch (com 5 cases), o switch executarб todos os outros 4 cases a nгo ser que utilizemos o comando para sair do switch (Break por exemplo).
  • Switch nгo deve ser usado para funзхes pequenas, й perfeitamente aplicado nas grandes e, por definiзгo, simples. Entretanto, em funзхes pequenas, mais complexas, as outras estruturas comparativas se aplicam com certa vantagem.
  • Switch nгo permite o uso demasiado de funзхes, limitando o potencial e a objetividade do script.
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.
Reply
#6

Eu sei bem melhor em certos casos sim.

Mais й bem melhor й facil de fazer й aprender
Reply
#7

legal!!
Reply
#8

9/10

Paraabens !
Reply
#9

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

bom tutorial.
Reply
#10

Otimo Tutorial By: Monster_FusioN
Reply
#11

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.
Reply
#12

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.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)