Статьи

Получение «Plutoed» — манипулирование последовательностями в скомпилированном скрипте JavaFX

Последовательности (массивы) являются основной структурой данных в JavaFX Script. Последовательности полезны для хранения массивов базовых и объектных типов данных, а также для предоставления структуры, к которой могут быть привязаны компоненты пользовательского интерфейса.
Например, элементы в ListBox могут быть связаны с последовательностью объектов String . В результате, если данные в последовательности изменятся, элементы ListBox также изменятся. Последовательности также предоставляют очень мощные возможности для понимания и манипулирования списками, некоторые из которых продемонстрированы в примере программы ниже. Этот пример взят из моей книги по сценариям JavaFX после преобразования в скомпилированный синтаксис JavaFX Script. Он использует планеты, чтобы помочь мне объяснить некоторые концепции, связанные с последовательностями, и прощается с Плутоном как с планетой.

Плутон

Скомпилируйте и запустите этот пример, и вы должны увидеть результат, который появляется после примера.

/*
* SequenceExample.fx - An example creating a sequence literal and using
* some sequence related features of compiled JavaFX
* Script to work with it.
*
* Developed 2008 by James L. Weaver (jim.weaver at lat-inc.com)
*/
import java.lang.System;

// Literally define the planets sequence, leaving out Jupiter and Uranus
var planets:String[] = ["Mercury", "Venus", "Earth", "Mars",
"Saturn", "Neptune"];

// Print out the third element in the array, which is element 2
// since arrays are zero-based.
System.out.println("The third planet is:{planets[2]}");

// Print out all planets by iterating over the planets sequence
for (planet in planets) {
System.out.println("{planet} is a planet in our solar system");
}
System.out.println();

// Insert Uranus before Neptune (which is currently in position 5)
System.out.println("Inserting Uranus before Neptune");
insert "Uranus" before planets[5];

// Insert Jupiter after Mars (which is currently in position 3)
System.out.println("Inserting Jupiter after Mars");
insert "Jupiter" after planets[3];

// Add Pluto to the end of the sequence.
System.out.println("Inserting Pluto as the last planet");
insert "Pluto" into planets;

// Add Sun to the beginning of the sequence
System.out.println("Inserting the Sun into the beginning");
insert "Sun" before planets[0];

// Print out all planets by iterating over a sequence that is the same
// size as the planets sequence, and reference the corresponding element
// in the planets array.
for (i in [0.. sizeof planets - 1]) {
System.out.println("{planets[i]} is a planet in our solar system");
}
System.out.println();

// Delete the Sun (which is currently in position 0)
System.out.println("Deleting the Sun in position 0");
delete planets[0];

// Query for the indexof Pluto and delete it
System.out.println("Querying for the indexof Pluto");
var indices =
for (planet in planets
where planet == "Pluto") {
delete planets[indexof planet];
indexof planet;
}
System.out.println("Pluto was in position {indices} and has been deleted");

// Print all of the planets in reverse order
System.out.println(reverse planets);
System.out.println();

