Jump to content
Pedro Pinheiro

Organização do script

Recommended Posts

Com o tempo eu fico adicionando variáveis nos scripts que eu crio e com o tempo ele vai crescendo crescendo crescendo e quando eu olho para o script eu vejo aquela maçaroca de coisas mortas no script. Existe alguma forma (Função no autoit) de deletar o que não está sendo usada no código e organizar sem ter que olhar linha por linha e verificar tudo o que está sendo usado ou não?

Share this post


Link to post
Share on other sites

@PedroPinheiro, sua questão é ótima, mas infelizmente até hoje eu não vi nada neste sentido.

Faz algum tempo que não vasculho o forum americano atrás de novidades, pode ser que nesse tempo já tenha aparecido algo...

 

Fica até o convite para dar uma "fuçada" no fórum americano, o fórum alemão também é ótimo!

 

Embora as vezes eu sinta uma dificuldade extrema em usar as palavras certas para realizar uma pesquisa em outro idioma.

Edited by Luigi

Share this post


Link to post
Share on other sites

@PedroPinheiro, a um tempo atrás tive um problema semelhante com um "script legado" que utilizo no trabalho.

O que fiz foi deixar o script ser executado normalmente por um tempo, mas no final eu gravava um log com o "valor final" de todas as variáveis.

Depois, joguei os logs no MS Excel e removi os valores duplicados, assim, pude identificar as variáveis que não estavam sendo utilizadas.

No SciTI, marquei todas as linhas que continham as variáveis e fui analisando as linhas marcadas, excluindo e modificando os trechos em que elas estavam.

 

Talvez este método funcione para você, pois, parafraseando o @Luigi, "até hoje não vi nada neste sentido".

Uma prática que adotei também, é utilizar o comando ConsoleWrite(), para acompanhar a execução do código pelo SciTI.

 

:autoit:

  • Like 1

Share this post


Link to post
Share on other sites

O que fiz foi deixar o script ser executado normalmente por um tempo, mas no final eu gravava um log com o "valor final" de todas as variáveis.

Depois, joguei os logs no MS Excel e removi os valores duplicados, assim, pude identificar as variáveis que não estavam sendo utilizadas.

@NOx, olha que você me deu uma ideia!

É fácil ler o início e término de cada função e fazer essa análise que você disse, e ver o que está sendo usado ou não...

É um ponto de partida!

 

Mas agora escrevendo isso, pensei, e se o script for "tão tão tão" grande, que você não consiga simular o uso de todas as funções?

Se o script for pequeno, poucas funções e variáveis, sussi...

Agora o frio na espinha veio: e se não for?

Share this post


Link to post
Share on other sites

@NOx, olha que você me deu uma ideia!

É fácil ler o início e término de cada função e fazer essa análise que você disse, e ver o que está sendo usado ou não...

É um ponto de partida!

 

Mas agora escrevendo isso, pensei, e se o script for "tão tão tão" grande, que você não consiga simular o uso de todas as funções?

Se o script for pequeno, poucas funções e variáveis, sussi...

Agora o frio na espinha veio: e se não for?

@Luigi, sua ponderação é totalmente pertinente! :construction:

 

Eu desconheço uma função "limpa código" em qualquer linguagem. Falando à grosso modo, geralmente as IDEs alertam sobre variáveis criadas e não instanciadas ou quando uma função está utilizando uma variável não declarada ou instanciada. (e se vc excluir algo acidentalmente, as linhas que utilizam essas variáveis/funções vão ser marcadas como erro, mas não serão excluídas do código).

 

Acredito que a melhor forma para contornar os problemas do tipo é melhorar a organização do código.

 

Extra:

Sem querer "ensinar padre a rezar missa", o que eu recomendo para ajudar na manutenção, é definir uma estrutura pro script (1- variáveis, 2- funções, 3- execução).

A partir disso, o camarada começa a observar o que é comum, e pode separar. Isso já ajuda a manutenção de inclusão/exclusão de linhas.

Categorizar as funções também é uma boa prática. Isso permite criar um ".au3" exclusivo e que se pode adicionar ao ".au3" principal com #include<"*.au3">, ou seja, "regionalizar" o problema.

 

 

 

 

Share this post


Link to post
Share on other sites

Eu sempre coloco nos meus scripts uma linha com parâmetros que me indicam varios erros de sintaxe e variáveis que não estão sendo usadas:

#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6

Vc pode usar também funções do obfuscador (só até a versão 3.3.9.4) na hora de compilar pois ele tira todas funções e variáveis que não estão sendo usadas e aí prá ter o código limpo vc copia o conteúdo do script _Obfuscated.au3 que foi gerado.

 

OBS: Fazendo assim são eliminadas até as funções dos includes que não foram usadas aí vc pode copiar tudo e criar um include só, coloque os includes no início do script para ficar fácil separar o que é include do que é do seu script!

/sf 1; Elimina todas funções que não foram usadas no script
/sv 1; Elimina todas variáveis que não foram usadas no script
  • Like 3

Share this post


Link to post
Share on other sites

 

Eu sempre coloco nos meus scripts uma linha com parâmetros que me indicam varios erros de sintaxe e variáveis que não estão sendo usadas:

#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6

Vc pode usar também funções do obfuscador (só até a versão 3.3.9.4) na hora de compilar pois ele tira todas funções e variáveis que não estão sendo usadas e aí prá ter o código limpo vc copia o conteúdo do script _Obfuscated.au3 que foi gerado.

 

OBS: Fazendo assim são eliminadas até as funções dos includes que não foram usadas aí vc pode copiar tudo e criar um include só, coloque os includes no início do script para ficar fácil separar o que é include do que é do seu script!

/sf 1; Elimina todas funções que não foram usadas no script
/sv 1; Elimina todas variáveis que não foram usadas no script

 

Exatamente se você na hora de compilar você usar esses parâmetros dá uma "enxugada" no script.

 

Aqui instalei o SciTE ver 16.612.1119.0 , mais recente.

 

AutoIt Script Editor Downloads ou Link Direto Aqui.

 

Na hora de compilar apertando o atalho Ctrl + F7 ou indo com o ponteiro do mouse no Scripte clicando com o botão direito vai na opção compile with Options, vai abrir AutoIt3Wrapper GUI to Compile AutoIt3 Script (ver 16.612.1119.0)

 

Nas versões recentes não tem Obfuscador , mas tem Au3Check , Tidy e Au3Stripper.

 

Tem muita opção pra tirar coisas não utilizadas no script como por exemplo:

 

Na Aba Au3Check:

Possíveis Parâmetros:
  -q          : quiet (apenas erro / saída de aviso)
  -d          : como Opt ("MustDeclareVars", 1)
  -I dir      : diretórios adicionais para pesquisar arquivos de inclusão
  -U - | file : output UDFs não referenciadas e variáveis globais
  -w 1        : arquivo já incluído (ligado)
  -w 2        : falta # comments-end (on)
  -w 3        : já declarado var (desligado)
  -w 4        : var local usado no escopo global (desligado)
  -w 5        : local var declarado mas não utilizado (desligado)
  -w 6        : aviso ao usar Dim (desligado)
  -v 1        : show include caminhos / arquivos (off)
  -v 2        : mostrar tokens lexer (desligado)

Na aba Tidy:

Possíveis Parâmetros:  
  / tc n   : 0 = Tab> 0 = Número de Espaços.
  / gd     : Gerar arquivo de documentação.
  / rel    : Remove linhas vazias da fonte.
  / reel   : Remova as linhas vazias extras da fonte, deixando uma.
  / ri     : Indentação da região.
  / sci 0  : Padrão Saída mínima para o console: aviso e erros.
  / sci 1  : Mostra mais informações de progresso.
  / sci 9  : Mostra todas as linhas de depuração encontradas no Au3Stripper.log.
  / gds    : Mostra o arquivo doc gerado no Bloco de Notas.
  / sdp x  : Especifique Diffprogram para usar, por exemplo:
  / Sdp C  : \ Progra ~ 1 \ WinMerge \ winmerge.exe "% new%" "% old%"
  / nsdp   : Não executar o programa conforme especificado pelo / sdp.
  / kv n   : n = número de cópias a manter. 0 = todos
  / bdir x : x = diretório de backup de destino.
  / sf     : Classificar todos os blocos Func-Endfunc na seqüência FuncName. 
             Quando # Região- # EndRegion é usado classificá-los dentro desse escopo

E na aba Au3Stripper:

Possíveis Parâmetros:
  / tl    : Criar Au3Stripper.Log com um rastreamento de todas as ações.
  / debug : add Informações de depuração para Au3Stripper.Log.
  / pe    : Substituir e referência a uma variável Global Const com seu valor real.
  / so    : Este é o padrão quando nenhum parâmetro é fornecido. Mesmo que / sf + / sv
  / sf    : Tira todos os Func não utilizados
  / sv    : Tira todos os registos de var globais não utilizados.
  / mo    : Apenas mescla os arquivos de inclusão na origem e tira os comentários.
            Isso é semelhante ao aut2exe e ajuda a encontrar a linha de erro.
  / mi    : Define o máximo Iterations Au3Stripper irá executar. O padrão é 5.
  / rm    : Renomear variáveis e funções para um nome mais curto.
  / rsln  : Substituir @ScriptLineNumber pelo número da linha real.
  / Beta  : Usar Beta Inclui.

 

Tem outros recursos também é só explorar. :up:

 

Obs: Só toma cuidado ai pois usando esses recursos retira o #EndRegion entendeu , já usei pra deixar o script só com as funções que serão usadas e retirar as variáveis não utilizadas etc.

 

