14. Indentação (espaço tabelado) - Fórum MixMods
14. Indentação (espaço tabelado)
01 Jun 2018, 16:17
Tópico antigo: http://brmodstudio.forumeiros.com/t6020 ... o-tabelado
Uma coisinha que você já foi introduzido naturalmente, e agora aprenderá mais a fundo.
Logo na parte 7 (Condições) eu já expliquei brevemente o que são os espaços tabelados. Se você esqueceu, cuidado!!! Se esqueceu disso, pode ter esquecido de mais coisas já ensinadas aqui, e isso vira uma bola de neve dificultando o aprendizado, cuidado.
Esta parte é muitíssimo ligada com a parte 7 (Condições) deste tutorial, pois você praticamente só usará o TAB em condições.
Poder responder o que é e como usar indentação, assim como seu ponto forte e no que isso ajuda durante o desenvolvimento de um script.
Por que usar indentação?
Uma comparação vale mais que mil palavras:
GET_CHAR_COORDINATES scplayer (x y z)
IF GET_RANDOM_CHAR_IN_SPHERE_NO_SAVE_RECURSIVE (x y z) 100.0 FALSE TRUE (char)
GOSUB check_and_active
WHILE GET_RANDOM_CHAR_IN_SPHERE_NO_SAVE_RECURSIVE (x y z) 100.0 TRUE TRUE (char)
Sério, olha para o código de baixo, é horrível de se ler! Não dá para entender onde que abre e fecha o IF etc.
É por isso que o bom uso de indentação é tão importante e você precisa se importar tanto em usá-la corretamente.
Em exemplos pequenos pode até não parecer tão importante, mas um código grande e complexo, fica incompreensível caso não usar:
Este é um pedaço do código fonte do MDPMv5 que controla os comandos de troca de música. Olhando na segunda imagem, você consegue decifrar o que cada IF faz e deixa de fazer?
Perceba que o Visual Studio Code adiciona linhas verticais para deixar os espaços tabelados mais notáveis, assim identificando onde cada um começa e termina (cada linha vertical de um IF terminará em um ENDIF).
Veja este belo exemplo:
EnglishAbrir
This would be impossible to translate, especially because I used a brazilian joke...
Orange: The script will walk around here if WHILE IN kitchen
—Green: If you opened the refrigerator (OPENED_THE fridge), will enter this path.
——Cyan: IF HAS coke will enter this path.
——Blue: If not (ELSE), will enter here.
———Purple: IF HAS beer, will enter here.
————Pink: If YOUR_AGE is greater or equal to MATURE_AGE, here.
————Yellow: If not, here.
————(End of YOUR_AGE)
———(End of HAS beer)
——(End of HAS coke)
—(End of OPENED_THE fridge)
(End of WHILE IN kitchen)
Laranja: O script andará por aqui caso no WHILE NA cozinha
—Verde: Caso abriu a geladeira (ABRIU_A geladeira), entrará neste caminho.
——Ciano: Se TEM coca entrará aqui.
——Azul: Se não (ELSE), entrará aqui.
———Roxo: Se TEM Dolly, entrará aqui.
————Rosa: Se você gosta de Dolly, aqui.
————Amarelo: Se não gosta, aqui.
————(Fim do VOCE_GOSTA_DE dolly)
———(Fim do TEM dolly)
——(Fim do TEM coca)
—(Fim do ABRIU_A geladeira)
(Fim do WHILE NA cozinha)
Perceba que tudo praticamente se resume em deixar a abertura e fechadura das coisas uma em cima da outra.
Ou seja, o IF, ELSE e ENDIF da mesma condição estão todos um em cima do outro, enquanto "o que irá fazer" está com um espaço na frente. Isso facilita na identificação de "o que faz caso IF? E caso ELSE? Onde termina esta condição?".
E você lembra de que, após o jogo ter feito o necessário dentro de um IF o código continua abaixo de seu ENDIF? Então! É importante você saber exatamente onde (e "qual") é o ENDIF daquele IF, e aplicando uma boa indentação, nós facilmente encontramos: O ENDIF está logo abaixo do IF.
Por exemplo, se eu quero adicionar um IF ABRIU_O_MICROONDAS após o IF ABRIU_A geladeira (english: IF OPENED_THE_MICROWAVE after IF OPENED_THE fridge), onde eu colocaria?
Se você respondeu "abaixo do penúltimo ENDIF", correto!
Indentação é obrigatória, mesmo que seja só cosmética, e há regras e não regras.
Por exemplo você pode escrever o código assim:
Há também uma outra utilidade para o uso do espaço tabelado: Esconder partes do script!
Você já deve ter percebido que ao passar o mouse na parte esquerda da tela aparece uns - para fechar e + para abrir partes do código. Os locais destes -/+ são definidos pela indentação (onde abre e fecha alguma indentação).
Eu gosto de aproveitar deste recurso para separar meus códigos em seções, onde posso abrir e fechar elas quando eu quiser, assim não ter um código gigante de 6 mil linhas aberto ao mesmo tempo (na qual fica ruim de andar por ele).
Assim eu uso um comentário com algum nome para aquela seção, e termino a seção com 50 ou 100 /, parecido (mas diferente) com o que a Rockstar fez no source do GTA 3.
Regras de indentação no GTA3script
Abra um espaço tabelado sempre que você abrir uma condição, isto é, sempre após digitar um...:
IF (AND/OR)
Feche um espaço tabelado sempre quando você digitar um....:
Ou seja, qualquer END.
Lembre-se: O END sempre estará embaixo de algum comando de condição.
Também, todos os comandos de condição terão um END (exceto CASE e DEFAULT, você verá na próxima parte)
É tudo simples e você já viu isso várias vezes por este tutorial:
WHILE // abri um WHILE
WAIT 0 // abri um espaço tabelado (aqui é o que faz enquanto estiver no WHILE)
ENDWHILE // fechei o WHILE, portanto fechei o espaço
E se tiver dúvidas, tente dar uma olhada novamente nos códigos de exemplos por este tutorial. Principalmente na parte sobre condições. Na próxima parte você verá mais espaços tabelados também.
15. Mais sobre condições
Editado pela última vez por Junior_Djjr em 05 Abr 2020, 19:58, em um total de 3 vezes.
1527880631
01 Jun 2018, 16:24
Esta parte estava muito ruim, era uma das piores do tutorial. Acho que melhorou agora.
1527881067
Junior_Djjr escreveu: ↑ Esta parte estava muito ruim, era uma das piores do tutorial. Acho que melhorou agora.