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
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
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
- Código:
unless
- Código:
if !algo
- Código:
if not algo
- Código:
unless algo
Daqui para frente começam os erros mais cometidos pelos scripters.
- Código:
if !algo and !algo2
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
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
- 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
- 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}
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)