Programar em Java está cada vez mais rápido e simples, desde as mudanças que começaram a surgir na versão 7 do Java, a verbosidade característica da linguagem foi reduzindo e agora no Java 8 alcançamos um nível muito superior com a programação funcional presente na linguagem.

Porém, muitos ainda dizem que estas funcionalidades chegaram um pouco atrasadas na linguagem, e durante este tempo que ainda não tinhamos a programação funcional presente no Java, foram surgindo outras linguagens sobre a JVM que visavam trazer novos paradigmas para os programadores.

Como estamos acompanhando, o Javascript tem tomado cada vez mais conta dos projetos de desenvolvimento mudo afora, principalmente agora ele roda firme e forte no lado do servidor, através de diversos projetos diferentes, sendo a referência maior o Node.js, com isto, novamente o Javascript ganhou o foco, principalmente após a criação da instrução invokedynamic, que permitiu a criação e invocação de métodos durante a execução do programa.

Assim, a comunidade iniciou um novo projeto, o Nashorn, que permite executar Javascript na JVM, dentro de outros programas em Java e também executar Java dentro de Javascript. Pode parecer loucura, mas é muito simples iniciar o desenvolvimento, como vemos abaixo.

A primeira coisa que notamos, é que além de rodar scripts, foi criado um interpretador interativo, onde você digita os comandos e recebe o resultado na hora, similar aos já existentes em Python e Ruby. Para acessa-lo basta digitar o comando jrunscript:

Note que alguns comandos já executam normalmente, como o print, criação de variáveis e também operações aritméticas. Porém, não temos apenas o interpretador interativo, podemos executar diretamente scripts, bastando colocar no prompt jrunscript seuarquivo.js, vejamos um exemplo:

1
2
3
4
5
6
7
var imprimeNumeros = function(numeros) {
    for(var n = 0; n < numeros.length; n++) {
        println(numeros[n]);
    }
};

imprimeNumeros([1,2,3]);

Este script simples apenas imprime alguns números na tela, porém já podemos ver como diversos elementos do Javascript atuam em execução, sendo a saída:

Mas não se limita apenas a operadores básicos da linguagem, como o script roda sobre a máquina virtual Java, ou seja, ele é convertido em bytecodes, também podemos invocar bytecodes já existentes, ou seja, invocar classes presentes na linguagem Java, como este exemplo que invoca a classe FileReader e Scanner, lendo e exibindo as linhas de um arquivo:

1
2
3
4
5
6
var file = new java.io.FileReader("nomes.txt");
var scanner = new java.util.Scanner(file);

scanner.forEachRemaining(function(linha) {
    print(linha);
});

Perceba como escrevemos muito pouco código para realizar tarefas interessantes, tudo isso através de uma linguagem familiar e simples, porém com muitos recursos em sua sintaxe.