Jshell e Read-Eval-Print Loop (REPL)

Atualmente, estou me preparando para o exame OCP 1Z0-813  e venho aqui falar  um pouco mais sobre um recurso que está sendo muito útil para meus estudos: o Jshell do JDK9!


O Jshell é uma proposta de implementar uma ferramenta de programação interativa, conhecida como Read-Eval-Print Loop (REPL), que continuamente lê a entrada do usuário, avalia, e escreve resultado ou a descrição da mudança de estado causada pela entrada. Linguagens como Python, Ruby, Javascript possuem REPLs que permitem a escrita de pequenos programas e até mesmo uma introdução rápida na linguagem.

Estas características ajudaram na popularidade destas linguagens no ensino de linguagem de programação e até algoritmos. Sendo assim, na próxima versão do Java teremos o REPL pelo Jshell para, quem sabe, motivar a utilização do Java no ensino.

Exemplo do Jshell

Um dos itens de avaliação da OCP é a manipulação dos atributos de arquivos pela API do NIO2. No uso da nova API somos testados sobre coisas do tipo:

  • Qual o tipo do arquivo? Um link? Arquivo regular? um diretório?
  • Qual a visibilidade e acessibilidade do arquivo? Ele é oculto? É executável?
  • Qual o usuário que possui privilégios no arquivo?

Estas e outras perguntas são expostas em métodos da API Files incluída ainda no Java 7 por meio de vários métodos helpers. Caso deseje entender um pouco das razões para criação desta API e sua estruturação, aqui e aqui tem um link interessante.

Voltando ao JShell, o primeiro passo é iniciá-lo é pela execução do comando jshell:

Ao tentar executar o método Paths.get, na linha 6, nos deparamos com um erro de “cannot find symbol“! Um erro que indica que a classe não é reconhecida em tempo de compilação. Isso ocorre devido o pacote java.nio.file não ser importado por padrão no JShell.

Para importar um pacote podemos fazer da mesma forma de código Java pela instrução import. O bacana do jshell que ao apertar TAB um autocomplete é apresentado! Os pacotes importados podem ser visualizados pelo comando /imports

Após importar o pacote, podemos utilizar as classes presentes no java.nio.file apenas chamando a instrução desejada;

Na linha 02-03 é apresentado a saída (Print) do resultado da avaliação (Eval) da nossa entrada (Read). Como o método Paths.get retorna uma instância de Path, o shell armazena o valor do resultado automaticamente em uma variável $N onde N é incrementado a cada execução. Podemos utilizar o objeto $2 para chamar qualquer método de Path ou passar ele como parâmetro para outros métodos, por exemplo:

Na linha 01, após digitar TAB, os métodos disponíveis na variável $2 são apresentados em autocomplete. Na linha 07, invocamos o método getFileName da interface Path. Por fim, na linha 11, testamos se o caminho do arquivo é um diretório pela chamada do método Files.isDirectory. Neste último caso, armazenamos o retorno da chamada em uma variável mais amigável.

Conclusão

O Jshell é uma ótima ferramenta para testes rápidos de API e com certeza irá trazer muitos benefícios aos desenvolvedores Java! Este artigo apresentou o básico da nova ferramenta e, caso você tenha gostado e deseja conhecer outras funcionalidades na prática, realize o download do acesso antecipado ao JDK 9 e bons estudos!

Anúncios