Retira até das includes como disse o Belini, mas tem que prestar atenção nisso ai.

Edited by Fábio iGames
  • Like 2

Share this post


Link to post
Share on other sites
On 25/01/2017 at 10:19 PM, Luigi said:

@NOx, olha que você me deu uma ideia!

É fácil ler o início e término de cada função e fazer essa análise que você disse, e ver o que está sendo usado ou não...

É um ponto de partida!

 

Mas agora escrevendo isso, pensei, e se o script for "tão tão tão" grande, que você não consiga simular o uso de todas as funções?

Se o script for pequeno, poucas funções e variáveis, sussi...

Agora o frio na espinha veio: e se não for?

Vcs conhecem o Autoit Debugger...

Para programas muito complexos é impossivel não trabalhar sem ele.

ele permite vc rodar o programa passo a passo até ver o conteudo de cada variavel e assim depurar tudo.

Infelismente é um projeto maravilhoso mas descontinuado...

Funciona até a versão do autoit v3.3.14.2 

acho que eu já postei aqui neste forum

Share this post


Link to post
Share on other sites

Olá Odaylton.

   Realmente o AutoIt Debugger é muito interessante.

   Os conceitos de projeto, trabalhar com vários fontes, um debugger integrado à IDE fazem parte da maioria dos ambientes de programação de linguagens mais conhecidas por aí.

   O fato de ter sido descontinuado não é problema, pois ainda funciona perfeitamente na atual versão do AutoIt. Futuramente? Vamos ver...

   Minha opinião pessoal é que apesar dos recursos, não me adaptei com ele, mas isto é uma questão de gosto mesmo.

   Fico um pouco chateado com os desenvolvedores originais, que são fantásticos, mas tem uma visão incorreta de sua própria criação!

   O AutoIt já foi uma mera ferramenta de automação ou de produção de pequenos scripts e tal, mas hoje sua complexidade e abundância de recursos exige um tratamento bem mais profissional, com uma IDE apropriada, compilação efetiva (para eliminar os problemas de direitos autorais), uma interface para produção de janelas e relatórios, etc...

   Hoje o AutoIt é uma linguagem madura, sem nada a dever para as outras, mas está sendo mantida em segundo plano por conta desta visão tacanha.

   É uma pena.

  • Like 1

Share this post


Link to post
Share on other sites

Manimal faço das suas palavras as minhas! o AutoIT hoje em dia é sem duvida uma excepcional ferramenta seja pra automação, criação de pequenos e complexos programas.. mas o que na minha opinião poderia ser melhorado é a velocidade te interpretação do código, ou a utilização de Multithreading que já resolveria esta questão também..

  • Like 1

Share this post


Link to post
Share on other sites

Oi Mutleey.

   Quando em falo em compilação efetiva, eu quero dizer, eliminação do interpretador e criação de código de máquina mesmo! Com isto, naturalmente, a velocidade de execução aumenta.

   Quanto ao multi-threading já depende muito mais de conceitos da linguagem do que mudança do compilador... Mas é uma possibilidade!

   Não percebemos, mas várias linguagens atualmente são interpretadas, principalmente as Web, naturalmente por causa do próprio ambiente e isto é uma tendência. Empresas como a Google, lançando a plataforma CSP e outras na mesma linha, que trabalham os conceitos de "containers" vão cada vez mais caminhando neste sentido.

   A compilação efetiva é coisa de desktop e por tabela voltada especificamente a uma plataforma apenas. Ou Windows ou Mac, por exemplo. Não é possível compilar para as duas simultaneamente. A solução disto é os containers, que resolvem essa questão e permitem que o mesmo código seja executado em qualquer dispositivo. O custo disto é a lentidão das plataformas.

   O melhor exemplo disto é a linguagem Java, que roda em trocentos equipamentos. Eu não gosto de Java, nunca fui com a forma como a linguagem foi implementada, mas reconheço que o conceito de amplitude dela é muito interessante.

   Como comentei antes porém, é necessário um "layer" adicional que interprete a linguagem e converta para os códigos de máquina do dispositivo em que ela está rodando e isto "acaba" com a velocidade, sem falar da memória necessária.

   Este é o motivo pelo qual precisamos instalar (ou atualizar) o JRE (Java Runtime Environment) em tudo que é lugar.

   Infelizmente reconheço que a compilação efetiva, tornar-se á muito complicada, demorada e cara de manter, a ponto de ser comercialmente viável. Portanto, acostumemo-nos com os interpretadores ;)

Share this post


Link to post
Share on other sites

Olá Manimal, poxa uma pena mesmo.. uma compilação efetiva com AutoIT seria o ideial, resolveria a questão da velocidade e dos decompiladores, mais infelizmente com certeza isso não irá acontecer.

  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×