Term
Avaliando uma Declaração Script Usando Nashorn (EvalScript.java) |
|
Definition
import javax.script.*;
public class EvalScript
{
public static void main( String[] args ) throws Exceptions {
//create a script engine manager
ScriptEngineManager factory = new ScriptEngineManager();
//create a NasHorn script engine
ScriptEngine engine = factory.getEngineByName("nashorn");
// evaluate JavaScript statement
try{
engine.eval("print( 'Hello World!' );");
}catch( final scriptException se ){ se.printStackTrace();}
} |
|
|
Term
Para instanciar uma classe, passe a função de objeto JavaClass para o novo operador. Nashorn invoca o construtor correspondente com base nos argumentos passados para a função. |
|
Definition
jjs > var HashMap = Java.type("java.util.HashMap ")
jjs > var mapDef = new HashMap()
jjs > var map100 = new HashMap(100) |
|
|
Term
Acessando classes e instanciando membros |
|
Definition
jjs > Java.type("java.lang.Math") . PI
3.141592653589793
jjs > Java.type("java.lang.System ").currentTimeMillis()
1375813353330
jjs > Java.type("java.util.Map"). Entry
[JavaClass java.util.Map$Entry ] |
|
|
Term
Usando JavaBeans.Nashorn permite tratar de acessos e mudanças de métodos JavaBeans como propriedades de JavaScript equivalentes. O nome da propriedade é o nome do método JavaBean sem obter ou definir sufixo, e começa com uma letra minúscula.Por exemplo, você pode chamar o getYear () e setYear () métodos em um objeto java.util.Date usando a propriedade ano da seguinte forma: |
|
Definition
jjs > var Date = Java.type("java.util.Date ")
jjs > var date = new Date()
jjs > date.year + 1900
2013
jjs > date.year = 2014 - 1900
114
jjs > date.year + 1900
2014 |
|
|
Term
Criando um mecanismo de scrip Nashorn |
|
Definition
ScriptEngine engine = factory.getEngineByName("nashorn"); |
|
|
Term
Nashorn interpreta números como java.lang.Double, java.lang.Long, ou objetos java.lang.Integer, dependendo do cálculo executado. Você pode usar a função Number () para forçar um número a ser um objeto duplo |
|
Definition
jjs> var intNum = 10 jjs> intNum.class class java.lang.Integer jjs> var dblNum = Number(intNum) jjs> dblNum.class class java.lang.Double |
|
|
Term
Nashorn interpreta coleções Java como matrizes. Você pode acessar os elementos de coleta utilizando o índice entre colchetes ([]) e iterar sobre os valores de uma coleção usando o para cada instrução |
|
Definition
jjs> var ArrayList = Java.type("java.util.ArrayList") jjs> var alist = new ArrayList() jjs> alist.add("a") true jjs> alist.add("b") true jjs> alist.add("c") true jjs> alist[1] b jjs> for each (var i in alist) print(i) a b c |
|
|
Term
Strings são interpretados por Nashorn como objetos java.lang.String. No entanto, se você concatenar duas strings você pode obter uma instância da classe jdk.nashorn.internal.runtime.ConsString. Isto não é um problema para a maioria dos scripts, porque ambas as classes podem implementar a interface java.lang.CharSequence, mas em alguns casos, Nashorn passa o objeto ConString quando um método espera um argumento java.Lang.Object. Para evitar isso, use a função String () para garantir que a String é um objeto String de Java. |
|
Definition
jjs> var a = "abc" jjs> a.class class java.lang.String jjs> var b = a + "def" jjs> b.class class jdk.nashorn.internal.runtime.ConsString jjs> var c = String(b) jjs> c.class class java.lang.String |
|
|
Term
Você pode estender uma classe usando o Java.extend function () que leva um tipo Java como o primeiro argumento e implementações de método (na forma de funções de JavaScript), como os outros argumentos |
|
Definition
var Run = Java.type("java.lang.Runnable");
var MyRun = Java.extend( Run, {
run : function() {
print("Run is separeted thread");
}
});
var Thread = Java.type(" java.lang.Thread");
var th = new Thread( new MyRun() ); |
|
|
Term
Você pode ativar as extensões de shell script em Nashorn usando o comando jjs com a opção de script |
|
Definition
|
|
Term
A função Java.type pode ser usada para se obter referências precisas do tipo Java |
|
Definition
var LinkedList = Java.type("java.util.LinkedList"); var primitiveInt = Java.type("int"); var arrayOfInts = Java.type("int[]"); |
|
|
Term
Interpretar uma aplicação de script JavaFX com o Nashorn, usando o mando jjs com a opção -fx |
|
Definition
|
|
Term
Um heredoc especifica strings em shell UNIX que preservam as quebras de linhas e recuos. Com recursos do shell habilitado, pode-se usar o Nashorn para avaliar scripts com heredoc |
|
Definition
#!/usr/bin/jjs print(<<EOD); ${arguments[0]} is normal
${arguments[1]} is indented
${arguments[2]} is separated by a blank line EOD |
|
|
Term
$ARG
Este objeto global pode ser usado para acessar os argumentos passados para o script, semelhante à forma como o objeto argumentos é usado.
|
|
Definition
>> jjs -scripting -- arg1 arg2 arg3 jjs> $ARG arg1,arg2,arg3 jjs> $ARG[1] arg2 |
|
|
Term
$ENV
Este objeto global mapeia todas as variáveis de ambiente atuais
|
|
Definition
jjs> $ENV.USER johndoe jjs> $ENV.PWD /foo/bar |
|
|
Term
$EXEC()
Esta função global lança processos para executar comandos
|
|
Definition
jjs> $EXEC("ls -l") total 0 drwxr-xr-x+ 1 johndoe staff 4096 Aug 18 11:03 dir -rwxrw-r-- 1 johndoe staff 168 Aug 19 17:44 file.txt
jjs> |
|
|
Term
load()
Essa função carrega e avalia um script de um caminho, URL, ou um objeto.
|
|
Definition
jjs> load("/foo/bar/script.js") jjs> load("http://example.com/script.js") |
|
|
Term
Usando o Shebang para criar um script executável |
|
Definition
#!/usr/bin/jjs -fv print("Arguments: " + arguments); |
|
|
Term
Com recursos de script shell habilitado, Nashorn define várias funções internas
( readLine() )
Esta função lê uma linha de entrada de stdin e envia para stdout, ou você pode atribuir o resultado a uma variável. Você também pode passar uma string para a função readLine () para obter uma linha de comando |
|
Definition
jjs> var name = readLine("What is your name? ") What is your name? Bob jjs> print("Hello, ${name}!") Hello, Bob! jjs> |
|
|
Term
Com recursos de script shell habilitado, Nashorn define várias funções internas readFully()
Esta função lê todo o conteúdo de um arquivo passado como um argumento de string e os envia para a saída padrão, ou você pode atribuir o resultado a uma variável.
|
|
Definition
jjs> readFully("text.txt") This is the contents of the text.txt file located in the current working directory.
jjs> |
|
|