// Введите help в строке приглашения rhino, чтобы получить дополнительную информацию
print(х); // Глобальная функция вывода в консоль
version(170); // Требует от Rhino задействовать особенности версии 1.7 );
load(filename.... // Загружает и выполняет один
или более файлов
// с программами на языке JavaScript
readFile(file); // Читает текстовый файл и возвращает его содержимое в виде строки
readUrl(url); // Читает текстовое содержимое по адресу URL и возвращает
// в виде строки
spawn(f); // Вызывает f или загружает и выполняет файл f
// в новом потоке выполнения
runCommand(cmd. // Запускает системную команду с нулем или более
[args...]) // аргументов командной строки
quit // Завершает работу Rhino
Как получить Rhino
Интерпретатор Rhino - свободное программное обеспечение, разработанное проектом Mozilla. Вы можете загрузить копию по адресуВерсия Rhino 1.7г2 реализует ECMAScript 3 и ряд расширений языка, описанных в главе 11. Rhino - достаточно зрелый программный продукт, и новые его версии появляются не так часто. На момент написания этих строк в репозитории с исходными текстами была доступна предварительная версия 1.7гЗ, включающая частичную реализацию стандарта ECMAScript 5.
Rhino распространяется в виде JAR-архива. Запускается он командой, как показано ниже:
java -jar rhino1_7R2/js.jar program.js
Если опустить параметр program.js, интерпретатор Rhino запустится в интерактивном режиме, который позволит вам опробовать простенькие программы и однострочные примеры.
Интерпретатор Rhino представляет пакеты и классы Java как объекты JavaScript:
// Глобальная переменная Packages определяет корень иерархии пакетов Java
Packages.any.package.name // Любой пакет из CLASSPATH
java.lang // Глобальная переменная java - краткая ссылка на Packages.java
javax.swing // A javax - краткая ссылка на Packages.javax
// Классы: доступны как свойства пакетов
var System = java.lang.System;
var JFrame = javax.swing.JFrame;
Поскольку пакеты и классы представлены как объекты JavaScript, их можно присваивать переменным, чтобы давать им более короткие имена. Но при желании их можно импортировать более формальным способом:
var ArrayList = java.util.ArrayList; //
Создать краткое имя для класса
importClass(java.util.HashMap); // Аналог: var HashMap=java.util.HashMap
// Импорт пакета (отложенный) с помощью importPackage.
// Не следует импортировать java.lang: слишком много конфликтов имен
// с глобальными переменными JavaScript.
importPackage(java.util);
importPackage(java.net);
// Другой прием: передать произвольное количество классов и пакетов функции
// JavaImporter и использовать возвращаемый объект с инструкцией with
var guipkgs = JavaImporter(java.awt, java.awt.event, Packages.javax.swing);
with (guipkgs) {
/* Здесь определены такие классы, как Font, ActionListener и JFrame */
}
С помощью ключевого слова
new
можно создавать экземпляры классов языка Java, как если бы это были классы JavaScript:
// Объекты: создание из классов Java с помощью ключевого слова new
var f = new java. io. File("tmp/test''); // Этот объект используется ниже
var out = new java.io.FileWriter(f);
Интерпретатор Rhino позволяет использовать JavaScript-оператор instanceof для работы с объектами и классами на языке Java:
f instanceof java.io.File // => true
out instanceof java.io.Reader // => false: объект Writer, а не Reader
out instanceof java.io.Closeable // => true: Writer реализует Closeable
Как видно выше в примерах создания объектов экземпляров, интерпретатор Rhino позволяет передавать значения конструкторам Java и присваивать возвращаемые ими значения переменным JavaScript. (Обратите внимание на неявное преобразование типов, выполняемое интерпретатором Rhino в этом примере: JavaScript-строка "/tmp/test" автоматически преобразуется в значение типа java.lang.String.) Методы Java очень похожи на конструкторы Java, и Rhino позволяет программам на языке JavaScript вызывать методы на языке Java:
// Статические методы на языке Java действуют подобно функциям JavaScript
java.lang.System.getProperty("java.version") // Вернет версию Java
var isDigit = java.lang.Character.isDigit; // Присвоит статич. метод переменной
isDigit("t") // => true: Арабская цифра 2
// Вызвать методы экземпляра объектов f и out на языке Java, созданных выше