Oct 21, 2007

Planshet

В качестве безвозмездной помощи своему текущему проекту, сделал небольшую презентационную программку. Основная ее задача - отображать различную полезную информацию на "большом" мониторе так, чтобы вся команда могла это видеть. В качестве языка для данной разработки был выбран скрипт JavaFX. Так как сделать хотелось быстро, а особых требований к надежности или ресурсоемкости не было. В проекте присутствуют следующие классы:
  • ChangeImageSlide – слайд, который показывает все картинки из папки
  • ImageSlide – слайд, который показывает одну фиксированную картинку
  • Planshet – основная логика программы
  • Release – показывает заголовок и дату доставки
  • Scenario – класс, содержит сценарий презентации
  • StatusSlide – слайд, отображает статус автоматической сборки (CruiseControl), через rss.
Скачать исходный код можно на сайте: http://code.google.com/p/planshet/

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