Ir para conteúdo
Tio Gordo

Funções Math, reduzindo seus scripts! #3

Recommended Posts

Tio Gordo    8
Tio Gordo

Funções Math, reduzindo seus scripts! #3

Olá galerinha da OTBR! Hoje daremos continuidade à nossa aula de Funções Math e técnicas para reduzir os scripts.

 

Essa aula é a número 3 e a nossa última aula sobre esse conteúdo :triste:

 

Quem ainda não conferiu a primeira aula, aqui está o link:

http://forums.otserv.com.br/showthread.php?198472-Fun%E7%F5es-Math-Reduzindo-seus-Scripts!-1&p=1399851#post1399851

 

Quem ainda não conferiu a segunda aula, aqui está o link:

http://forums.otserv.com.br/showthread.php?198508-Fun%E7%F5es-Math-Reduzindo-seus-Scripts!-2

~ Introdução:

 

Na aula de hoje, vamos aprender a trabalhar com processamento de dados, uma maneira rápida e objetiva para reduzirmos scripts que necessitam de informações como posição ou tempo.

Preparados? Mão à massa!


~ Exemplo Inicial:

 

Vamos analisar o conceito de um script que envolva posição:

 


[color=#B1B100]function[/color] position[color=#66CC66]([/color]x, y, z, stackpos[color=#66CC66])[/color]
[color=#B1B100]if[/color] [color=#66CC66]([/color][color=#66CC66]([/color]x [color=#B1B100]and[/color] y [color=#B1B100]and[/color] z[color=#66CC66])[/color] [color=#B1B100]and[/color] [color=#B1B100]type[/color][color=#66CC66]([/color][color=#B1B100]tonumber[/color][color=#66CC66]([/color]x..y..z[color=#66CC66])[/color][color=#66CC66])[/color] [color=#66CC66]==[/color] [color=#FF0000]'number'[/color][color=#66CC66])[/color] [color=#B1B100]then[/color]
pos [color=#66CC66]=[/color] [color=#66CC66]{[/color]x[color=#66CC66]=[/color]x, y[color=#66CC66]=[/color]y, z[color=#66CC66]=[/color]z[color=#66CC66]}[/color]
[color=#B1B100]if[/color] [color=#66CC66]([/color]stackpos [color=#B1B100]and[/color] [color=#B1B100]type[/color][color=#66CC66]([/color]stackpos[color=#66CC66])[/color] [color=#66CC66]==[/color] [color=#FF0000]'number'[/color][color=#66CC66])[/color] [color=#B1B100]then[/color]
pos.stackpos [color=#66CC66]=[/color] stackpos
[color=#B1B100]end[/color]
[color=#B1B100]return[/color]
pos
[color=#B1B100]end[/color]
[color=#B1B100]return[/color] [color=#B1B100]false
[/color][color=#B1B100]end
[/color]

 

Explicando o código:


[color=#B1B100]function[/color] position[color=#66CC66]([/color]x, y, z, stackpos[color=#66CC66])
[/color]

- Criamos a função position.


[color=#B1B100]if[/color] [color=#66CC66]([/color][color=#66CC66]([/color]x [color=#B1B100]and[/color] y [color=#B1B100]and[/color] z[color=#66CC66])[/color] [color=#B1B100]and[/color] [color=#B1B100]type[/color][color=#66CC66]([/color][color=#B1B100]tonumber[/color][color=#66CC66]([/color]x..y..z[color=#66CC66])[/color][color=#66CC66])[/color] [color=#66CC66]==[/color] [color=#FF0000]'number'[/color][color=#66CC66])[/color] [color=#B1B100]then
[/color]

- Fazemos uma análise para verificar o valor correto da posição.

No restante são apenas as análises gerais.

Numa vista geral, este código é um código bem normal, porém, o grande detalhe está aqui:

 


[color=#333333]type(tonumber(x..y..z))
[/color]


Mas o que há de tão especial nisso, Tio Gordo?

É o que irei mostrar:

 

[color=#B1B100]type[/color][color=#66CC66]([/color][color=#B1B100]tonumber[/color][color=#66CC66]([/color]x[color=#66CC66])[/color] [color=#66CC66]==[/color] [color=#FF0000]'number'[/color] [color=#B1B100]and[/color] [color=#B1B100]type[/color][color=#66CC66]([/color][color=#B1B100]tonumber[/color][color=#66CC66]([/color]y[color=#66CC66])[/color] [color=#66CC66]==[/color] [color=#FF0000]'number'[/color] [color=#B1B100]and[/color] [color=#B1B100]type[/color][color=#66CC66]([/color][color=#B1B100]tonumber[/color][color=#66CC66]([/color]z[color=#66CC66])[/color] [color=#66CC66]==[/color] [color=#FF0000]'number'
[/color]

 

Esse código inteiro, é EXATAMENTE igual a:

 

[color=#B1B100]type[/color][color=#66CC66]([/color][color=#B1B100]tonumber[/color][color=#66CC66]([/color]x..y..z[color=#66CC66])[/color][color=#66CC66])[/color] [color=#66CC66]==[/color] [color=#FF0000]'number'
[/color]

~ Mas Tio Gordo, como isso pode ser possível? :ohnoes:

 

É simples, veja bem este código:

 


x [color=#66CC66]=[/color] [color=#FF0000]"134"
[/color]y [color=#66CC66]=[/color] [color=#FF0000]"abc"
[/color]z [color=#66CC66]=[/color] [color=#FF0000]"7"
[/color][color=#B1B100]print[/color][color=#66CC66]([/color][color=#B1B100]tonumber[/color][color=#66CC66]([/color]x[color=#66CC66])[/color][color=#66CC66])
[/color][color=#B1B100]print[/color][color=#66CC66]([/color][color=#B1B100]tonumber[/color][color=#66CC66]([/color]y[color=#66CC66])[/color][color=#66CC66])
[/color][color=#B1B100]print[/color][color=#66CC66]([/color][color=#B1B100]tonumber[/color][color=#66CC66]([/color]z[color=#66CC66])[/color][color=#66CC66])
[/color][color=#B1B100]print[/color][color=#66CC66]([/color][color=#B1B100]tonumber[/color][color=#66CC66]([/color]x..y..z[color=#66CC66])[/color][color=#66CC66])
[/color]

 

O resultado do processamento desse script, resulta em:

 

134
nil
7
nil

 

A pergunta é: Porque só retorna valores NUMÉRICOS e não ALFA-NUMÉRICOS?

 

Bem, a função tonumber funciona com quaisquer caracteres, basta saber como utilizar a sintaxe.

Veja essa tabela bem simples:

[TABLE=width: 500]

[TR]

[TD=align: left]tonumber(x)[/TD]

[TD=align: left]Retorna valores NUMÉRICOS de X[/TD]

[/TR]

[TR]

[TD=align: left]tonumber(X)[/TD]

[TD=align: left]Retorna quaisquer valores de X.[/TD]

[/TR]

[TR]

[TD=align: left]tonumber(x..y..z)[/TD]

[TD=align: left]Retorna valores NUMÉRICOS da união entre X,Y E Z[/TD]

[/TR]

[/TABLE]

 

- Bem, analisemos:

 

* Se a letra minúscula me retorna valores NUMÉRICOS;

* Se a letra maiúscula me retorna quaisquer valores;

Se utilizarmos uma união de X,Y,Z e uma dessas variáveis não tiver componente numérico, basta eu apenas deixar essa variável maiúscula?

 

Exatamente isso!


~ Exemplo analítico:

Vamos agora aplicar esse conhecimento em um novo script:

 


[color=#B1B100]if[/color] [color=#66CC66]([/color]x [color=#66CC66]>[/color] z[color=#66CC66])[/color] [color=#B1B100]then[/color]
r [color=#66CC66]=[/color] x
[color=#B1B100]else[/color]
r [color=#66CC66]=[/color] z
[color=#B1B100]end
[/color]

- Podemos reduzí-lo facilmente para esta forma:

 


r [color=#66CC66]=[/color] [color=#66CC66]([/color]x [color=#66CC66]>[/color] z [color=#B1B100]and[/color] x[color=#66CC66])[/color] [color=#B1B100]or[/color] z

 

Pelo simples fato de que o valor de R está em função de X ser maior que Z ou não :D

 

- O resultado disso é simples:


Se X for maior que Z; R será o valor de X.
Se X for menor que Z; R será o valor de Z.

Ideia Final: O valor maior será o valor de Z.


~ Invasão da primeira aula :

Como vocês devem lembrar (espero que lembrem :P), podemos fazer essa análise também pelas funções Math:

 


[color=#B1B100]if[/color] [color=#66CC66]([/color][color=#B1B100]type[/color][color=#66CC66]([/color]x[color=#66CC66])[/color] [color=#66CC66]==[/color] [color=#FF0000]"number"[/color] [color=#B1B100]and[/color] [color=#B1B100]type[/color][color=#66CC66]([/color]y[color=#66CC66])[/color] [color=#66CC66]==[/color] [color=#FF0000]"number"[/color][color=#66CC66])[/color] [color=#B1B100]then[/color]
r [color=#66CC66]=[/color] [color=#B1B100]math.max[/color][color=#66CC66]([/color]x, y[color=#66CC66])
[/color][color=#B1B100]else[/color]
r [color=#66CC66]=[/color] [color=#CC66CC]0
[/color][color=#B1B100]end
[/color]

- Pode ser reduzido FACILMENTE para:

 


r [color=#66CC66]=[/color] [color=#66CC66]([/color][color=#B1B100]type[/color][color=#66CC66]([/color]x[color=#66CC66])[/color] [color=#66CC66]==[/color] [color=#FF0000]"number"[/color] [color=#B1B100]and[/color] [color=#B1B100]type[/color][color=#66CC66]([/color]y[color=#66CC66])[/color] [color=#66CC66]==[/color] [color=#FF0000]"number"[/color] [color=#B1B100]and[/color] [color=#B1B100]math.max[/color][color=#66CC66]([/color]x, y[color=#66CC66])[/color][color=#66CC66])[/color] [color=#B1B100]or[/color] [color=#CC66CC]0
[/color]

Eliminando as "Teias de SE".

 

- Podemos ainda fazer um modo mais avançado, veja:


[color=#B1B100]if[/color] [color=#66CC66]([/color][color=#B1B100]type[/color][color=#66CC66]([/color]x[color=#66CC66])[/color] [color=#66CC66]==[/color] [color=#FF0000]"number"[/color] [color=#B1B100]and[/color] [color=#B1B100]type[/color][color=#66CC66]([/color]y[color=#66CC66])[/color] [color=#66CC66]==[/color] [color=#FF0000]"number"[/color][color=#66CC66])[/color] [color=#B1B100]then[/color]
r [color=#66CC66]=[/color] [color=#B1B100]math.max[/color][color=#66CC66]([/color]x, y[color=#66CC66])
[/color][color=#B1B100]elseif[/color] [color=#66CC66]([/color][color=#B1B100]type[/color][color=#66CC66]([/color]x[color=#66CC66])[/color] [color=#66CC66]==[/color] [color=#FF0000]"number"[/color][color=#66CC66])[/color] [color=#B1B100]then[/color]
r [color=#66CC66]=[/color] x
[color=#B1B100]elseif[/color] [color=#66CC66]([/color][color=#B1B100]type[/color][color=#66CC66]([/color]y[color=#66CC66])[/color] [color=#66CC66]==[/color] [color=#FF0000]"number"[/color][color=#66CC66])[/color] [color=#B1B100]then[/color]
r [color=#66CC66]=[/color] y
[color=#B1B100]else[/color]
r [color=#66CC66]=[/color] [color=#CC66CC]0
[/color][color=#B1B100]end
[/color]

 

- De forma reduzida, temos:

 


r [color=#66CC66]=[/color] [color=#66CC66]([/color][color=#B1B100]type[/color][color=#66CC66]([/color]x[color=#66CC66])[/color] [color=#66CC66]==[/color] [color=#FF0000]"number"[/color] [color=#B1B100]and[/color] [color=#B1B100]type[/color][color=#66CC66]([/color]y[color=#66CC66])[/color] [color=#66CC66]==[/color] [color=#FF0000]"number"[/color] [color=#B1B100]and[/color] [color=#B1B100]math.max[/color][color=#66CC66]([/color]x, y[color=#66CC66])[/color][color=#66CC66])[/color] [color=#B1B100]or[/color] [color=#66CC66]([/color][color=#B1B100]type[/color][color=#66CC66]([/color]x[color=#66CC66])[/color] [color=#66CC66]==[/color] [color=#FF0000]"number"[/color] [color=#B1B100]and[/color] x[color=#66CC66])[/color] [color=#B1B100]or[/color] [color=#66CC66]([/color][color=#B1B100]type[/color][color=#66CC66]([/color]y[color=#66CC66])[/color] [color=#66CC66]==[/color] [color=#FF0000]"number"[/color] [color=#B1B100]and[/color] y[color=#66CC66])[/color] [color=#B1B100]or[/color] [color=#CC66CC]0
[/color]

 

Que também reduz as "Teias de SE".


É galerinha, aqui me despeço de vocês. Obrigado por lerem e espero ter ajudado vocês.

Qualquer dúvida ou sugestão, só comentar ai gente!

 

"Ninguém é bom o suficiente que não possa errar!"

 

Um abraço galera,

até mais;

Tio Gordo.

 

Créditos a Mim e à Colandus.

Editado por Tio Gordo

Compartilhar este post


Link para o post
vHp    6
vHp

Que pena que é a última aula!

 

Entretanto, mais uma aula exemplar, obrigado!

Compartilhar este post


Link para o post
luanluciano9    0
luanluciano9

que bugado ficou o tópico!

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×