Otimização dos códigos Hitskin_logo Hitskin.com

Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o temaVoltar para a ficha do tema

Aldeia RPG
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Otimização dos códigos

2 participantes

Ir para baixo

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

Mensagem por Valentine Sáb Mar 25, 2017 8:01 am

Introdução
Essa aula é direcionada a quem já tem uma certa experiência em programação, que busca melhorar os códigos e a velocidade de seus scripts.

Você tem 2 maneiras principais de melhorar a velocidade dos seus scripts. 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. Já o segundo ponto que irei tratar diz respeito à melhor maneira de usar esses mesmos comandos. Eu testei todos os comandos pelo benchmark, que, embora não seja 100% eficiente, dá uma ideia muito boa da velocidade de cada bloco de código. Logo abaixo, mostrarei o resultado de tudo que eu testei.

Contas básicas
Esse, por ser muito usado pela grande maioria dos programadores, está presente em quase todos os scripts e é algo que muitos sabem. As contas envolvendo a própria variável são mais rápidas se você usar o modo simplificado, porém minimamente mais rápido, se não iguais, por isso o ideal é manter 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
Esse é bem interessante. Veja os 2 códigos a seguir:
Código:
a = b = c = 1
Código:
a = 1
b = 1
c = 1
Se todos têm o mesmo resultado, qual é o mais rápido? Não, não é o primeiro, e sim o segundo! O segundo parece menos otimizado, porém, em todos os testes que eu fiz, mesmo trocado a ordem dos 2 e tudo mais, deu 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, pois acho mais elegante e organizado do que linha por linha, porém, para atualizações (def update), prefere-se o código mais rápido, logo... o segundo!

If ou unless?
Ta ai algo que eu vejo muita gente, inclusive os scripters mais experientes, pisando na bola às vezes.
Primeira regra:
Código:
if
é, em geral, mais rápido que:
Código:
unless
Isso é 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, vamos ver onde o pessoal pisa na bola:
Código:
if !algo
ou
Código:
if not algo
Não use o not ou o !, pois eles invertem o resultado e depois verificam a condição, ou seja, eles fazem 2 processos para 1. Nesse caso, use o unless
Código:
unless algo






Daqui para frente começam os erros mais cometidos pelos scripters.
Código:
if !algo and !algo2
Esse daqui pega muita gente, principalmente quem nunca estudou lógica de programação e coisas semelhantes. Vocês viram anteriormente que devemos evitar o ! e o not, mas e quando tiver algo como and ou or no meio, como vamos mudar isso para tirar esses !?

Dica: façam uma tabela verdade e falso sempre que tiver dúvidas:
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, irei mostrar uns atalhos. Perceba que a sequencia é F, F, F, V. Logo, precisaremos buscar uma combinação lógica que dê F, F, F, V.

Pensaram? Vou mostrar 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, o resultado seria 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, percebi alguns padrões, e esse seria um deles.
!algo e !algo2 podem ser trocados por !(algo ou algo2)




Vamos agora para o erro que 99% dos scripters cometem. Na verdade, não se trata de um erro, mas em uma atualização (def update) pode fazer muita diferença, que é usar diferente de (!=)

Use caso seja necessário fazer um bloco de condições com igualdades e diferenças. Exemplo:
Código:
if algo != 5 and algo == 4
Até ai, tudo bem. Porém, evitem:
Código:
if algo != 5

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

Ou seja, priorizem a igualdade sempre que possível. A desigualdade faz algo semelhante ao !, ela 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 eu fiz, pois a diferença foi mínima, porém existe a recomendação da utilização de símbolos em vez das palavras reservadas. Não usei símbolos anteriormente, pois não sabia se todos tinham conhecimento deles, mas o jeito mais fácil de lembrar é:
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 em vez das palavras reservadas.
Os blocos são mais eficientes pela simples razão explicada por um amigo que trabalha com Ruby há 7 anos, os blocos while, loop do, for; enfim, quando eles são 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 os blocos são mais eficientes quando for possível usá-los, então priorizem os benditos blocos!

Conclusão
Não sei se alguém realmente irá aprender algo, porém fiz esse tutorial mesmo assim, e essa é a magia do Ruby, 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 Ruby, e cada vez cresce mais. Bom, boa sorte a todos nas aulas e espero que elas estejam sendo úteis.

Créditos:
Raizen

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


Última edição por Valentine em Sex Dez 17, 2021 8:05 am, editado 1 vez(es)
Valentine
Valentine
Administrador
Administrador

Medalhas : Otimização dos códigos ZgLkiRU
Mensagens : 5345
Créditos : 1164

https://www.aldeiarpg.com/

Ir para o topo Ir para baixo

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

Mensagem por snaker15 Sáb 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 !
snaker15
snaker15
Semi-Experiente
Semi-Experiente

Mensagens : 128
Créditos : 24

Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos