Suporte no desenvolvimento de jogos


    Otimização dos códigos

    Valentine
    Valentine
    Administrador
    Administrador

    Medalhas : Otimização dos códigos 94JxvOtimização dos códigos ZgLkiRU
    Mensagens : 5025
    Créditos : 1115
    Cash : 0

    Otimização dos códigos Empty Otimização dos códigos

    Mensagem por Valentine em Sab Mar 25, 2017 8:01 am

    Introdução
    A aula é direcionada a quem já é scripter e tem uma certa experiência, por isso busca melhorar os códigos e buscar melhorar a velocidade de seus scripts.

    Tem 2 maneiras principais de melhorarem a velocidade dos seus codes, a primeira e mais óbvia é buscar o menor caminho usando a menor quantidade de comandos, quanto menos comandos obviamente o código tende a ser mais rápido e agora o segundo que irei tratar nessa aula, a melhor maneira de usar esses mesmos comandos. Todos os comandos eu testei pelo com benchmark, não é 100% eficiente, porém dá uma ideia muito boa da velocidade de cada bloco de códigos e aqui abaixo falarei o resultado de tudo que eu testei Very Happy.

    Contas básicas
    Esse por ser muito usado pela grande maioria dos scripts, então presente em quase todos os scripts é algo que muitos sabem. As contas envolvendo a própria variável são mais rápidas se usados o modo simplificado, porém minimamente mais rápido se não iguais, por isso o ideal é manterem o modo simplificado, exemplo.

    Código:
    a = a + 1

    O modo simplificado
    Código:
    a += 1
    Isso para as 4 operações + - / *

    Atribuição múltipla
    Agora esse é bem interessante, veja os 2 códigos a seguir.
    Código:
    a = b = c = 1
    Código:
    a = 1
    b = 1
    c = 1
    Todos tem o mesmo resultado, qual é mais rápido? Não não é o primeiro, é o segundo Very Happy, exatamente parece menos otimizado porém em todos os testes que eu fiz, troquei as ordens dos 2 e tudo mais, deram o mesmo resultado, a atribuição múltipla é menos eficiente do que 1 por 1, então qual usar?
    Nesse caso depende, deixar o a = b = c = 1, para algo que inicia apenas, acho mais elegante e organizado do que linha por linha, porém para atualizações prefere-se o código mais rápido, logo... O segundo.

    If ou unless?
    Ta ai algo que eu vejo inclusive os scripters mais experientes pisando na bola as vezes, isso inclui a mim Razz.
    Primeira regra,
    Código:
    if
    é em geral mais rápido que
    Código:
    unless
    Ta ai normal, quase todo mundo usa mais if que unless, e faz sentido já que o if tem uma reservada de menor tamanho que unless, agora aonde o pessoal pisa na bola.
    Código:
    if !algo
    ou
    Código:
    if not algo
    não use o not ou o !, eles invertem o resultado e depois verificam a condição, ou seja ele faz 2 processos para 1, ai use o unless
    Código:
    unless algo





    Aqui para frente começa aos mais cometidos pelos scripters.
    Código:
    if !algo and !algo2
    Esse daqui pega muita gente Razz, principalmente quem nunca teve lógica de programação e coisas semelhantes, vocês viram antes para evitarem o ! e o not, mas quando tem algo como and ou or no meio, como vamos mudar isso para tirar esses !?

    Dica, façam uma tabela verdade, falso sempre que na dúvida, que seria o seguinte.
    Código:
    p !true and !true # imprime falso
    p !true and !false #imprime falso
    p !false and !true #imprime falso
    p !false and !false #imprime verdadeiro
    Claro que esse é o modo na raça de se fazer, mas em breve eu mostor uns atalhos, perceba que a sequencia é F, F, F, V; Logo precisamos buscar uma combinação lógica que dê F, F, F, V.

    Pensaram? vou falar abaixo a resposta :).
    Código:
    p (not (true or true)) # imprime falso
    p (not (true or false)) #imprime falso
    p (not (false or true)) #imprime falso
    p (not (false or false)) #imprime verdadeiro
    Espera, mas o if not pode ser unless não? Logo ficaria como o código abaixo.
    Código:
    unless algo or algo2 # mesmo valor que if !algo and !algo2

    O atalho é o seguinte, fazendo várias tabelas verdade/falso, percebemos alguns padrões, e esse seria um deles.
    !algo e !algo2, pode ser trocado por !(algo ou algo2)




    Agora o que 99% dos scripters cometem, isso não é necessário fazer, não é nenhum erro, porém em uma atualização pode fazer diferença que é usar diferente de.
    Usem caso seja necessário fazer um bloco de condições com igualdades e diferenças exemplo.
    Código:
    if algo != 5 and algo == 4
    Ai sem problemas porém evitem.
    Código:
    if algo != 5

    Usem o unless
    Código:
    unless algo == 5

    Ou seja, priorizem a igualdade sempre que possível, a desigualdade faz algo semelhante ao !, ele procura ver o que não é, do que o que é, e isso deixa o programa levemente mais devagar.

    Utilização de simbologia
    Esse talvez foi o teste mais difícil que foi feito, a diferença era minima, porém com leituras e tudo mais, existe a recomendação da utilização de simbolos do que utilizar as reservadas, não usei simbolos acima pois não sabia se todos conheciam, mas o jeito mais fácil de lembrar é simplesmente.
    Código:
    && == and
    || == or
    ! == not
    condição ? true : false == if condição then true else false

    Utilização de blocos
    Esse daqui muita gente não usa, usar os blocos do que as reservadas.
    Os blocos são mais eficientes pela simples razão explicadas por um amigo meu que trabalha com Ruby há 7 anos, os blocos while, loop do, for; enfim, eles quando chamados, criam um bloco externamente e rodam por ele, ou seja eles pegam o que está dentro do for e criam um modo de inserir no bloco, exemplo
    Código:
    for i in 0...5
    $umaarray[i] = 4
    end

    Isso poderia ser executado por um bloco da seguinte maneira.
    Código:
    $umaarray.each {|ar| ar = 4}
    Claro que considerando que o for vai pegar todos os espaços pela array, que quase sempre é o caso, logo usar os blocos são mais eficientes quando for possível, então priorizem-nos u__u

    Conclusão
    Não sei se alguém realmente irá aprender algo, porém ai está, e essa é a magia do Ruby Very Happy, ele pode ser uma linguagem totalmente lógica usando as palavras, mas também tem a possibilidade de ser uma linguagem rápida, e muita gente está usando, e cada vez cresce mais Very Happy, bom boa sorte nas aulas espero que estejam sendo uteis.

    Créditos:
    Raizen

    Tópico original:
    http://centrorpg.com/index.php?topic=2373.0


    _________________
    Otimização dos códigos AIymW
    snaker15
    snaker15
    Semi-Experiente
    Semi-Experiente

    Mensagens : 127
    Créditos : 24
    Cash : 0

    Otimização dos códigos Empty Re: Otimização dos códigos

    Mensagem por snaker15 em Sab Mar 25, 2017 11:49 am

    Muito bom, eu particulamente nunca me preocupei em dar uma refinada na forma que programo, tem algumas coisas ai que já tinha visto em alguns codigos e nunca tinha me dado o luxo de pesquisar e acabei entendendo o que quer dizer agora isso já vai servir pra varias coisas a partir de agora !
    grato pela contribuição !

      Data/hora atual: Sex Dez 13, 2019 9:51 pm