[Tutorial] Estruturas Condicionais
#1

Estruturas Condicionais
Introduзгo

- Condicionais
  • O que sгo?
  • Sгo ъteis?
  • Quando usб-las
- if
  • Ao pй da letra
  • Como usar
  • Exemplos
- else
  • Ao pй da letra
  • Como usar
  • Exemplos

- else if
  • Ao pй da letra
  • Como usar
  • Exemplos
- Operadores Ternбrios
  • O que sгo?
  • Como Usar
  • Exemplos
Condicionais

- O que sгo?

Condicionais sгo, como o nome diz, condiзхes para que determinados comandos ou funзхes funcionem ou nгo. Assim como muitas vezes na vida real precisamos que determinadas coisas aconteзam para que outras

possam acontecer, o mesmo acontecem em Pawn. Dentro de uma condiзгo temos a condiзгo em si, o retorno dela (opcional), e o que acontece se ela for cumprida ou nгo.

- Sгo ъteis?

Mais que ъteis, assim como as variбveis, sгo essenciais para qualquer um que queria aprender a programar. Sem as condiзхes fica impossнvel ou muito difнcil criar alguma coisa que tenha uma restriзгo, como comandos

reservados apenas para admins, ou para determinada classe do Game Mode, ou simplesmente uma quantia em dinheiro que deve ser atingida para comprar alguma coisa.

- Quando usб-las?

Sempre que quiser restringir ou verificar.

If

- Ao pй da letra

"If" significa, em inglкs, "se", entгo seu uso fica уbvio. if (Condiзгo) seria Se (Condiзгo). Assim como todas as palavras-chave em Pawn (palavras-chaves sгo palavras que tem um sentido, digamos, especial para o compilador, como New, If, Else, For, While, entre outras), sempre que colocarmos ela em nosso script, ela ficarб azul e indicarб alguma coisa. No caso, if (Condition), essa condiзгo seria nossa restriзгo ou verificaзгo. Esses parкnteses devem ser usados com funзхes e/ou variбveis acompanhadas de um operador** ( < > == != ).

**PS: nгo lembrava o nome correto desses negуcio, entгo vai operador mesmo

- Como usar

A sintaxe das condicionais sгo simples e intuitivas, como eu disse, as palavras tem uma traduзгo que deixa claro o papel delas. O if й a pincipal parte da estrutura condicional, pois ele que faz a verificaзгo. Seu uso deve ser feito de uma maneira lуgica e que atenda o objetivo.

Os operadores sгo bem simples:
  • > Maior que
  • < Menor que
  • == Igual a
  • != Diferente de
  • ! Falso ou 0
  • >= Maior ou igual a
  • <= Menor ou igual a
  • Se nгo colocarmos nada, significa == 1
Tambйm sгo simples e intuitivos, e devem seguir a seguinte ordem:

pawn Код:
if ( Condicao < 1 ) //Se Condicao for menor que 1
{
    //Faзa o que estб sendo pedido aqui dentro :)
}
De uma maneira mais teуrica, toda a estrutura do if ficaria assim:

pawn Код:
if ( Funcao/Variavel (Operador) Numero/Funзгo/Variavel )
Com exceзгo do !, que ficaria:

pawn Код:
if ( !Funcao/Variavel )
- Exemplos

Essa sessгo estб presente em todas as partes do tutorial, ela dб exemplos do uso de cada condicional explicada.

pawn Код:
//Nesse primeiro exemplo, iremos restringir um comando pra quem for admin
if ( !strcmp ( cmdtext , "/ComandoAdmin" , true ) ) //Perceba que estou utilizando ! aqui
{
    if (IsPlayerAdmin(playerid)) //Sem colocar nada, assume == 1
    {
        SendClientMessage ( playerid , 0x00FF00FF , "Parabйns, vocк й Admin :)" ); //Vou ter que explicar o que й SendClientMessage? .-.
    }

    return 1; //Retorno do nosso if (strcmp...)
}

//Aqui, iremos verificar a quantidade de dinheiro do player
if ( strcmp ( cmdtext , "/VerificarGrana" , true ) == 0 ) //Colocar == 0 ou ! й a mesma coisa :)
{

    if ( GetPlayerMoney ( playerid ) >= 2000 )
    {
        SendClientMessage ( playerid , 0x00FF00FF , "Vocк tem mais ou exatamente US$2000" );
    }

    return 1; //Retorno do nosso if (strcmp...)
}
Else

- Ao pй da letra

Else tem vбrios significados, mas o usado na programaзгo й Caso Contrбrio ou Entгo. Ele nгo funciona sem o If, mas o If funciona perfeitamente sem o Else. O Else, como o prуprio nome diz, й chamado quando a condiзгo if nгo й cumprida, entгo ele й o "oposto" do if. Usaremos essa estrutura nos comandos criamos acima.

- Como Usar

Imediatamente apуs o tйrmino do if. Caso seu if tenha apenas uma linha e nгo possua as chaves {}, seu else pode ter chaves, assim como se seu if tiver vбrias lnhas dentro das chaves, o else poderia ter apenas uma.
Por exemplo:

pawn Код:
if (Condicao)
        SendClientMessage ( playerid , 0xFF0000FF , "Condiзгo cumprida!" );
else
    SendClientMessage ( playerid , 0xFF0000FF , "Condiзгo nгo cumprida!" );
Essa estrutura precisa estar igualmente identada ao seu if correspondente, para, por exemplo, nгo receber a mensagem "Nгo й admin" quando se deveria receber "Uso do comando incorreto". Veremos mais disso nos exemplos

[I]- Exemplos[I]

Vamos continuar com os comandos criados na sessгo IF.

pawn Код:
if ( !strcmp ( cmdtext , "/ComandoAdmin" , true ) ) //Perceba que estou utilizando ! aqui
{
    if (IsPlayerAdmin(playerid)) //Sem colocar nada, assume == 1
    {
        SendClientMessage ( playerid , 0x00FF00FF , "Parabйns, vocк й Admin :)" ); //Vou ter que explicar o que й SendClientMessage? .-.
    }
    else
        SendClientMessage ( playerid , 0xFF0000FF , " Vocк nгo й admin!" );

    return 1; //Retorno do nosso if (strcmp...)
}

//Aqui, iremos verificar a quantidade de dinheiro do player
if ( strcmp ( cmdtext , "/VerificarGrana" , true ) == 0 ) //Colocar == 0 ou ! й a mesma coisa :)
{

    if ( GetPlayerMoney ( playerid ) >= 2000 )
    {
        SendClientMessage ( playerid , 0x00FF00FF , "Vocк tem mais ou exatamente US$2000" );
    }
    else
        SendClientMessage ( playerid , 0xFF0000FF , "Vocк tem menos que 2000" ); //Sacaram a lуgica disso ? Se ele nгo tem mais que 200, obviamente tem menos :)

    return 1; //Retorno do nosso if (strcmp...)
}
Else If

- Ao pй da letra

Else If й a junзгo das estruturas estudadas anteriormente, seria algo como "Caso contrбrio e Se", e й usado com esse mesmo sentido. Й comum o seu uso quando queremos usar vбrios Else, muito ъtil em comandos com parвmetros ^^

- Como usar

Como foi citado, ele й a junзгo das estruturas vistas acima, entгo precisa seguir as regras de todas elas. A explicaзгo teуrica disso ficaria assim:

pawn Код:
if ( Condicao )
{
}
else if (Condicao2)
{
}
else if (Condicao3)
{
}
else //Um ъltimo else й chamado quando todas as opзхes nгo sгo cumpridas
{
}
Caso alguйm ainda nгo tenha percebido a utilidade disso nos comandos com parвmetros, isso ficarб mais evidente nos exemplos.

- Exemplos

pawn Код:
//Vou usar ZCMD, pq strtok fica muito sujo o cуdigo
COMMAND:Comando( playerid , params[] )
{
    new Tipo[6];

    if ( sscanf ( params , "s" , Tipo ) )
    {
        return SendClientMessage ( playerid , 0xFF0000FF , "Uso /comando [ Tipo ]" ); //Usamos um return, entгo nгo precisamos de um else :)
    }

    if ( !strcmp ( Tipo , "Tipo1" , true ) )
        SendClientMessage ( playerid , 0xFF0000FF , "Tipo1 selecionado" );
    else if ( strcmp ( Tipo , "Tipo2" , true )  == 0 )
        SendClientMessage ( playerid , 0xFF0000FF , "Tipo2 selecionado" );
    else if ( !strcmp ( Tipo , "Tipo3" , true ) )
        SendClientMessage ( playerid , 0xFF0000FF , "Tipo3 selecionado" );
    else
    {
        SendClientMessage ( playerid , 0xFF0000FF , "Tipo invбlido" );
    }
   
    return 1;
}
Operadores Ternбrios

- O que sгo?

Operadores ternбrios tambйm verificam, mas nгo fazem restriзхes como o if. A vantagem de usar esses operadores sгo que em apenas uma linha vocк faz uma pergunta e um "else". Podem ser usadas para melhorar e otimizar o cуdigo que normalmente ficaria com if e else, mas como eles precisam de chaves (ou nгo) jamais ficariam dentro de uma funзгo, por exemplo.

- Como usar

Diferentes dos outros itens estudados acima, o operador ternбrio nгo й chamado por uma palavra-chave, mas sim pelo sнmbolo ?. A forma de usar ele tambйm muda, tendo em vista que ele pode ser feito em uma sу linha.

pawn Код:
new a = 4, b = 5;

(a > b) ? (print(!"A Maior que B")); : (print(!"A Menor que B"));
O Operador ternбrio sempre vem acompanhado de parкnteses na pergunta, sendo que em alguns casos nгo й necessбrio na resposta. Outra parte importante desse operador й o :, que seria o nosso else e tem essa mesma fuзгo: Caso Contrбrio.

- Exemplos

Como eu disse acima, esse operador pode ser feito em apenas uma linha e dentro de uma funзгo. Vou exemplificar em um sistema que quase todo servidor tem, mas poucos sabem como funciona. Sabe aquele relуgio lб em cima? Ele pode ser feito de duas formas quando os minutos/horas/segundos sгo menos que 10:

