खोज…


परिचय

नैशर्न जावा में ओरेकल द्वारा विकसित एक जावास्क्रिप्ट इंजन है, और जावा 8 के साथ जारी किया गया है। नैसॉर्न जावा अनुप्रयोगों में जावास्क्रिप्ट को JSR-223 के माध्यम से एम्बेड करने की अनुमति देता है और स्टैंडअलोन जावास्क्रिप्ट अनुप्रयोगों को विकसित करने की अनुमति देता है, और यह बेहतर रनटाइम प्रदर्शन और ECMA के साथ बेहतर अनुपालन प्रदान करता है। सामान्यीकृत विनिर्देशन।

वाक्य - विन्यास

  • ScriptEngineManager // ScriptEngine वर्गों के लिए एक खोज और स्थापना तंत्र प्रदान करता है; SPI (सेवा प्रदाता इंटरफ़ेस) का उपयोग करता है
  • ScriptEngineManager.ScriptEngineManager () // अनुशंसित कंस्ट्रक्टर
  • ScriptEngine // स्क्रिप्टिंग भाषा को इंटरफ़ेस प्रदान करता है
  • दिए गए क्रियान्वयन के लिए स्क्रिप्ट विधि
  • ऑब्जेक्ट ScriptEngine.eval (स्ट्रिंग स्क्रिप्ट) // निर्दिष्ट स्क्रिप्ट निष्पादित करता है
  • ऑब्जेक्ट ScriptEngine.eval (रीडर रीडर) // लोड और फिर निर्दिष्ट स्रोत से स्क्रिप्ट निष्पादित करता है
  • ScriptContext ScriptEngine.getContext () // डिफ़ॉल्ट बाइंडिंग, पाठक और लेखक प्रदाता
  • void ScriptContext.setWriter (लेखक लेखक) // स्क्रिप्ट आउटपुट भेजने के लिए गंतव्य सेट करता है

टिप्पणियों

नैशॉर्न जावा में लिखा एक जावास्क्रिप्ट इंजन है और जावा 8 में शामिल है। आपको जो कुछ भी चाहिए वह सब javax.script पैकेज में बंडल किया गया है।

ध्यान दें कि ScriptEngineManager एक सामान्य एपीआई प्रदान करता है जो आपको विभिन्न स्क्रिप्टिंग भाषाओं के लिए स्क्रिप्ट इंजन प्राप्त करने की अनुमति देता है (अर्थात केवल नैशॉर्न ही नहीं, जावास्क्रिप्ट भी)।

वैश्विक चर सेट करें

// Obtain an instance of JavaScript engine
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("nashorn");

// Define a global variable
engine.put("textToPrint", "Data defined in Java.");

// Print the global variable
try {
    engine.eval("print(textToPrint);");
} catch (ScriptException ex) {
    ex.printStackTrace();
}

// Outcome:
// 'Data defined in Java.' printed on standard output

नमस्ते नैशोर्न

// Obtain an instance of JavaScript engine
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("nashorn");

// Execute an hardcoded script
try {
    engine.eval("print('Hello Nashorn!');");
} catch (ScriptException ex) {
    // This is the generic Exception subclass for the Scripting API
    ex.printStackTrace();
}

// Outcome:
// 'Hello Nashorn!' printed on standard output

जावास्क्रिप्ट फ़ाइल निष्पादित करें

// Required imports
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
import java.io.FileReader;
import java.io.FileNotFoundException;

// Obtain an instance of the JavaScript engine
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("nashorn");

// Load and execute a script from the file 'demo.js'
try {
    engine.eval(new FileReader("demo.js"));
} catch (FileNotFoundException ex) {
    ex.printStackTrace();
} catch (ScriptException ex) {
    // This is the generic Exception subclass for the Scripting API
    ex.printStackTrace();
}

// Outcome:
// 'Script from file!' printed on standard output

Demo.js :

print('Script from file!');

अवरोधन स्क्रिप्ट आउटपुट

// Obtain an instance of JavaScript engine
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("nashorn");

// Setup a custom writer
StringWriter stringWriter = new StringWriter();
// Modify the engine context so that the custom writer is now the default
// output writer of the engine
engine.getContext().setWriter(stringWriter);

// Execute some script
try {
    engine.eval("print('Redirected text!');");
} catch (ScriptException ex) {
    ex.printStackTrace();
}

// Outcome:
// Nothing printed on standard output, but
// stringWriter.toString() contains 'Redirected text!'

अंकगणित स्ट्रिंग्स का मूल्यांकन करें

// Obtain an instance of JavaScript engine
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");

//String to be evaluated
String str = "3+2*4+5";
//Value after doing Arithmetic operation with operator precedence will be 16

