Portal SAMP
[Tutorial] Organizando e Otimizando - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Guias e Tutoriais (https://portalsamp.com/forumdisplay.php?fid=7)
+--- Tópico: [Tutorial] Organizando e Otimizando (/showthread.php?tid=2486)



Organizando e Otimizando - Dr Editor - 17/06/2022

Organização e Otimização
  • Sobre
O intuito deste guia é referente a organização e otimizações que podem ser realizadas em qualquer script
e a maioria dos passos podem ser aplicados em outras linguagens.
Organizando
  • Indentação
Em primeiro lugar um script bem organizado começa com sua tabulação correta!
Indentar o código de forma adequada facilita a leitura e manutenção do código.
Indentador: https://tabuladorpawn.000webhostapp.com/index.html
  • Comentários
Comentar linhas e/ou funções é parte básica do processo de organização.
Lembre-se que você é um ser humano e não uma máquina, portanto, mesmo que você seja o responsável
pelo código, ainda assim será possível se perder em meio a ele.
Considerando isso, sempre que tiver dificuldades na criação de determinado código comente sobre
ele ou em determinadas linhas para que em caso de uma manutenção futura você consiga realizar
esta tarefa rapidamente e sem dificuldades.
  • Nomenclaturas
Nem todos gostam de nomenclaturas muito grandes, porém em alguns casos isso pode ser necessário
e isso está longe de ser um problema, pelo contrário, isso torna o entendimento mais fácil da
finalidade pela qual a variável foi criada, portanto, não economize caracteres.
Já falei que não somos máquinas? Pois é. Ela interpreta qualquer código antes de você começar a lê-lo,
logo uma nomenclatura boba pode não fazer o código perder o sentido, mas pode sim atrapalhar a
sua compreensão.
  • Código morto
É muito comum mantermos certas funções cuja intenção é utilizá-la posteriormente. Acontece que ao
iniciar esta prática acabamos adicionando várias funções com o mesmo propósito e no fim, mesmo
percebendo que se trata de uma função sem utilidade, ainda assim a deixamos permanecer.
É sempre interessante fazer uma reanálise no script para limpar este código cuja função ou resultado nunca
é utilizado.
  • Módulos
Afinal, não adotar este método é um problema?
É uma discussão válida e a resposta é muito relativa.
Alguns enfrentam dificuldades, outros não gostam ou não veem necessidade disso já que não estão
trabalhando com um número considerável de linhas.
Mas quando falamos em 'programar' devemos estar cientes de que precisaremos lidar com um número de linhas
ilimitado, ou seja, devemos estar preparados para inúmeros desafios e o principal, em se tratando de
pawn, é: como organizar tudo isso em um único arquivo.
Fora desta linguagem, podemos trabalhar com outras onde é possível separar facilmente o código com
base em sua função. A lógica se aplica aqui de forma semelhante.
  • Estruturas de condição If e Switch
Sim, por incrível que pareça isso também faz diferença no código.
Em muitos sistemas antigos a estrutura de condição IF era muito e ao mesmo tempo mal usada.
Alguns casos em específico é possível alternar entre estas estruturas e isso acaba ajudando bastante no
entendimento de um código.
Certas situações acabam até afetando o desempenho do código e isso será abordado na parte de
otimizações.

Otimizando
  • Células
Para facilitar o trabalho é costume colocar um número superior de células em variáveis. O problema
é quando este valor é exagerado de forma desnecessária.
Quanto mais células uma variável/array tiver, mais memória ela vai consumir e, por consequência,
seu arquivo .amx ficará mais pesado assim como a compilação ficará mais demorada.
Busque utilizar um número de células superior, porém próximo do necessário.
  • Redefinição de definições nativas
MAX_PLAYERS, VEHICLES, PICKUPS, ACTORS...
Um servidor, de início, dificilmente utiliza a capacidade máxima de cada um dos recursos acima citado
(entre outros, até mesmo não nativos).
Sempre redefina as definições mais utilizadas e principalmente as que possuem valores maiores para
valores próximos ao que o servidor irá utilizar. Isto porque utilizamos estes valores principalmente
para loopings e isso retarda o encerramento de uma função que utiliza este recurso.
  • Loopings
Uma breve continuação do item anterior, é sempre útil facilitar o processo de looping.
Portanto, se possível, utilize a livraria FOREACH.
Uma livraria utilizada principalmente para jogadores, porém se bem explorada pode agregar muito mais.
Caso esteja usando a versão 0.3.7 do SA:MP e não tenha costume de usar a livraria foreach, pode usar
como apoio as funções GetPlayerPoolSize, GetVehiclePoolSize e GetActorPoolSize onde ambas retornam o
maior ID relacionado a ela. Nos demais casos, é importante ressaltar a relevância do item anterior.
  • Condições
As condições, quando bem utilizadas, podem encerrar uma instrução a qualquer momento evitando uma
carga contínua desnecessária.
Como este é um tema bem específico, vou abordar uma das callbacks mais utilizadas e com ela exemplificar
o ponto que quero chegar.
É muito comum, por exemplo, a callback OnDialogResponse possuir um número exorbitante de condicionais
já que por ela passa todas as caixas de diálogo do servidor.
A proposta, neste caso, é identificar somente a caixa de diálogo relacionada a determinado ID.
Alguns sistemas não utilizam a condição IF nesta callback da forma correta, pois esquecem a existencia de
ELSE IF e ao invés de encerrar a instrução quando necessário (ou seja, quando identifica o ID da caixa
de diálogo), deixam o servidor executar todas as demais verificações (que não são poucas).


Observações finais
Espero ter sido claro quanto às informações que eu passei e, caso eu tenha errado em algum ponto
ou queiram agregar alguma informação, por gentileza me informe.
Provavelmente eu me esqueci de algumas coisas. Na verdade com certeza eu esqueci, mas se eu lembrar
eu atualizo o tópico.
Todos os pontos abordados são FATOS de meu conhecimento, por isso o tópico não é tão extenso.
Com base em muito código estudado cheguei a essas conclusões e espero que isso possa iluminar
principalmente quem está começando para que adote desde cedo a maioria dessas técnicas e consiga
evoluir enquanto programador mesmo que somente por hobby.


RE: Organizando e Otimizando - xbruno1000x - 17/06/2022

Ótimo tópico +Rep.

Só para agregar:
Link de um indentador Pawn -> https://tabuladorpawn.000webhostapp.com/index.html


RE: Organizando e Otimizando - Dr Editor - 17/06/2022

(17/06/2022 11:15)xbruno1000x Escreveu: Ótimo tópico +Rep.

Só para agregar:
Link de um indentador Pawn -> https://tabuladorpawn.000webhostapp.com/index.html

Obrigado, @xbruno1000x. Estarei o adicionando também no respectivo item.


RE: Organizando e Otimizando - CoelhaO_LokaO - 17/06/2022

Gostei da sua organização