// Use for to query all of the planets with more than 5 characters
var somePlanets:String[];
somePlanets =
for (planet in planets
where planet.length() > 5)
"{planet},";
System.out.println("The {sizeof somePlanets} planets with more than 5 characters are:
{somePlanets}");

// Use for to query for all of the planets that begin with
// the letter "N" or later
somePlanets =
for (planet in planets
where planet.compareTo("N") > 0)
"{planet},";
System.out.println("The {sizeof somePlanets} planets in the second half of the alphabet are:
{somePlanets}");

Выход, после того, как наша самая маленькая планета становится Плутоном ;

The third planet is:Earth
Mercury is a planet in our solar system
Venus is a planet in our solar system
Earth is a planet in our solar system
Mars is a planet in our solar system
Saturn is a planet in our solar system
Neptune is a planet in our solar system

Inserting Uranus before Neptune
Inserting Jupiter after Mars
Inserting Pluto as the last planet
Inserting the Sun into the beginning
Sun is a planet in our solar system
Mercury is a planet in our solar system
Venus is a planet in our solar system
Earth is a planet in our solar system
Mars is a planet in our solar system
Jupiter is a planet in our solar system
Saturn is a planet in our solar system
Uranus is a planet in our solar system
Neptune is a planet in our solar system
Pluto is a planet in our solar system

Deleting the Sun in position 0
Querying for the indexof Pluto
Pluto was in position 8 and has been deleted
[ Neptune, Uranus, Saturn, Jupiter, Mars, Earth, Venus, Mercury ]

The 5 planets with more than 5 characters are:
Mercury,Jupiter,Saturn,Uranus,Neptune,
The 4 planets in the second half of the alphabet are:
Venus,Saturn,Uranus,Neptune,

Последовательность Литералы

Я использовал буквальный синтаксис последовательности для буквального определения последовательности уже несколько раз в блоге «Помогая вам стать JavaFXpert» . Например, литералы последовательности используются в посте « Простой пример компиляции JavaFX Script» . Этот пост, кстати, был бы хорошим местом, чтобы освежить себя (или начать разработку) скомпилированных программ JavaFX Script.

Первая исполняемая строка в примере программы (см. Следующий отрывок) буквально определяет последовательность и присваивает ее переменной, которая явно вводится как последовательность экземпляров String. Обратите внимание, что : String [] не требуется, поскольку JavaFX неявно вводит переменную на основе выражения в правой части оператора присваивания (=).

// Literally define the planets sequence, leaving out Jupiter and Uranus
var planets:String[] = ["Mercury", "Venus", "Earth", "Mars",
"Saturn", "Neptune"];

Доступ к определенному элементу последовательности

Как показано в следующем фрагменте примера программы, для прямого доступа к элементу последовательности поместите нулевой индекс элемента в квадратных скобках после имени последовательности:

// Print out the third element in the array, which is element 2
// since arrays are zero-based.
System.out.println("The third planet is:{planets[2]}");

Итерация по последовательности

Программа-пример использует оператор for для итерации последовательности несколькими способами, показанными ниже:

// Print out all planets by iterating over the planets sequence
for (planet in planets) {
System.out.println("{planet} is a planet in our solar system");
}


// Print out all planets by iterating over a sequence that is the same
// size as the planets sequence, and reference the corresponding element
// in the planets array.
for (i in [0.. sizeof planets - 1]) {
System.out.println("{planets[i]} is a planet in our solar system");
}

Обратите внимание на использование оператора sizeof для определения количества элементов в последовательности.

Вставка элементов последовательности

Чтобы вставить элемент в последовательность, используйте оператор вставки, как показано в следующем фрагменте:

// Insert Uranus before Neptune (which is currently in position 5)
System.out.println("Inserting Uranus before Neptune");
insert "Uranus" before planets[5];

// Insert Jupiter after Mars (which is currently in position 3)
System.out.println("Inserting Jupiter after Mars");
insert "Jupiter" after planets[3];

// Add Pluto to the end of the sequence.
System.out.println("Inserting Pluto as the last planet");
insert "Pluto" into planets;

// Add Sun to the beginning of the sequence
System.out.println("Inserting the Sun into the beginning");
insert "Sun" before planets[0];

Существует несколько вариантов оператора вставки, как показано в предыдущих выдержках:

  • вставить элемент в последовательность: это было использовано для вставки Плутона. Эта форма оператора вставки добавляет элемент в конец последовательности.
  • вставить элемент перед последовательностью [индекс]: это использовалось для вставки Урана. Эта форма оператора вставки вставляет элемент перед указанным элементом, который уже находится в последовательности.
  • вставить элемент после последовательности [индекс]: это использовалось для вставки Юпитера. Эта форма оператора вставки вставляет элемент после указанного элемента, который уже находится в последовательности.

Запрос последовательности

Вы можете запросить последовательность, чтобы получить подмножество ее элементов. Программа-пример показывает примеры for, который является оператором понимания списка. Вот некоторые выдержки:

var somePlanets:String[];
somePlanets =
for (planet in planets
where planet.length() > 5)
"{planet},";
System.out.println("The {sizeof somePlanets} planets with more than 5 characters are:
{somePlanets}");

Этот запрос выбирает все элементы в последовательности планет, которые состоят из более чем пяти символов. Результат хранится в последовательности, указанной в переменной somePlanets . Неявно создается переменная с именем planet , которая содержит ссылку на каждый элемент, соответствующий запросу. Как вы можете видеть, я решил объединить каждый элемент, который возвращается с запятой, прежде чем помещать его в массив somePlanets .

Ниже показан еще один пример запроса for, который возвращает последовательность чисел, которые являются индексами для каждого элемента, соответствующего запросу. В процессе он удаляет все элементы, которые соответствуют критерию. Скомпилированный JavaFX Script — это язык выражений, а последним выражением в блоке (в данном случае indexof planets ) является значение блока. Для получения дополнительной информации, проверьте для выражения и блокировать выражения выражения .

На слегка связанной ноте показано следующее утверждение, которое печатает все элементы в последовательности планет в обратном порядке:

System.out.println(reverse planets);

Удаление элементов последовательности

Чтобы удалить элемент из последовательности, вы можете использовать оператор delete, как показано в следующем фрагменте:

delete planets[0];

Это удаляет элемент 0 из последовательности планет . Другой способ удаления элемента (но не показанный в примере программы) — указать значение элемента. Например, если вы хотите удалить Марс , вы можете использовать следующее утверждение:

delete "Mars" from planets 

Обнуление последовательности

Чтобы последовательность не имела элементов, используйте буквенное обозначение последовательности, в квадратных скобках которого ничего нет. Например, если вы хотите обнулить последовательность планет, вы можете использовать следующий оператор:

planets = [];

Как всегда, если у вас есть какие-либо вопросы, пожалуйста, оставьте комментарий.

С уважением,
Джим Уивер
JavaFX Script: динамические сценарии Java для многофункциональных интернет-приложений и приложений на стороне клиента.
Немедленная загрузка электронных книг (PDF) доступна на сайте книги Apress.