//Printing the value
try {
    System.out.println(engine.eval(str));
} catch (ScriptException ex) {
    ex.printStackTrace();
}

//Outcome:
//Value of the string after arithmetic evaluation is printed on standard output.
//In this case '16.0' will be printed on standard output.

नैशॉर्न में जावास्क्रिप्ट में जावा वस्तुओं का उपयोग

जावा कोड में संसाधित होने के लिए नैशॉर्न इंजन के लिए जावा ऑब्जेक्ट को पास करना संभव है। इसी समय, कुछ जावास्क्रिप्ट (और नैशॉर्न) विशिष्ट निर्माण हैं, और यह हमेशा स्पष्ट नहीं है कि वे जावा वस्तुओं के साथ कैसे काम करते हैं।

नीचे एक तालिका है जो जावास्क्रिप्ट निर्माण के अंदर देशी जावा वस्तुओं के व्यवहार का वर्णन करती है।

परीक्षण किए गए निर्माण:

  1. यदि क्लॉज में अभिव्यक्ति। JS एक्सप्रेशन में यदि क्लॉज़ को जावा के विपरीत बूलियन नहीं होना है। यह तथाकथित झूठे मूल्यों (अशक्त, अपरिभाषित, 0, खाली तार आदि) के लिए असत्य के रूप में मूल्यांकन किया जाता है
  2. प्रत्येक कथन के लिए नैशॉर्न के पास एक विशेष प्रकार का लूप है - प्रत्येक के लिए - जो अलग-अलग JS और Java ऑब्जेक्ट पर पुनरावृति कर सकता है।
  3. वस्तु का आकार प्राप्त करना। जेएस वस्तुओं में एक संपत्ति की लंबाई होती है, जो एक सरणी या एक स्ट्रिंग का आकार लौटाती है।

परिणाम:

प्रकार अगर प्रत्येक के लिए .length
जावा अशक्त असत्य कोई पुनरावृत्तियों नहीं अपवाद
जावा खाली स्ट्रिंग असत्य कोई पुनरावृत्तियों नहीं 0
जावा स्ट्रिंग सच स्ट्रिंग वर्णों पर Iterates स्ट्रिंग की लंबाई
जावा इंटेगर / लॉन्ग मान! = ० कोई पुनरावृत्तियों नहीं अपरिभाषित
जावा अरेलिस्ट सच तत्वों पर Iterates सूची की लंबाई
जावा हाशपॅ सच मानों में परिवर्तन शून्य
जावा हैशसेट सच वस्तुओं पर Iterates अपरिभाषित

Recommendatons:

  • यह सलाह दी जाती है if (some_string) यह जांचने के लिए कि क्या एक स्ट्रिंग अशक्त नहीं है और खाली नहीं है
  • for each सुरक्षित रूप से किसी भी संग्रह पर पुनरावृति करने के लिए इस्तेमाल किया जा सकता है, और यह अपवाद नहीं उठाता है अगर संग्रह iterable, शून्य या अपरिभाषित नहीं है
  • किसी ऑब्जेक्ट की लंबाई प्राप्त करने से पहले इसे अशक्त या अपरिभाषित के लिए जांचा जाना चाहिए (किसी विधि को कॉल करने या जावा ऑब्जेक्ट की संपत्ति प्राप्त करने के किसी भी प्रयास के लिए यह सच है)

स्क्रिप्ट से इंटरफ़ेस लागू करना

import java.io.FileReader;
import java.io.IOException;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class InterfaceImplementationExample {
    public static interface Pet {
        public void eat();
    }

    public static void main(String[] args) throws IOException {
        // Obtain an instance of JavaScript engine
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("nashorn");

        try {
            //evaluate a script
            /* pet.js */
            /*
                var Pet = Java.type("InterfaceImplementationExample.Pet");
                
                new Pet() {
                    eat: function() { print("eat"); }
                }            
            */
            
            Pet pet = (Pet) engine.eval(new FileReader("pet.js"));
            
            pet.eat();
        } catch (ScriptException ex) {
            ex.printStackTrace();
        }

        // Outcome:
        // 'eat' printed on standard output
    }
}

सेट करें और वैश्विक चर प्राप्त करें

// Obtain an instance of JavaScript engine
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("nashorn");

try {
    // Set value in the global name space of the engine
    engine.put("name","Nashorn");
    // Execute an hardcoded script
    engine.eval("var value='Hello '+name+'!';");
    // Get value
    String value=(String)engine.get("value");
    System.out.println(value);
} catch (ScriptException ex) {
    // This is the generic Exception subclass for the Scripting API
    ex.printStackTrace();
}

// Outcome:
// 'Hello Nashorn!' printed on standard output


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow