Académique Documents
Professionnel Documents
Culture Documents
Le langage de programmation JavaFX Script vous permet de crer des applications ayant des interfaces utilisateurs trs attrayants. Ce tutoriel prsente les concepts de base et la syntaxe du langage utilis par JavaFX Script. Une fois que vous aurez maitris les bases, vous pourrez apprendre comment Concevoir des Applications GUI Avec JavaFX.
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
I - Quelques mots du traducteur................................................................................................................................. 4 II - Pour commencer....................................................................................................................................................4 I-A - Tlchargement et installation du JDK..........................................................................................................4 I-B - Choix d'un Environnement de dveloppement.............................................................................................. 4 I-C - Tlcharger et installer le compilateur JavaFX et le runtime JavaFX........................................................... 4 III - L'criture de Scripts..............................................................................................................................................5 II-A - criture d'une simple calculatrice................................................................................................................. 5 II-B - Dclaration des variables de script.............................................................................................................. 6 II-C - Dfinitions et invocation de fonctions de Script........................................................................................... 7 II-D - Passer des arguments aux fonctions........................................................................................................... 7 II-E - Retourner des valeurs d'une fonction de script............................................................................................ 8 II-F - Accder aux arguments de ligne de commande.......................................................................................... 8 IV - L'Utilsation d'objets............................................................................................................................................. 10 III-A - Qu'est ce qu'un objet ?.............................................................................................................................. 10 III-B - Dclaration d'un littral d'objet...................................................................................................................10 III-C - Syntaxe d'un littral d'objet........................................................................................................................11 III-D - Invocation des fonctions d'instance........................................................................................................... 12 V - Types de donnes............................................................................................................................................... 13 IV-A - String..........................................................................................................................................................13 IV-B - Les types Number et Integer.....................................................................................................................14 IV-C - Boolean......................................................................................................................................................14 IV-D - Duration..................................................................................................................................................... 14 IV-E - Void............................................................................................................................................................ 14 IV-F - null..............................................................................................................................................................15 VI - Squences.......................................................................................................................................................... 15 V-A - La cration de squence............................................................................................................................15 V-B - Cration de Squences avec des expressions boolennes...................................................................... 16 V-C - Accder aux lments d'une squence..................................................................................................... 17 V-D - Insertion d'lments dans une squence...................................................................................................17 V-E - Suppression d'lments d'une squence................................................................................................... 18 V-F - Inverser les lments d'une Squence...................................................................................................... 18 V-G - Comparaison des Squences.................................................................................................................... 19 V-H - L'utilisation de bouts de squences........................................................................................................... 19 V-H-1 - seq[a..b]..............................................................................................................................................19 V-H-2 - seq[a..<b]........................................................................................................................................... 20 V-H-3 - seq[a..]................................................................................................................................................20 V-H-4 - seq[a..<]............................................................................................................................................. 20 VII - Les oprateurs...................................................................................................................................................20 VI-A - Oprateurs d'Assignation...........................................................................................................................20 VI-B - Les oprateurs arithmtiques.................................................................................................................... 20 VI-C - Les oprateurs unaires..............................................................................................................................21 VI-D - Les oprateurs d'galit et de relation......................................................................................................22 VI-E - Les oprateurs conditionnels.....................................................................................................................23 VI-F - L'oprateur de comparaison de type......................................................................................................... 23 VIII - Expressions.......................................................................................................................................................24 VII-A - Les blocs...................................................................................................................................................24 VII-B - L'expression if........................................................................................................................................... 24 VII-C - Les expression de sries......................................................................................................................... 25 VII-D - L'expression for........................................................................................................................................ 26 VII-E - L'expression while.....................................................................................................................................27 VII-F - Les expression break et continue.............................................................................................................28 VII-G - Les expressions try, catch, throw et finally.............................................................................................. 29 IX - Data Binding et Triggers.....................................................................................................................................30 VIII-A - Binding Overview..................................................................................................................................... 31 VIII-B - Binding et Objets..................................................................................................................................... 31 VIII-C - Binding et les Fonctions.......................................................................................................................... 32 VIII-D - Binding et les Squences....................................................................................................................... 34 VIII-E - Les Triggers replace................................................................................................................................ 35
-2Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
X - Ecrire vos propres classes.................................................................................................................................. 36 IX-A - L'exemple Client........................................................................................................................................ 36 IX-B - Hriter d'autres classes............................................................................................................................. 37 XI - Les Packages..................................................................................................................................................... 38 X-A - Etape 1: Choisir un nom de package........................................................................................................ 38 X-B - Etape 2 : Crer un rpertoire..................................................................................................................... 38 X-C - Etape 3 : Ajouter la dclaration de Package............................................................................................. 39 X-D - Etape 4 : Ajouter les modificateurs d'accs............................................................................................... 39 X-E - Etapte 5 : Compiler le Code Source.......................................................................................................... 39 X-F - Etape 6 : Utiliser la Classe......................................................................................................................... 39 XII - Les modificateurs d'accs................................................................................................................................. 40 XI-A - L'accs par dfaut..................................................................................................................................... 40 XI-B - Le modificateur d'accs package.............................................................................................................. 40 XI-C - Le modifcateur d'accs protected............................................................................................................. 41 XI-D - Le modificateur d'accs public.................................................................................................................. 42 XI-E - Le modificateur d'accs public-read.......................................................................................................... 42 XIII - Le modificateur d'accs public-init................................................................................................................... 43
-3Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
L'EDI support officiellement pour le langage de dveloppement JavaFX Script est l'EDI NetBeans 6.5. Le site web de l'EDI NetBeans fournit les instructions pour tlcharger installer, et configurer l'EDI.
-4Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
Finallement, si vous dsirez vraiment vous investir, vous pouvez rejoindre le projet OpenJFX Compiler, crez votre propre copie du compilateur et de compiler vous-mme depuis les codes source du compilateur. (si vous choisissez galement cette approche, vous aurez besoin de la version 1.7.0 de Apache Ant, ainsi que d'une version rcente de SubVersion, version 1.5.4 au moment de l'criture de cet article). Pour plus d'information sur la compilation du compilateur depuis ses sources, voir le wiki de PlanetJFX.
Le langage de programmation JavaFX Script est un langage compil, ce qui signifie que tout code source que vous crivez doit d'abord tre converti en Java ByteCode -- le langage de la Machine Virtuelle Java -- avant de l'excuter sur votre systme. La commande suivante va compiler le script de la calculatrice:
-5Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog) javafxc calculatrice.fx
Aprs la compilation, vous noterez que le byte code Java correspondant aura t gnr et plac dans un fichier nomm calculatrice.class. Vous noterez qu'un autre fichier, calculatrice$Intf.class est galement cr. Ce fichier est ncessaire pour excuter l'application -- Vous pouvez l'ignorer, mais pas le supprimer. Vous pouvez maintenant excuter la classe compile (dans la Machine Virtuelle Java) avec la commande suivante :
javafx calculatrice
Le rsultat sera
100 100 100 100 + * / 2 2 2 2 = = = = 102 98 200 50
Cette application peut sembler petite, mais elle vous familiarise avec des concepts importants du langage de programmation. Apprendre ces concepts est votre passage oblig pour maitriser le langage de programmation JavaFX Script. Le langage de programmatin JavaFX Script n'est pas difficile apprendre. Mais vu que c'est votre premire confrontation ce langage, nous allons dtailler les nouveaux concepts de faon suffisante pour que vous puissiez prendre en main l'application. Notre but, dans cette approche, est la clart. Nous discuterons de faon plus dtaille dans les leons suivantes si ncessaire.
Les variables de script sont dclares l'aide des mots-cls def ou var. La diffrence entre les deux est que les variables var peuvent recevoir de nouvelles valeur durant leur cycle de vie, alors que les variables def restent constantes une fois initialises. Nous avons assign des valeurs nombreUn et nombreDeux, mais n'avons pas initialis la variable resultat parce que cette variable va accueillir le rsultat de nos calculs. Les noms de variables consistent en gnral de lettres et de chiffres, bien qu'ils ne peuvent commencer par des chiffres. La convention est d'utiliser des lettres en minuscule; Si le nom est compos de plus d'un mot, la premire lettre des mots suivants sera mise en majuscule, comme illustr dans l'exemple prcdent. Vous aurez galement remarqu que nous n'avons rien fait de spcial pour indiquer que ces variables allaient accueillir des nombres ( opposer aux chaines de caractres ou tout autre type de donnes). Le compilateur est suffisamment malin pour connaitre vos intentions en se basant sur le context dans lequel la variable est utilise. Cela s'appelle l'infrence de type. L'infrence de type facilite un petit peu votre travail de programmeur puisqu'il vous libre de cette corve de devoir toujours dfinir les types de donnes que pourra accueillir votre variable.
-6Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
Une fonction est un bloc de code excutable qui effectue une tche particulire. Dans notre exemple, chaque fonction effectue une opration mathmatique et affiche le rsultat. L'organisation du code en fonction est une pratique courante qui simplifie la lecture de votre programme, son utilisation et son dbogage. Le corps d'une fonction sera indent, permettant de voir plus facilement o commence et termine une fonction. Le code d'une fonction ne s'excute que lorsque la fonction est explicitement invoque. Cela permet d'excuter une fonction depuis n'importe quel endroit de votre script. Cela importe peu que votre invocation de fonction soit place avant ou aprs la dfinition de la fonction. Dans notre exemple, nous invoquons les fonctions avant qu'elles ne soient dfinies. Les invocations de fonctions sont les suivantes :
add(); subtract(); multiply(); divide();
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog) } function soustraction(argumentUn: Integer, argumentDeux: Integer) { resultat = argumentUn - argumentDeux; println("{argumentUn} - {argumentDeux} = {resultat}"); } function multiplication(argumentUn: Integer, argumentDeux: Integer) { resultat = argumentUn * argumentDeux; println("{argumentUn} * {argumentDeux} = {resultat}"); } function division(argumentUn: Integer, argumentDeux: Integer) { resultat = argumentUn / argumentDeux; println("{argumentUn} / {argumentDeux} = {resultat}"); }
Dans cette version, nous avons supprim les variables nombreUn et nombreDeux puisqu'elles ne sont plus ncessaires. Au lieu de cela, nous avons modifi les dfinitions de fonction pour qu'elles acceptent que deux nombres soient passs en argument. Chaque argument spcifie son nom, suivi de deux points (:), suivi de son type. Lorsqu'une fonction accepte plusieurs arguments, ils sont spars par une virgule.
Si aucune valeur de retour n'est spcifie, la fonction retourne Void par dfaut.
-8Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog) function run(args : String[]) { // Convertion de Strings en Entiers def nombreUn = java.lang.Integer.parseInt(args[0]); def nombreDeux = java.lang.Integer.parseInt(args[1]); // Invocation des Fonctions addition(nombreUn,nombreDeux); soustraction(nombreUn,nombreDeux); mutiplication(nombreUn,nombreDeux); division(nombreUn,nombreDeux);
function addition(argumentUn: Integer, argumentDeux: Integer) { resultat = argumentUn + argumentDeux; println("{argumentUn} + {argumentDeux} = {resultat}"); } function soustraction(argumentUn: Integer, argumentDeux: Integer) { resultat = argumentUn - argumentDeux; println("{argumentUn} - {argumentDeux} = {resultat}"); } function multiplication(argumentUn: Integer, argumentDeux: Integer) { resultat = argumentUn * argumentDeux; println("{argumentUn} * {argumentDeux} = {resultat}"); } function division(argumentUn: Integer, argumentDeux: Integer) { resultat = argumentUn / argumentDeux; println("{argumentUn} / {argumentDeux} = {resultat}"); }
Cette modification introduit quelques nouveaux concepts, dont l'ajout de la fonction run(). Contrairement nos autres fonctions, la fonction run() est une fonction spciale qui sert de point d'entre principal au Script. La fonction run() stoque tous les arguments en ligne de commande dans args, qui est une squence d'objets String ( Les squences sont des listes ordonnes d'objets, similaires aux tableaux dans d'autres langages de programmation. Elles sont expliques en dtails dans Expressions et Oprations). Pour excuter ce script, l'utilisateur doit maintenant spcifier le premier et second paramtre l'excution :
javafx calculatrice 100 50
Dans les versions prcdentes du script calculatrice, nous n'avions pas spcifi de fonction run(). Nous avons juste tap le code excuter au niveau du script et il s'est excut comme espr. Dans ces cas-l, le compilateur gnre silencieusement une fonction run() sans argument et place le code excuter l'intrieur de celle-ci. Nous avons galement rintroduit les variables nombreUn et nombreDeux, cette fois-ci en limitant leur porte la fonction run() qui les contient. Nos fonctions de calculatrice esprent des nombres entiers, mais les arguments en ligne de commande sont des String. Il nous faut pour cela convertir chaque argument en ligne de commande de String en Integer avant de pouvoir les passer aux fonctions.
// Convertion de Strings en Entiers def nombreUn = java.lang.Integer.parseInt(args[0]); -9Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog) def nombreDeux = java.lang.Integer.parseInt(args[1]);
Pour cela, nous nous sommes aid du langage de programmation Java pour excuter ce type de conversion. Puiser dans l'cosystme Java existant lorsque ncessaire apporte une puissance phnomnale ce langage de script.
IV - L'Utilsation d'objets
Qu'est ce qu'un objet en JavaFX ? Comment en crer un ? Cette leon vous introduit aux concepts de base des objets, littraux d'objets, et comment invoquer une fonction d'un objet.
Conceptuellement, un objet peut modliser peu prs tout, que ce soient des composants GUI (boutons, labels, cases cocher) ou des abstractions non visuelles (temprature, distance, etc) Pour plus d'informations, veuillez vous rfrer la leon qu'est ce qu'un objet dans les tutoriels Java.
Ici, nous avons cr un objet adresse, pour tre utilis dans une hypothtique application de carnet d'addresse. Tlchargez Adresse.zip et dcompresser deux fichiers .class et CarnetAdresse.fx Les fichiers Adresse.class (Adresse.class et Adresse$Intf.class) contienne des informations dont le compilateur a besoin avant que vous puissiez crer des objets Adresse. Si vous dsirez savoir d'o cela provient, nous avons tout d'abord cr une dfinition de classe Adresse (dans un fichier Adresse.fx) et l'avons ensuite compil, ce qui a produit les classes Adresse.class et Adresse$Intf.class) Le langage de programmation JavaFX Script -- et le langage de programmation Java sur lequel il se repose -- fournit un large nombre de fichiers .class utiliser dans vos programmes. Cela permet de crer des objets pour un large ventail de tches de programmation, y compris le dveloppement de GUI avec des effets visuels sophistiqus. Nous dcrivons comment crire vos propres classes la fin de ce tutoriel, dans Ecriture de vos propres classes. Entretemps, nous vous demanderons de tlcharger un ou deux fichiers .class pour des exemples spcifiques comme celui-ci. Maintenant, compiler le script
javafxc CarnetAdresse.fx
- 10 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
Rien dans ce code ne produit de rsultat, mais le fait qu'il compile est une preuve que la cration d'objet est un succs. Techniquement parlant, les variables dans cet exemple sont appeles variables d'instance. Vous pouvez vous reprsenter des variables d'instance comme l'ensemble d'attributs que chaque objet contient. Dans les faits, le terme "Attribut" tait utilis dans des versions prcdentes du langage (vous pourriez le rencontrer occasionnellement dans de prcdentes dmonstrations et documentations). Dans le monde de la programmation oriente objet, les termes "instances" et "objet" sont synonymes.
Lorsque vous dclarez un littral d'objet, les variables d'instance peuvent tre spars par des virgules ou des espaces, aussi bien que les point-virgules. La dclaration suivante est donc galement correct :
Adresse { rue: "1 Main Street", ville: "Santa Clara", etat: "CA", codePostal: "95050", pays:"USA", } Adresse { rue: "200 Pine Street" ville: "San Francisco" etat: "CA" codePostal: "94101" pays:"USA" }
Ce tutoriel utilise gnralement les point-virgules. Les point-virgules sont requis pour la dclaration de fonction. Vous pouvez galement assigner les objets nouvellement crs des variables pour un accs ultrieur :
def adresseUne = Adresse { - 11 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog) rue: "1 Main Street", ville: "Santa Clara", etat: "CA", codePostal: "95050", pays:"USA",
def adresseDeux = Adresse { rue: "200 Pine Street" ville: "San Francisco" etat: "CA" codePostal: "94101" pays:"USA" }
Vous pouvez galement inclure la dfintion d'un objet dans un autre objet
def client = Client { prenom: "John"; nom: "Doe"; telephonne: "(408) 555-1212"; adresse: Adresse { rue: "1 Main Street"; ville: "Santa Clara"; etat: "CA"; codePostal: "95050"; pays:"USA"; } }
Dans ce dernier exemple, l'objet Client introduit quelques variables, et contient l'objet Adresse dans la variable nomme adresse. Cette structure d'objet imbriqu est trs courante et dmontre comment le programmeur (ou l'EDI) indente le corps lorsqu'un objet contient un autre. De part son indentation, la variable adresse devient visuellement spare de la variable client. Pour compiler cet exemple, tlchargez Client.zip, dcompressez le et placer les fichiers dans le mme rpertoire que les autres, et compiler vos scripts comme d'habitude.
- 12 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
Maintenant, vous vous demandez trs certainement : "D'o viennent ces fonctions ? Comment puis-je savoir quelles variables d'instance ou fonction un objet contient ?" Si vous dsirez utiliser une bibliothque de classes ou une classe, vous devez consulter la documentation de son API (Application Programming Interface). Les documentations de l'API est une liste formelle de variables d'objets et de fonctions. Sa consultation est la seule faon de savoir assurmment quelle fonctionnalit un objet donn va fournir. Vous apprendrez comment utiliser cette documentation dans d'autres tutoriels, lorsque vous apprendrez concevoir des applications graphiques.
V - Types de donnes
Nous avons vu quelques exemples de types d'objet : Adresse et Client. Les types String, Number, Integer, Boolean et Duration sont galement des types d'objet. Ces types seront discuts dans cette leon. Cette leon discute galement des types Void et null.
IV-A - String
Vous avez dj vu pas mal d'exemple de String, mais voyons quelques dtails supplmentaires. Une String peut tre dclar en utilisant soit des simples soit des doubles guillemets.
var s1 = 'Hello'; var s2 = "Hello";
Les simples et doubles guillemets sont symtriques : Vous pouvez imbriquer des simples guillemets dans des doubles guillemets ou imbriquer des doubles guillemets dans des simples guillemets. Vous pouvez galement inclure des expressions dans des String en utilisant les accolades {} :
def nom = 'Joe'; var s = "Bonjour {nom}"; // s = 'Bonjour Joe'
L'expression incluse dans la String peut son tour contenir des String, qui leur tour peuvent contenir des expressions
def reponse = true; var s = "La reponse est {if (reponse) "Oui" else "Non"}"; // s = 'La rponse est Oui'
A l'excution, le compilateur va substituer l'expression {if (reponse) "Oui" else "Non"} par la String "Oui" si la valeur de reponse est true ou "Non" dans l'autre cas. Pour joindre (concatner) plusieurs Strings, utilisez les accolades l'intrieur des guillemets.
def un = "Cet exemple "; def deux = "joint deux chaines de caracteres."; def trois = "{un}{deux}"; // joint la chaine de caractres un avec la chaine de caractres deux - 13 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog) println(trois); // 'Cet exemple joint deux chaines de caracteres.'
La diffrence entre ces deux types est que Number reprsente des nombres en virgules flottantes, mais Integer reprsente uniquement des entiers. Utiliser Number uniquement lorsque vous avez besoin d'une prcision en virgule flottante. Dans tous les autres cas, Integer devrait tre votre premier choix.
IV-C - Boolean
Le type Boolean reprsente deux valeurs : true ou false. Utilisez ce type lorsque vous dfinissez un tat :
var estEndormi = true;
Si l'expression indique entre parenthses "()" est vraie, le code inclu entre les accolades "{}" est excute. Pour plus d'information sur les expressions conditionnelles, veuillez voir la section Expression.
IV-D - Duration
Le type Duration reprsente une unit fixe de temps (millisecondes, secondes, minutes, heure)
5ms; // 5 millisecondes 10s; // 10 secondes 30m; // 30 minutes 1h; // 1 heure
Les dures sont suffixes d'units de temps. Les dures sont gnralement utilises dans les animations (que vous dcouvrirez dans la leon "Cration d'objets anims" du tutoriel "Concevoir des Applications GUI avec JavaFX").
IV-E - Void
Void est utilis pour indiquer que la fonction ne retourne pas de valeur.
function printMe() : Void { println("Je ne retourne rien"); }
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
Le mot clef Void en JavaFX commence par un V en majuscule. Si vous tes famillier avec le mot clef void du langage de programmation Java, vous devriez y faire attention. en JavaFX, tout est expression. Le type de retour de la seconde fonction PrintMe est galement Void, car le compilateur est capable d'infrer son type. Vous apprendre plus ce sujet dans la leon Expressions.
IV-F - null
null est une valeur spciale utilise pour indiquer une valeur normale manquante. null n'est pas la mme chose que zro ou une chaine vide, donc, comparer avec null n'est pas la mme chose que comparer avec zro ou une chaine vide. Le mot clf null permet de faire des comparaisons. Il est courant de voir null utilis comme ceci :
function verification(arg1: Adresse) { if(arg1 == null) { println("J'ai recu un argument null."); } else { println("L'argument a une valeur."); } }
Cette fonction accepte un argument. Et excute un simple test pour vrifier si sa valeur est null.
VI - Squences
Si vous avez une liste d'lments, vous dsirerez apprendre les squences. Cette lecons vous montre comment crer, utiliser et comparer des squences. Vous apprendrez galement comment accder un sous-ensemble de squence, appel une part.
dclare une squence et l'assigne une variable nommes joursDeLaSemaine. Le compilateur sait que nous dsirons crer une squence de String car les lments individuels sont tous de type String. Si la squence avait t dclares avec des entiers (par exemple, var nums=[1,2,3];), le compilateur devrait savoir que nous dsirons une squences de Integer.
- 15 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
Vous pouvez galement spcifier explicitement un type de squence en modifiant sa dclaration de variable pour inclure le nom du type suivi de [].
var joursDeLaSemaine: String[] = ["Lun", "Mar", "Mer", "Jeu", "Ven"];
Cela indique au comilateur que la variable joursDeLaSemaine va accueillir une squence de String (et non une simple String); Les squences peuvent galement tre dclares dans d'autres squences.
var jours = [joursDeLaSemaine, ["Sam", "Dim]];
Dans un tel cas, le compilateur va automatiquement "applatir" les squences imbriques pour ne former qu'une seule squence, rendant le code prcdent quivalent ceci :
var jours: String[] = ["Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"];
Il existe galement une notation abrge qui simplifie la cration de squences qui forment une suite arithmtique. Pour crer une squence constitus des nombres 1 100, utilisez ce qui suit :
var nums = [1..100];
Pour crer une seconde squence (base sur des lments trouvs dans la premire squence) mais contenant seulement les nombres plus grand que 2, utilisez le code suivant :
var nombresPlusGrandsQueDeux = nombres[n | n > 2];
Vous pouvez exprimer la ligne de code prcdente en Franais comme ceci : "slectionnez tous les lments de la squence nombre o la valeur d'un lment est plus grand que 2 et assigne ces lments dans une nouvelle squence nomme nombresPlusGrandsQueDeux". La clause "o" mise en gras, est le prdicat. Dans ce code, 1 2 3 4 5 La squence nouvellement cre est stoque dans une variablem nomme nombresPlusGrandQueDeux Le code (maqu en vert) nombres[n | n > 2]: spcifie la squence originale d'o les lments seront copis. Dans notre exemples, nombres est le nom de la squence existante. Cela slectionne les lments de nombres, et retourne une nouvelle squence constitue des lments, dans l'ordre, pour lesquels l'expression tait vraie Le caractre "|" est utilis pour visuellement sparer la variable "n" du restant du code : nombre[n | n > 2]; Le code (marqu en vert) nombres[n | n > 2]; dfinit un expression boolenne spcifiant le critre remplir pour tre repris dans la nouvelle squence
- 16 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
Vous pouvez galment dterminer la taille d'une squence en utilisant l'oprateur sizeof, suivi du nom de la squence :
sizeof days
A ce moment-l, la squence contient seulement un lment, "Lun". Nous pouvons insrer "Mar" la fin de cette squence en utilisant les mots-clefs insert et into :
- 17 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
La squence contient maintenant : "Lun", "Mar", "Ven", "Sam", et "Dim". Nous pouvons galement utiliser les mots clefs insert et before pour insrer un lement avant un lment une position donne. N'oubliez pas que l'index commence 0. Donc, dans notre squence actuelle, "Ven" se situe la position 2. De ce fait, pour insrer "Jeu" avant "Ven", il faut faire comme suit :
insert "Jeu" before jours[2]:
La squence contient maintenant "Lun", "Mar", "Jeu", "Ven", "Sam" et "Dim". Pour insrer "Mer" aprs "Mar", nous pouvons utiliser les mots-clefs insert et after.
insert "Mer" after jours[1];
La squence contient maintenant tous les jours de la semaine : "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam" et "Dim".
La squence contient maintenant "Lun", "Mar", "Mer", "Jeu", "Ven", et "Sam". Vous pouvez galement supprimer un lment situ une position donne. Le code suivant supprime "Lun" de la squence (Souvenez-vous que "Lun" est le premier lment, son index est donc 0).
delete jours[0];
Pour effacer tous les lments d'une squence, utilisez le mot clef delete suivi du nom de la squence :
delete jours;
Notez que delete enleve uniquement les lments de la squence. Il ne supprime pas la variable jours de votre script. Vous pouvez toujours accder la variable jours et y rajouter de nouveaux lments comme auparavant.
- 18 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog) var nombres = [1..5]; reverse nombres; // retourne [5, 4, 3, 2, 1]
L'expression seq1 == seq2 est value true parce que les deux squences ont le mme nombre d'lments et la valeur de chacun des lments est la mme dans les deux squences. Ce code affiche donc "true" l'cran. En changeant le nombre d'lments dans une squence (mais pas dans l'autre), les squences sont maintenant de longueurs diffrentes
var seq1 = [1, 2, 3, 4, 5]; var seq2 = [1, 2, 3, 4, 5, 6]; println(seq1 == seq2);
Ici, le rsultat du script sera "false" parce que la deuxime squence est plus longue que la premire, les rendant de ce fait diffrentes. Nous pouvons rendre les deux squences diffrentes en modifiant les valeurs des lments, mme si les squences ont toujours la mme longueur.
var seq1 = [1, 2, 3, 4, 5]; var seq2 = [1, 3, 2, 4, 5]; println(seq1 == seq2);
A nouveau, ce code affichera "false" car les deux squences sont diffrentes.
V-H-1 - seq[a..b]
Cette syntaxe donne accs aux lments situs entre l'index a et l'index b, compris. Le script suivant cre une squence week-end constitu uniquement des lments "Sam" et "Dim".
var jours = ["Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"]; var weekend = jours[5..6];
- 19 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
V-H-2 - seq[a..<b]
Utiliser le caractre "<" pour accder aux lments situs entre l'index a compris et l'index b exclus. Nous utiliserons cela sur la squence jours pour crer la squence joursDeLaSemaine constitu des lments "Lun" "Ven".
var jours = ["Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"]; var joursDeLaSemaine = jours[0..<5];
V-H-3 - seq[a..]
En omettant le second index, vous pouvez accder tous les lements de l'index a jusqu' la fin de la squence. En gardant le mme exemple, nous pouvons crer la squence weekend comme suit :
var jours = ["Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"]; var weekend = jours[5..];
V-H-4 - seq[a..<]
Finallement, vous pouvez utiliser "<" sans le second index pour accder tout depuis l'index a jusqu' la fin de la squence, excluant le dernier lment.
var jours = ["Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"]; var jours2 = jours[0..<];
Cette version crera une squence jours2 constitus des lments "Lun" jusque "Sam".
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog) - (oprateur de soustraction) * (oprateur de multiplication) / (oprateur de division) mod (oprateur de reste de division)
Vous pouvez galement combiner les oprateurs arithmtiques avec l'oprateur d'assignation pour crer des assignations imbriques. Par exemple, resultat += 1; et resultat = resultat + 1; Tous les deux incrmentent la valeur de rsultat de 1.
var resultat = 0; resultat += 1; println(resultat); // resultat vaut maintenant 1 resultat -= 1; println(resultat); // resultat vaut maintenant 0 resultat = 2; resultat *= 5; // resultat vaut maintenant 10 println(resultat); resultat /= 2; // resultat vaut maintenant 5 println(resultat);
Le seul oprateur arithmtique qui ne peut tre utilis de cette faon est mod. Si, par exemple, vous dsirez diviser le rsultat par 2, et ensuite assigner le reste lui-mme, vous devrez crire
resultat = resultat mod 2;
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
var resultat = 1; // resultat vaut maintenant 1 resultat--; // resultat vaut maintenant 0 println(resultat); resultat++; // resultat vaut maintenant 1 println(resultat); resultat = -resultat; // resultat vaut maintenant -1 println(resultat); var succes = false; println(succes); // false println(not succes); // true
Les oprateurs d'incrment/dcrment peuvent tre appliqu avant (prfixe) ou aprs (suffixe) l'oprande. Le code result++; et ++result; vons tous les deux finir avec result qui aura t incrment de 1. La seule diffrence est que la version avec le prfixe (++result;) value avec la valeur incrmente alors que la version avec le suffixe (result+ +;) value avec la valeur d'origine (avant l'incrmentation). (Vous pouvez mmoriser lequel est lequel de cette faon : ++result fait l'incrment et donne la valeur result++ donne la valeur et ensuite fait l'incrment) Si vous devez juste faire une incrmentation/dcrmentation, il importe peu quelle version vous allez utiliser. Mais si vous utiliser ces oprateurs dans une expression, celle que vous choisirez aura une diffrence significative. Le script qui suit illustre cette distinction
var resultat = 3; resultat++; println(resultat); // resultat vaut maintenant 4 ++resultat; println(resultat); // resultat vaut maintenant 5 println(++resultat); // reultat vaut maintenant 6 println(resultat++); // cela imprime toujours 6! println(resultat); // mais resultat vaut maintenant 7
- 22 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
Le script suivant dmontre l'utilisation de ces oprateurs en dfinissant les variables nomUtilisateur et motDePasse, et ensuite en affichant le rsultat de nombreuses conditions
def nomUtilisateur = "foo"; def motDePasse = "bar"; if ((nomUtilisateur == "foo") and (motDePasse == "bar")) { println("Test 1: nomUtilisateur ET motDePasse sont corrects"); } if ((nomUtilisateur == "") and (motDePasse == "bar")) { println("Test 2: nomUtilisateur ET motDePasse sont corrects"); } if ((nomUtilisateur == "foo") or (motDePasse == "bar")) { println("Test 3: nomUtilisateur OU motDePasse est correct"); } if ((nomUtilisateur == "") or (motDePasse == "bar")) { println("Test 4: nomUtilisateur OU motDePasse est correct"); }
Le rsultat est
Test 1: nomUtilisateur ET motDePasse sont corrects Test 3: nomUtilisateur OU motDePasse est correct Test 4: nomUtilisateur OU motDePasse est correct
// affiche true
Vous trouverez cet oprateur trs utile lorsque vous apprendrez plus propos des classes et de l'hritage dans la dernire leon de ce tutoriel.
- 23 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
VIII - Expressions
Les expressions sont des morceaux de code qui sont values et donne une valeur en retour. Elles peuvent tre combines pour produire des expressions plus grande. Le langage de programmation JavaFX Script est un langage d'expression, ce qui signifie que tout, y compris les boucles, les conditions, et mme les blocs, sont des expressions. Dans certains cas (comme les expressions while) les expressions ont une valeur de retour de type Void, ce qui signifie qu'elles ne retourne aucun rsultat.
La premire ligne (var nombres = [5, 7, 3, 9];) dclare une squence d'entiers. La ligne suivante dclare une variable nomme total qui va contenir la somme de ces entiers. L'expression de bloc qui suit est constitu de tout ce qui est entre accolades
{
Dans ce bloc, la premire ligne de code dclare une variable nomme somme qui contient la somme des entiers de cette squence. La seconde ligne (une expression for) boucle sur la squence et ajoute chaque entier la somme. La dernire ligne indique la valeur de retour de l'expression de bloc (dans ce cas, 24).
VII-B - L'expression if
L'expression if permet de diriger le droulement d'un programme en excutant certains blocs de code uniquement si une condition particulire est true. Par exemple, le script suivant fournira le prix du ticket selon l'ge. Les personnes ges de 12 65 payent le prix plein de 10$. Les seniors et les enfants payeront 5$, except les enfants de moins de 5 ans qui ne payent rien.
- 24 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
def age = 8; var prixDuTicket; if (age < 5 ) { prixDuTicket = } else if (age < 12 prixDuTicket = } else { prixDuTicket = } println("Age: {age} 0; or age > 65) { 5; 10; Prix du Ticket : {prixDuTicket} dollars.");
Si l'age n'est pas plus petit que 5, le programme excute la condition suivante (indiqu par le mot-cle else suivant d'une autre expresssion if) :
else if (age < 12 or age > 65) { prixDuTicket = 5; }
Cela met le prix du ticket 5$ si l'ge de la personne est entre 5 et 12 et plus de 65 ans. Si l'ge est entre 12 et 65 ans, le programme excute le bloc de code finale, indiqu par le mot clef else.
else { prixDuTicket = 10;
Ce bloc ne s'excute que si aucune des conditions prcdentes ne sont satisfaites. Il met le prix du ticket 10$ pour les personnes ages de 12 65 ans. Le code prcdent peut tre cris de faon trs concise :
prixDuTicket = if (age < 5) 0 else if (age <12 or age > 65) 5 else 10;
C'est une technique trs utile maitriser et que vous rencontrerez nouveaut dans ce tutoriel.
- 25 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog) var nombres : [0..5];
Techniquement parlant, [0..5] est une expression de srie. Par dfaut, l'intervale entre les valeurs est de 1. Mais vous pouvez utiliser le mot clef step pour spcifier un interval diffrent. Par exemple, pour dfinir une squence constitue de nombres impairs entre 1 et 10 :
var nombres = [1..10 step 2]; println(nombres);
Pour crer une suite descendante, assurez vous que la deuxime valeur soit plus petite que la premire, et spcifier un valeur ngative pour le pas.
var nombres = [10..1 step -1]; println(nombres);
affichera
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
Si vous ne fournissez pas de pas ngatif lorsque vous crez une suite descendant, vous terminerez avec une squence vide. Le code suivant
var nombres = [10..1 step 1]; println(nombres);
Vous obtiendrez galement une squence vide si vous omettez le mot clef step.
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog) }
Dcortiquons quelque peu cet exemple. Le mot-clef "for", commence l'expression for
for (jour in jours) { println(jour); }
La variable jours est le nom de la squence d'entre qui sera traite par l'expression for. La variable jour contient la valeur courante pendant que l'expression for se dplace dans la squence Notez que la variable jour ne doit pas tre dplace ailleurs dans le script avant d'tre utilise dans l'expression for. De plus, jour ne sera pas accessible une fois l'expression for termine. Les programmeurs donnent souvent ces variables temporaires des noms courts (ou mme d'une seule lettre). Dans l'exemple prcdent, rien ne montrait que for retourne une valeur. Cependant, for est galement une expression qui retourne une squence. Le code qui suit montre deux exemples de cration d'une squence depuis une autre, en utilisant l'expression for :
// La squence qui en rsulte contiendra le carr de chacun des nombres de la squence d'entre . var carres = for (i in [1..10]) i*i; // La squence qui en rsult contient ["LUN", "MAR", "MER", etc] var joursMajuscules = for (jour in jours) jour.toUpperCase();
La fonction toUpperCase() est fournie par l'objet String. Vous pouvez obtenir la liste complte des fonctions en consultant la documentation de l'API.
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog) }
La ligne qui suit commence l'expression while. Cette expression cre une boucle (entre les accolades ouvrante et fermante) qui se termine jusqu' ce que la condition compteur < 10 soit value false.
while (count < 10) { ... }
Le corps de l'expression while affiche la valeur courante de compteur, et incrmente ensuite sa valeur de 1.
println("compteur == {compteur}"); compteur += 1;
Lorsque compteur vaut 10, il est mis fin la boucle. Pour crer une boucle infinie, placer le mot-clef true entre parenthses, comme dans while(true) {}
- 28 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
Affiche :
1 3 5
Sans les expressions if, le programme afficherait tout simplement les nombres de 0 10. Avec seulement la premire expression if, le programme va sortir de la boucle lorsque la valeur de i sera suprieure 5.
if (i > 5) break; } {
Dans ce cas, contine ne s'excute que lorsque i est pair ( c'est dire lorsque le reste de la division de i par 2 vaut zro). Lorsque cela se produit, la fonction println() n'est jamais invoque, et le nombre n'apparait ds lors pas la console.
L'excution de ce script tel quel (avec quelquechoseafoire valant false) afffiche le message suivant :
La fonction s'est bien excute. Le script s'est maintenant excut comme espr...
Mais en mettant cette variable sur true, une exception sera jete. A l'excution, le script va crasher avec le message suivant :
- 29 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
Exception in thread "main" java.lang.Exception: Quelque chose d'anormal s'est produit! at exceptions.foo(exceptions.fx:10) at exceptions.javafx$run$(exceptions.fx:3)
Pour se prmunir de ce crash, il nous faut enrober l'invocation de la fonction foo() avec les expressions try/catch. Comme leur nom l'indique (du moins, pour un anglais), ces expressions essaye (try) d'exctuer le code entre accolades, mais va attraper (catch) une expression s'il y a un problme.
try { foo(); } catch (e: Exception) { println("{e.getMessage()} (mais nous l'avons attrape)"); }
Il y a galement un bloc finally (ce n'est pas techniquement une expression) qui s'excute toujours aprs que le bloc d'expression try soit excuts, qu'il y ait eu une exception ou pas. Le bloc finally est utilis pour excuter des oprations de nettoyage qui doivent se drouler que le bloc try se soit excut avec succs ou qu'une exception ait t jete.
try { foo(); } catch (e: Exception) { println("{e.getMessage()} (mais nous l'avons attrape)"); } finally { println("Nous sommes maintenant dans l'expression finally..."); }
- 30 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
1 47
Notez que nous avons dclar la varialbe y comme def. Cela empche n'importe quel code d'assigner directement une valeur cette variable (bien que sa valeur peut changer selon le lien cr). Vous devriez utiliser cette mme convention lorsque vous liez un objet (rappelez-vous que nous avons introduit Adresse dans Utilisation d'objets) :
var maRue: "1 Main Street"; var maVille: "Santa Clara": var monEtat: "CA"; var monCodePostal:"95050"; var monPays:"USA"; def adresse = bind Adresse { rue: maRue; ville : maVille; etat : monEtat; codePostal : monCodePostal; adresse : monAdresse; }; println("rue de l'adresse : {adresse.rue}"); maRue = "100 Mapple Street"; println("rue de l'adresse : {adresse.rue}");
En changeant la valeur de maRue, la variable rue dans l'objet adresse est affect :
adresse.rue == 1 Main Street adresse.rue == 100 Mapple Street
Notez que la modification de maRue provoque en fait la cration d'un nouvel objet Adresse et le rassigne la variable adresse. Pour traquer les modifications sans crer de nouvel objet Adresse, il vous faut associer directement les variables d'instance de l'objet
def adresse = bind Adresse { - 31 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog) rue: bind maRue; ville : bind maVille; etat : bind monEtat; codePostal : bind monCodePostal; adresse : bind monAdresse;
};
Vous pouvez galement omettre le premier bind (celui juste avant Adresse) si vous avez explicitement lis les variables d'instance :
def adresse = Adresse { rue: bind maRue; ville : bind maVille; etat : bind monEtat; codePostal : bind monCodePostal; adresse : bind monAdresse; };
C'est une fonction lie, parce qu'elle est prcde du mot-clef bound. Le mot-clef bound ne remplace pas le mot-clef bind; les deux sont utiliss conjointement comme dcrit ci-dessous Ensuite, ajoutons du code pour invoquer cette fonction et tester nos binding :
var echelle = 1.0; bound function creePoint(posX : Number, posY : Number) : Point { Point { x: posX * scale y: posY * scale } } class Point { var x : Number; var y : Number; } var monX = 3.0; - 32 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog) var monY = 3.0; def pt = bind creePoint(monX, monY); println(pt.x); monX = 10.0; println(pt.x); echelle = 2.0; println(pt.x);
initialise les variables de script monX et monY 3.0. Ces valeurs sont alors passes comme arguments la fonction crerPoint, qui cre et retourne un nouvel objet Point. Le mot-clef bind, plac juste aant l'invocation de creePoint, associe l'objet Point nouvellement cr (pt) au rsultat de la fonction creePoint. Ensuite, le code :
monX = 10.0; println(pt.x);
change la valeur de monX 10.0 et affiche la valeur de pt.x. La console montre que maintenant pt.x vaut maintenant 10.0. finallement, le code :
echelle = 2.0; println(pt.x);
change la valeur de l'chelle et affiche nouveau la valeur de pt.x. La valeur de pt.x est maintenant 20.0. Cependant, si nous enlevons le mot-clef bound de cette fonction (faisons d'elle une fonction non lie), le rsultat sera :
3.0 10.0 10.0
C'est parce que les fonctions non-lies ne sont rinvoque que lorsque l'un de leur argmument change. Comme echelle n'est pas un argument de fonction, modifier ses valeurs ne provoque pas une nouvelle invocatin de la fonction.
- 33 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
seq1 contient dix lments (les nombres 1 10). seq2 contient galement dix lments ; ces lments devraient avoir les mme valeurs que seq1, mais nous avons appliqu l'expression item*2 chacun, ce qui a pour effer de doubler leur valeur. Le rsultat est donc :
Premiere Sequence : 1 2 3 4 5 6 7 8 9 10 Seconde Sequence : 2 4 6 8 10 12 14 16 18 20
Nous pouvons lier les deux squences en plaant le mot-clef bind juste avant le mot-cle for
def seq2 = bind for (item in seq1) item*2;
La question vient maintenant : "Si seq1 change d'une faon ou d'une autre, est ce que tous les lments -- ou juste quelques uns )) de seq2 seront affect ?" Nous pouvons tester cela en insrant un lement (la valeur 11) la fin de seq1, et affiche les valeurs des deux squences pour voir ce qui a chang
var seq1 = [1..10]; def seq2 = bind for (item in seq1) item*2; insert 11 into seq1; afficheSequences(); function afficheSequences() { - 34 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog) println("Premiere Sequence:"); for (i in seq1){println(i);} println("Seconde Sequence:"); for (i in seq2){println(i);}
Rsultat :
Premiere Sequence : 1 2 3 4 5 6 7 8 9 10 11 Seconde Sequence : 2 4 6 8 10 12 14 16 18 20 22
Le rsultat montre que l'insertion de 11 la fin de seq1 n'affecte pas les 10 premiers lments de seq2; un nouvel lment est automatiquement rajout la fin de seq2; avec la valeur de 22.
Le trigger dans cet exemple s'excute deux fois; premirement lorsque motDePasse est initialis "foo", et ensuite lorsque la valeur devient "bar". Notez que la variable ancienneValeur stoque la valeur de la variable avant que le trigger
- 35 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
ne soit invoqu. Vous pouvez nommer cette variable comme vous le dsirez. Nous l'avons appel ancienneValeur car c'est un nom descriptif.
- 36 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog) }
Cet exemple devrait vous sembler familier puisque vous l'avez dj rencontr lors des leons sur les variables et les fonctions La classe Adresse dclare des instances de variables rue, ville, etat, codePostal et pays. Toutes de type String. La classe Client dclare quelques instances de variables galement, plus des fonctions qui affichent leurs valeurs. Parce que ces variables et fonctions sont dclares dans des classes, elles sont disponibles pour n'importe quel objets Adresse et Client que vous crez.
Nous avons marque cette classe comme tant abstraite (abstract), signifiant par l que les objets Compte ne peuvent tre directement cr (le but de ce design est que vous ne pouvez crer que des comptes d'pargne ou des comptes courants). Les variables numeroCompet et solde contienne le numro de compte et le solde actuel. Les fonctions fournissent le comportement de base pour obtenir le sole, faire un dpot ou un retrait. Nous pouvons dfinir une classe CompteEpargne qui va utiliser le mot-clef extends pour hriter de ces variables et fonctions :
class CompteEpargne extends Compte { var soldeMinimum = 100.00; var penalite = 5.00; function verifieSolde() : Void { if(solde < soldeMinimum){ solde -= penalite; } }
Parce que CompteEpargne est une sous classe de Compte, il va automatiquement contenir toutes les variables d'instance et fonction de Compte. Cela permet au code source de CompteEpargne de ne se concentrer que sur ce qui differe de la classe parente (un requirement que le dtenteur du compte d'pargne doit maintenur un solde minimum de 100$ pour viter des pnalits).
- 37 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
Nous pouvons dfinir, de faon similaire, la classe CompteCourant qui tend galement la classe Compte :
class CompteCourant extends Compte { var nePeutEtreNegatif: Boolean; override function retrait(montant: Number) : Void { if(solde-montant<0 and nePeutEtreNegatif){ // code pour interdire le retrait d'un compte protg sera mis ici } else { solde -= montant; // le compte pourra avoir un solde ngatif ! }
Cela diffre de Compte en dfinissant une variable qui vrifie si oui ou non le titulaire du compte est protg contre les dcouverts (si un retrait -- comme la signature d'un chque -- provoquerait un solde ngatif, la protection contre le dcouvert s'active pour assurer que le chque ne soit pas encaiss). Notez que dans ce cas nous avons modifi le comportement de la fonction retrait hrite. C'est connu comme la surchage de fonction et indiqu par le mot-cle override.
XI - Les Packages
Les Packages vous permettent d'organiser et de structurer vos classes et leurs relations envers les autres. Cette leon vous guidera quant la dfinition et l'utilisation d'un package. Vous avez dj maintenant une bonne connaissance des bases du langage de programmation JavaFX Script. Cependant, l'emplacement des fichiers source laisse quelque peu dsirer (pour le moment, vous avez probablement un seul rpertoire remplis avec des tas d'exemples n'ayant aucun lien entre eux). Nous pouvons toute notre organisation en placant notre code dans des packages. Les packages permettent de grouper votre code par fonctionnalit. Cela donn galement vos classes un espace de nommage unique. Nous allons dtaill tout cela pas par pas en mettant la classe Adresse dans un package spcifique.
- 38 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
Notez que lorsqu'une dclaration de package est prsente, elle doit apparaitre comme premire ligne de code dans le fichier source. Seule une dclaration de package par fichier source est permise.
Ce mot-cle est l'un des cinq modificateurs d'accs. Nous allons explorer les modificateurs d'accs dans la leon suivante. Pour le moment, retenez juste que public rend ce code accessible aux autres classes et scripts.
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog) rue: "1 Main Street"; ville: "Santa Clara"; etat: "CA"; codePostal: "95050"; pays: "USA";
L'approche 1 cre un objet en utilisant le nom de la classe pleinement qualifi (qui est maintenant carnetadresse.Adresse). Compar d'autres mthodes, cette approche vous semblera quelque peu rbarbative (surtout dans de larges scripts) mais vous devez savoir qu'elles existent
// Approche #2 import carnetadresse.Adresse; Adresse { rue: "1 Main Street"; ville: "Santa Clara"; etat: "CA"; codePostal: "95050"; pays: "USA"; }
L'approche #2 utilise le mot-clef import qui permet l'utilisation du nom court (Adresse) partout dans le script. Cette approche est recommande pour de larges programmes parce que ca aide la documentation. D'un coup d'oeil vous pouvez dire quel package chaque classe appartient.
Avec ce niveau d'accs, les variables peuvent tre initialises, overridden, lues, assignes ou lies dans le script uniquement. Aucun autre code source ne peut lire ou accder cette information.
- 40 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
Mais attention ne pas confondre ce modificateur d'accs avec les dclaration de package, comme dcrit dans la leon prcdente ! exemple :
// Dans le fichier tutoriel/un.fx package tutoriel; // place ce script dans le package "tutoriel" package var message = "Bonjour de un.fx !"; // c'est le modificateur d'accs "package" package function afficheMessage() { println("{message} (dans la fonction afficheMessage)"); } // Dans le fichier tutoriel/deux.fx package tutoriel; println(un.message); un.printMessage();
Vous pouvez compiler et excuter cet exemple (depuis le rpertoire parent de tutoriel) avec les commandes suivantes :
javafxc tutoriel/un.fx tutoriel/deux.fx javafx tutoriel/deux
Le rsultat sera :
Bonjour de un.fx ! Bonjour de un.fx ! (dans la fonction afficheMessage)
- 41 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog)
Ce qui donne :
Classe deux dit Bonjour !
Notez que ce modificateur d'accs ne peut s'appliquer aux classes. C'est pourquoi nous avons marqu la classe un comme public
Rsultat :
C'est une variable de script public dans un.fx bonjour de la classe un ! bonjour de la classe un ! (dans la fonction afficheMessage)
- 42 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog) // Dans tutoriel/deux.fx package tutoriel; println(un.x);
Le rsultat est "1" ce qui prouve que x est bien accessible en lecture en dehors du script tutoriel/un. Maintenant, essayons de modifier sa valeur :
// Dans tutoriel/deux.fx package tutoriel; un.x = 2; println(un.x);
Pour que cela fonctionne, nous devons tendre les accs en criture x :
// Dans le fichier tutoriel/un.fx package tutoriel; package public-read var x = 1; // Dans tutoriel/deux.fx package tutoriel; un.x = 2; println(un.x);
Apprendre le langage de programmation JavaFx par Vincent Brabant (Page d'accueil de Vincent Brabant) (Blog) import tutoriel.un; var o = un { message: "variable initialisee depuis un autre package !" } println(o.message);
Cela affiche "variable initialisee depuis un autre package !" prouvant qu'un objet situ dans un autre package peut initialis la variable message. Cependant, du fait que les accs en criture qui pourraient suivre ne sont possible que dans le script, nous ne pouvons en changer sa valeur :
// Dans le fichier deux.fx import tutoriel.un; var o = un { message: "variable initialisee depuis un autre package !" } o.message = "Changement du message ..."; //ERREUR DE COMPILATION println(o.message);
Cela confirme le comportement espr : la variable peut tre publiquement initialise, mais les tentatives d'critures qui suivraient sont controlles par un niveau d'accs diffrent.
- 44 Copyright 2008-2009 - Vincent Brabant. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://brabant.developpez.com/tutoriels/javafx/apprendre/