Smalltalk – Refactoring, Edit & Continue e outras coisinhas

Se no artigo anterior eu falei da busca por exemplo que eu acho legal no Smalltalk, nesse vou falar de outras coisinhas não só legais como importantes no desenvolvimento. Um dos aspectos interessantes/importantes é a possibilidade de editar o código em tempo de execução sem que seja necessário executar novamente a parte anterior. Ao final eu coloco um vídeo. Como não tenho microfone, o vídeo não tem som. A sequencia é, basicamente a seguinte:

  • Chamo o método addOne para um número cuja finalidade seria de adicionar 1 ao número. Um simples incremento.
  • Como o método não existe, o ambiente me informa e pede para que seja confirmado, cancelado ou corrigido. Ele abre uma janela com diversas opções que ele acha que poderia ser as correções.
  • Se eu escolho informar que eu estava correto e o método não existe, o ambiente gera uma exceção para o erro com possibilidade para que eu continue, abandone, inicie a depuração ou crie o método.
  • Decido por criar o método na classe Integer (já que eu havia aplicado para um inteiro), escolho a categoria arithmetic (serve para que os métodos fiquem agrupados de forma lógica) e os dados de quem está efetuando a alteração para que alguém seja considerado culpado em caso de problema. 😉
  • É aberta uma janela para que eu edite o que o novo método irá fazer, informo que é apenas para somar 1 e retornar o resultado (usa-se ^ para indicar retorno de um valor), informo Accept para que o método seja compilado e seleciono Proceed para continuar o programa que estava sendo executado.

Ok, acabamos de ter o primeiro contado com o edit & continue, isto é, efetuamos uma alteração no programa e continuamos a execução sem a perda do que foi processado anteriormente. Na maioria das linguagens, se o seu programa está rodando a duas semanas, já processou um zilhão de dados e encontra um problema em uma circunstancia que não havia sido prevista inicialmente, a solução seria efetuar as correções e esperar mais duas semanas para chegar ao pondo em que havia parado. Em teoria, um programa em Smalltalk necessitaria ser interrompido apenas para a correção do bug e seguiria em frente. Outra opção radical, o que não significa racional, seria a possibilidade de colocar o sistema em produção logo após ter iniciado. Mas vamos juntar o Edit & Continue com o Refactoring.

  • Agora eu resolvo invocar o método addOne para um valor em ponto flutuante. Novamente o ambiente irá mostrar um erro dizendo que não existe método addOne para a classe Float. Lógico, eu adicionei o método para a classe Integer. Poderia criar um novo método para a classe Float o que não seria muito inteligente. O ideal seria mover o método para a classe pai e ele seria herdado pelas filhas.
  • Para fazer isso, posso abrir o navegador no ambiente, procurar o método addOne e movê-lo para a classe pai. Como pode ser visto nos menus do vídeo, as opção para refactoring são abundantes. Então escolho Refactor method e Pull up e pronto. O método passou da classe Integer para a classe Number. Digo para aceitar e pronto.

E assim termina o vídeo-tutorial-mudo de hoje. Lembrando que eu estou usando o Pharo versão 1.3. YMMV.

=-=-=-=-=
Powered by Blogilo

Anúncios