Введение в JavaFX – Модель шахмат - Точки интереса

ОГЛАВЛЕНИЕ

Точки интереса

JavaFX - это очень молодой язык программирования и определенно  воспринимается как бета-версия продукта. Раньше мы никогда не находили столько ошибок в языке программирования, и при этом использовали его всего лишь в течение месяца для написания одного приложения. Нам удалось найти способы обойти некоторые ошибки, но не все из них. Мы так и не смогли изменить иконку для приложения.

Язык подает немалые надежды,  в числе которых и то, что эти ошибки будут устранены, когда продукт разовьется до серьезного уровня. Нам нравиться функция связывания, и создавать GUI (Графический интерфейс пользователя) нам  было намного легче по сравнению с первым опытом создания GUI в Java. Java – это очень развитый язык (он существует почти десятилетие), и для Java было написано очень много кода. Было бы хорошо иметь возможность создавать экземпляр этой большой библиотеки существующего кода Java непосредственно из кода JavaFX.

Если вы решите заниматься программированием на JavaFX, учтите, что много примеров кода на JavaFX, найденных  нами в Google, не работают в последней версии JavaFX (v. 1.1). JavaFX значительно изменился с середины 2008 года. Многие статьи, опубликованные до середины 2008 года, не работают в версии 1.1, при этом большая часть кода, опубликованная в конце 2008-го и в 2009 годах, работает прекрасно.

Начало работы

Давайте начнем с простой программы Hello World (здравствуй мир) и постепенно приступим к созданию шахматной программы. Как вы вскоре увидите, фактически программа Hello World научит вас многому. Здесь приводится код для Hello World на JavaFX:

Программа Hello World, написанная на JavaFX

println("Hello World!");

Это всего лишь одна строка кода. Простая программа, состоящая из одной строки, многому нас научит. Эквивалентная программа на Java выглядит так:

Программа Hello World, написанная на Java

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

Отсутствие необходимости в main или классе

Чему данный пример может научить? Если вы раньше работали с Java, то вы привыкли помещать все в классы. Потому что в Java никакой код не может существовать вне класса. Как видите, в JavaFX это не так.

В Java требуется создавать метод main, который объявляется как public static void, принимающий единственный параметр String[] args (аргументы командной строки). В JavaFX это не требуется. Вы просто помещаете инструкции в файл сценария JavaFX и запускаете файл. Метод main не требуется.

Если вам нужно получить доступ к аргументам командной строки, вы можете сделать это с помощью специальной функции run. run – это специальная функция, служащая главной точкой входа в сценарий. Функция run выглядит примерно так:

"run" – это вспомогательная функция, служащая главной точкой входа в сценарий JavaFX

function run(args: String[]) {
    println("{args[0]}");
}

Эта программа просто выводит на экран первый аргумент командной строки. Удивительно, но она выполняется без ошибки: она просто выводит новую строку, если не было передано ни одного аргумента командной строки.

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

Давайте продолжим обсуждение функции run. Она принимает единственный параметр, являющийся последовательностью объектов типа String и называющийся args. Последовательности в JavaFX выглядят как массивы в Java. Они объявляются с помощью помещения символа квадратных скобок []после типа. Например, String[] объявляет последовательность Strings. Последовательности неизменяемы, так же, как и массивы. Однако можно написать код, вставляющий элементы в последовательность и удаляющий элементы из последовательности, примерно так:

Вы можете добавлять и удалять элементы из последовательностей

var colors = ["Red"];
insert "Blue" into colors;
insert "Green" after colors[1];
insert "White" before colors[0];
delete "White" from colors;
delete colors[0];
println("{sizeof colors}");

Поскольку последовательности неизменяемы, Javafx создает новую последовательность, когда элементы вставляются в или удаляются из последовательности. Таким же образом работают Strings в Java. Вы можете изменять String в коде, но поскольку Strings неизменяемы, среда выполнения создает новый объект String,String. если вы изменяете объект

JavaFX имеет несколько способов создания числовых последовательностей путем использования специального (...) кода. Следующий код показывает несколько примеров создания числовых последовательностей:

Примеры создания числовых последовательностей в JavaFX

def seq1 = [1..10];  // seq1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def seq2 = [1..10 step 2];  // seq2 = [1, 3, 5, 7, 9]
def seq3 = [10..1 step -1];  // seq3 = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

Цикл for в JavaFX работает только с последовательностями. Он имеет вид for(имя(  )Переменной in. Следующий код показывает, как преобразовать простой цикл Java for в цикл JavaFX: последовательность) { ... }

Различия между циклами "for" в Java и JavaFX

// цикл for Java
for(int i=0; i<10; i++) {
    System.out.println("Hello World!");
}

// эквивалентный цикл for JavaFX
for(i in [0..9]) {
    println("Hello World!");
}

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

Организация цикла по числовой последовательности и использование ключевого слова "indexof"

for(i in [100..110 step2]) {
    println("{indexof i} = {i}");
}

// Вывод
0 = 100
1 = 102
2 = 104
3 = 106
4 = 108
5 = 110

Переменные и параметры

Можно увидеть два различных вида объявления переменных/параметров в коде JavaFX. Первый вид имеет параметр args в функции run (объявленный как тип String[]) и второй вид был у переменной colors в примере последовательности (нет объявления типа). Все переменные и параметры должны быть объявлены в JavaFX, однако указывать тип необязательно. Если тип переменной не объявляется, среда выполнения определяет его на основе типа объекта, назначенного этой переменной. Многие предпочитают указывать тип переменной. Это можно сделать, поместив символ : после имени и вслед за двоеточием указать тип переменной. Например, так можно назначить тип переменной colors:

Объявлять тип переменной необязательно

var colors: String[] = ["Red"];

Параметры функций просто объявляются с именем переменной и необязательным типом. Переменные объявляются как var или как def. Различие между двумя видами объявления заключается в том, что vardef нельзя изменить. Переменная, объявленная как def, сходна с переменной, объявленной как final в Java. Ниже приводится правильный код: можно изменить, а

Переменные, объявленные как "def", можно изменить

// правильный код
var i = 7;
i = 2;

Однако этот код не будет компилироваться:

Переменные, объявленные как "def", нельзя изменить

// неправильный код, не будет компилироваться
def i = 7;
i = 2;

Параметры функций не могут содержать ключевые слова var или def. Все параметры функций рассматриваются как defs, и поэтому их нельзя изменить.