JavaFX Script

JavaFX Script
ParadigmaObjektově orientovaný, Deklarativní
AutorSun Microsystems
Typová kontrolasilná
OSmultiplatformní
LicenceGNU General Public License
Webjavafx.com

JavaFX Script, původně pojmenovaný F3 (Form Follows Function), je staticky typovaný deklarativní skriptovací jazyk, který je postaven na platformě Java. Jazyk byl vytvořen pro programování na platformě JavaFX. Kód JavaFX Scriptu je údajně až 5x úspornější než Javy. Syntaxe se podobá JavaScriptu. Jazyk poskytuje výhodu automatického data bindingu i plné podpory 2D grafiky, swingovských komponent a deklarativních animací.

Od verze JavaFX 2.0, JavaFX Script už není podporován. Oracle to vysvětluje tím, že můžeme použít ostatní skriptovací jazyky podporující JVM, jako Groovy nebo Scala.[1] Vývoj jazyka se přesunul do projektu Visage.[2]

Dějiny

JavaFX Script se dříve nazýval F3 pro funkci Form Follows. F3 byl primárně vyvinut Chrisem Oliverem, který se stal zaměstnancem Sunu díky akvizici SeeBeyond Technology Corporation v září 2005.

Jeho název byl změněn na JavaFX Script a stal se open source na JavaOne 2007.

JavaFX 1.0 byla vydána 4. prosince 2008. 10. září 2010 Oracle na JavaOne oznámil, že JavaFX Script bude ukončen, ačkoli JavaFX API bude zpřístupněno pro jiné jazyky pro Java Virtual Machine.[3]

27. září 2010 Stephen Chin oznámil Visage deklarativní jazyk uživatelského rozhraní založený na skriptu JavaFX s vylepšeními.[4]

V poslední době je původní programovací jazyk F3 nyní v procesu vzkříšení a vylepšení.

Vlastnosti

Staticky typovaný – To znamená, že datový typ každé proměnné, parametru i návratové hodnoty musí být znám již při překladu.

Deklarativní – Jazyk popisuje čeho se má dosáhnout, ne však jak. Jako výsledek je jednodušší syntaxe oproti Javě. Vzhledem k tomuto rysu je JavaFX Script vhodný pro tvorbu komplexních GUI aplikací.

Data binding – Jedná se o obecnou techniku spojující logiku a uživatelské rozhraní. Pokud jsou správně nastaveny vazby, změní-li data hodnotu, tak elementy vázané k těmto datům se automaticky změní, platí i opačná závislost. Například změna stavu jedné GUI komponenty synchronizovaně změní jinou komponentu či datový model bez potřeby jakéhokoliv listeneru, který se používá třeba v Javě.

Vývoj v JavaFX Scriptu ulehčuje podpora většiny používaných IDE (Netbeans, Eclipse). Syntaktické a další chyby jsou programátorovi předávány při překladu (tzv. compile-time errors). Koncovka zdrojových souborů v jazyce JavaFX Script je fx.

JavaFX kombinuje skriptovací jazyk JavaFX Script s množstvím vývojových nástrojů, grafických, audio a jiných knihoven médií včetně runtime prostředí. To vše zajišťuje sjednocený look and feel (vzhled a pocit) napříč různými zařízeními.

Základní syntaxe

Proměnné a primitivní typy

JavaFX Script poskytuje 4 primitivní typy: String, Boolean, Number a Integer. Proměnné jakéhokoliv typu je uvedena s klíčovým slovem var. Na rozdíl od Javy zde není třeba uvést datový typ při deklaraci, datový typ si interpret odvodí z jejího použití. Nicméně protože jde o staticky typový jazyk, nelze v průběhu životního cyklu datový typ měnit. Proměnné musí být pojmenovány v souladu s pravidly Javy.

Příklad:

var mojePromenna = "obsah promenne";
mojePromenna:String = "obsah promenne";

Operátory

JavaFX Script poskytuje de facto stejné operátory jako Java, plus některé unikátní navíc, jako např. reverse (opačná sekvence), indexof (index sekvence), as (přetypování), atd.

Funkce a operace

Pro potřeby funkcí definuje JavaFX Script klíčové slovo function. Funkce reprezentuje znovupoužitelný blok kódu. Může obsahovat deklarace proměnných i návratový typ, obsah funkce se zapisuje do složených závorek. Funkce se používají zejména pro účely matematické nebo jako gettery a settery tříd. V kontrastu s Javou je možné deklarovat funkce, ale i proměnné mimo třídy. Procedury v JavaFX Scriptu mají vyhrazeno klíčové slovo operation a mohou obsahovat libovolné množství příkazů.

Příklad:

operation vypisAhoj() {
    System.out.println("Ahoj"); 
}
function secti(a, b) { 			
    var c = a + b;				            
    return c;   					
}

Podmínky a cykly

Jsou obdobné jako v Javě.

Výraz rozsahu

JavaFX Script obsahuje novinku kterou je výraz, který umožňuje deklarovat sekvenci. Výraz používá dva integery oddělené notací „..“

Příklad:
[1..10 step 2] výraz zobrazuje sekvenci lichých čísel od 1 do 9

Výjimky

Jazyk podporuje vyhazování výjimek prostřednictvím výrazu throw a jejich zachycování bloky try, catch, finally. V podstatě je to stejné jako v Javě s výjimkou pořadí výrazů catch, které se mohou objevit v jakémkoliv pořadí, oproti Javě kde je nutné uvést nejdřív hierarchicky nižší podtřídy.

Třídy a objekty

Třídy se vytvářejí s použitím klíčového slova class následovaného platným identifikátorem. Tělo třídy je ve složených závorkách, atributy začínají klíčovým slovem atribute. Chování poskytované třídou je poskytováno funkcemi. Přístup k třídám je dán modifikátory public, private, protected. Jazyk obsahuje také konstrukci static pro tvorbu třídních funkcí, atributů, nabízí se tedy možnost definovat tzv. utility třídy (viz např. Math poskytující různé matematické funkce). Instance tříd se na rozdíl od Javy nevytváří pomocí operátoru new, ale pomocí objektových literálů.

Příklad: vytvoření objektu Adresa

def mojeAdresa = Adresa {
    ulice: "1 Main Street";
    mesto: "Santa Clara";
    stat: "CA";
    zip: "95050";
}

Dědičnost a vícenásobná dědičnost

Existuje možnost dědění tříd, kdy se zdědí atributy a funkcionalita nadtřídy. K tomu slouží klíčové slovo extends. Navíc JavaFX Script má speciální bloky zajišťující bezpečnou inicializaci a post inicializaci hierarchie (bloky init a postinit). Na rozdíl od Javy se zde vyskytuje vícenásobná dědičnost, kdy třída může dědit od více tříd.

Vytváření Java objektů

Operátor new má opodstatnění při vytváření Java instancí.

Příklad:

var date = new java.util.Date();

Data binding

Pro potřeby data bindingu obsahuje JavaFX Script výrazy let a bind. Klíčové slovo let označuje závislá data, bind nezávislá.

Příklad:

var text1 = "text1";
let text2 = bind text1;
System.out.println(text2);   // vypíše: text1
text1 = "nový text";
System.out.println(text2);   // vypíše: nový text

Ukázka jednoduché aplikace

Alternativa 1:

import javafx.ext.swing.*;
SwingFrame {
    title: "Hello world";
    width: 100;
    height: 50;
    content: Label {
        text: "Hello world";
    }
    visible: true;
}

Alternativa 2:

import javafx.ext.swing.*;
var myFrame:SwingFrame = new SwingFrame();
var myLabel:Label = new Label();
myLabel.text = "Hello World!";
myFrame.width = 200;
myFrame.height = 50;
myFrame.visible = true;
myFrame.content = myLabel;

Reference

  1. JavaFX Frequently Asked Questions [online]. oracle [cit. 2013-08-23]. Kapitola 8. Does JavaFX 2 support JavaFX Script?. Dostupné online. (anglicky) 
  2. visage – Declarative language for expressing user interfaces [online]. [cit. 2013-08-23]. Dostupné online. (anglicky) 
  3. Screenshot of Itunes Library - Archived Platform Itunes 2010. dx.doi.org [online]. [cit. 2022-04-04]. Dostupné online. 
  4. BOWEN, Judy; REEVES, Steve. Developing usability studies via formal models of UIs. In: Proceedings of the 2nd ACM SIGCHI symposium on Engineering interactive computing systems - EICS '10. New York, New York, USA: ACM Press, 2010. Dostupné online. DOI 10.1145/1822018.1822044.

Související články

Externí odkazy