Oct 12, 2007

Элементы функционального программирования на JavaFX

Похоже в JavaFX проявляется много новых (для Java платформы) особенностей. Например элементы функционального программирования. JavaFX поддерживает описание «чистых» функций с помощью ключевого слова function. Такая функция может содержать только последовательность определений переменных и возврат значения. Предполагается, что такая функция только вычисляет некий результат и не имеет никакого побочного действия (в отличие от процедур).
Кроме этого на JavaFX легко и красиво реализуются так называемые замыкания. Замыкание — это особый вид функции. Она определена в теле другой функции и создаётся каждый раз во время её выполнения. В записи это выглядит как функция, находящаяся целиком в теле другой функции. При этом вложенная внутренняя функция содержит ссылки на локальные переменные внешней функции. Каждый раз при выполнении внешней функции происходит создание нового экземпляра внутренней функции, с новыми ссылками на переменные внешней функции. Вот простой пример такой функции:
function getF(b:Boolean) {
    return function (n:Integer) = if b then n-1 else n+1;
}

var fInc = getF(true);
var fDec = getF(false);

var a = 10;
var b = 10;

p(fInc(a));
p(fDec(b)); 
Результатом работы такого скрипта будет:
compile thread: Thread[AWT-EventQueue-0,6,main]
compile 0.031
9
11

No comments: