Introduction à JavaFX Script

Introduction

Le JavaFX Script est un langage déclaratif basé sur la platforme Java. Il permet de concevoir très simplement des applications riches. Une de ses forces vient surtout de son efficacité dans la conception d'interface graphique. Les développeurs Swing pourront concevoir leurs interfaces graphiques grâce à JavaFX tout en gardant du code Java pour le traitement.

Un premier exemple

class HelloWorldModel {
       attribute saying: String;
}

var model = HelloWorldModel {
       saying: "Hello World"
};

var win = Frame {
       title: bind "{model.saying} JavaFX"
       width: 200
       content: TextField {
              value: bind model.saying
       }
       visible: true
};

Dans cet exemple, nous avons créé une classe avec un attribut de type String. L'instanciation d'un objet de type HelloWorldModel est faite juste en dessous. Nous voyons donc qu'il est possible de faire de la programmation orientée objet avec JavaFX Script.

La dernière partie du code montre deux choses. D'une part, la simplicité de créer une fenêtre dotée d'un libellé. Ceci s'écrit en quelques lignes (environ une dizaine), en Java avec Swing, cela nous aurait value le double de code.
D'autre part, la ligne title: bind "{model.saying} JavaFX" permet d'écrire un simple listener. En effet, grâce au mot clé bind, le titre de la fenêtre évolue selon la valeur de l'attribut de l'objet model.

Le typage

JavaFX Script est typé statiquement. Plus précisément, le type d'une variable (d'un objet) ne peut évoluer au cours de l'exécution de l'application. Il est définit à la première affectation.
Par exemple :

var myVar = "Hello";
myVar = 123; //erreur

Ces deux lignes sont invalides en JavaFX Script. Par contre, ceci est recevable (mais fortement déconseillé) dans des langages comme PHP.

JavaFX Script comporte plusieurs types natifs :

Par exemple :

var s :String = "World";
s.toUpperCase(); // renvoie "WORLD";

var x :Number = 3.50;
x.intValue(); // renvoie 1
(3.50).intValue(); // renvoie 3

var isTrue = true;
isTrue instanceof Boolean; // renvoie true

Les tableaux

La manipulation de tableau est beaucoup plus souple en JavaFX Script qu'en Java. La preuve par l'exemple :

var nums = [1,2,3,4];
insert 5 into nums; //renvoie [1,2,3,4,5]
insert 0 as first into nums; //renvoie [0,1,2,3,4,5]
insert [6,7] as last into nums; //renvoie [0,1,2,3,4,5,6,7]

var workingDays = ["Mon","Tue","Wed","Thur","Fri"];
var weekDays = [workingDays, ["Sat","Sun"]];

On remarque bien que la manipulation de tableau est assez intuitive et efficace.

JavaFX Script offre aussi la possibilité d'exécuter des requêtes au format SQl sur des tableaux :

var answer:Integer = select x from x in [1..10] where (x%2 == 0); // renvoie [2,4,6,8,10]

Fonctions et Opérations

JavaFX différencie les blocs qui feront simplement une opération puis renvoyer un résultat et les blocs qui font un traitement plus poussé.
Voici un exemple plus clair

operation substring(s:String, n:Number): String {
       try {
              return s.substring(n);
       }
       catch (e:StringIndexOutOfBoundsException){
              throw "sorry, index out of bounds";
       }
}

Ici nous n'effectuons qu'une opération simple sur une chaine.

function myFunction(a,b) {
       var x = a + b;
       var y = a - b;
       return x + y;
}

la fonction utilisée ici comporte plusieurs opérations.

Conclusion

Le JavaFX Script est un langage très souple et efficace. les mécanismes de manipulation des tableaux en sont la preuve. Le plus frappant c'est la quantité de chose que l'on peut faire en une ligne : inspiré de Perl?

Le JavaFX Script est aussi un langage objet.