pawn Код:
//Nгo vou criar todo o cуdigo, apenas uma parte dele :)
//Eu sei que vai dar erro, й apenas um exemplo :)

public Relogio() //Forma sem otimizaзгo e lerda
{
    if ( Hora < 10 )
        format (Relogio, sizeof(Relogio), "0%d", Hora);
    else
        format ( Relogio , sizeof ( Relogio ) , "%d" , Hora);
    if ( Minuto < 10 )
        format (Relogio, sizeof(Relogio), "0%d", Minuto);
    else
        format ( Relogio , sizeof ( Relogio ) , "%d" , Minuto);
     if ( Segundo < 10 )
        format (Relogio, sizeof(Relogio), "0%d", Segundo);
    else
        format ( Relogio , sizeof ( Relogio ) , "%d" , Segundo);
}

public Relogio()
{
    format ( Relogio2 , sizeof ( Relogio2 ) , "%s%d/%s%d/%s%d" , (Hora < 10) ? ("0") : ("") , Hora , (Minuto < 10 ) ? ("0") : ("") , Minuto , (Segundo < 10 ) ? ("0") : ("") , Segundo );
}
Como deu para perceber, o que o if-else faz em 12 linhas, nosso operador ternбrio faz em apenas uma. Caso alguйm nгo tenha entendido a lуgica do format acima, basta reler parte por parte dele que ira entender Se mesmo assim a dъvida persistir, pergunte-me no tуpico

---------------------------------------------------------------------------------------------------------

Bem, acho que й isso. Qualquer erro/sugestгo deixem nos comentбrios

Crйditos do Tutorial: Juniior3
Reply
#2

Belo Tutorial, ^.^
Gayzin -q
Reply
#3

Bom tutorial, parabens
Reply
#4

Vlw PT e ThuuGLif3 ^^
Reply
#5

Dei valor pra organizaзгo do tуpico, nгo vi o conteъdo ainda, mas sу uma dica em relaзгo ao contraste e as cores brancas utilizada, й estranho de ler as letras que tu colocou com cor azul piscina clara + 2, tente escurecer um pouco isso, porque tб dando contraste com o fundo do fуrum x.x

Parabйns pelo esforзo, sei que vocк nгo iria postar algo sem qualidade, entгo + rep.
Reply
#6

Quote:
Originally Posted by Willian_Luigi
Посмотреть сообщение
Dei valor pra organizaзгo do tуpico, nгo vi o conteъdo ainda, mas sу uma dica em relaзгo ao contraste e as cores brancas utilizada, й estranho de ler as letras que tu colocou com cor azul piscina clara + 2, tente escurecer um pouco isso, porque tб dando contraste com o fundo do fуrum x.x

Parabйns pelo esforзo, sei que vocк nгo iria postar algo sem qualidade, entгo + rep.
Vlw ^^

Quanto as cores, estou editando. Й que eu fiz boa parte pelo Bloco de Notas, porque o espaзo que a gente tem pra escrever no Box й pequeno.
Reply
#7

Quote:
Originally Posted by Juniiro3
Посмотреть сообщение
Vlw ^^

Quanto as cores, estou editando. Й que eu fiz boa parte pelo Bloco de Notas, porque o espaзo que a gente tem pra escrever no Box й pequeno.
Essa box й manipulбvel, tu pode aumentar o tamanho dela, cara. KKKK

Eu arregaзo ela quando vou postar algo, fica do tamanho da tela quase. x.x

Nгo deu pra dar rep porque jб te dei, mas quando poder eu dou +rep, abraзos.
Reply
#8

Quote:
Originally Posted by Willian_Luigi
Посмотреть сообщение
Essa box й manipulбvel, tu pode aumentar o tamanho dela, cara. KKKK

Eu arregaзo ela quando vou postar algo, fica do tamanho da tela quase. x.x

Nгo deu pra dar rep porque jб te dei, mas quando poder eu dou +rep, abraзos.
Vlw novamente pela dica do Box, deixei enorme sу pra escrever essa resposta kkkkkk

Abraзos e obrigado novamente.
Reply
#9

Gostei bastante da organizaзгo do tуpico, li algumas partes e sгo realmente claras e diretas, parabйns!

rep+=2;

pawn Код:
if (Condicao)
else
    SendClientMessage ( playerid , 0xFF0000FF , "Condiзгo nгo cumprida!" );
Isso nгo estб certo!
Reply
#10

Quote:
Originally Posted by Kuddy
Посмотреть сообщение
Gostei bastante da organizaзгo do tуpico, li algumas partes e sгo realmente claras e diretas, parabйns!

rep+=2;

pawn Код:
if (Condicao)
else
    SendClientMessage ( playerid , 0xFF0000FF , "Condiзгo nгo cumprida!" );
Isso nгo estб certo!
Foi apenas um exemplo, para mostrar que tanto o if quanto o else podem ter apenas uma linha de comandos, mas se prefere vou colocar uma mensagem de "Condiзгo cumprida" no if...

Obrigado
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)