1. “Un langage pour les coder tous”
JeUXDiCode 20 février 2013
La Rochelle
https://github.com/JeUXdiCode/2014Fevrier20
1
Par Axel Anceau
2. Introduction
➢
Langage de programmation de haut niveau
➢
Génération de code dans 7 langages différents
➢
➢
➢
Réalisation française (Cocorico) par Nicolas
Cannasse
Multiplateforme
Répandu dans l'univers des développeurs de jeux
indépendants
2
20 février 2014
3. Sommaire
➔
Types de base et avancés
➔
Les fonctions en Haxe
➔
La compilation
➔
Les directives de compilation
➔
Les macros
➔
Tests unitaires
➔
Librairies haxe
➔
Librairies externes
➔
Un exemple : NodeJS
➔
Avantages & inconvénients de Haxe
3
20 février 2014
4. 1 code : 7 langages ?
PHP
C#
Java
C++
JS
Flash
➢
Code réutilisable
➢
Un seul langage à maîtriser
➢
Neko
Développeurs contents
4
20 février 2014
5. Le langage
➢
Langage orienté objet typé mais flexible
➢
Proche de l'Action Script
➢
Fonctions anonymes
➢
Itérateurs omniprésents .. good bye for(;;)
➢
Condition = Booléen
5
20 février 2014
6. Les types
Void : Enum
➢ Float : Classe
➢ Int : Classe (hérite de Float)
➢ Bool : Enum (true, false)
➢ String : Classe
➢
➢
Dynamic : Classe
➢
➢
Peut contenir un peu tout et n'importe quoi, mais on ne peut
pas faire tout et n'importe quoi avec !
untyped : Mot clé
➢
Aucune vérification n'est faite à la compilation, on peut faire
tout et n'importe quoi. À utiliser avec précaution
6
20 février 2014
8. Types avancés (1)
➢
class : Déclaration d'une classe
➢
➢
➢
➢
Héritage de classe avec le mot clé extends
Implémentation d'interface(s) avec implements
Un seul et unique constructeur par classe (fonction new())
Un “initializer” (fonction __init()__) appelé avant l'intialisation
d'un quelconque attribut static
8
20 février 2014
9. Types avancés (2)
➢
typedef : Structure de donnée
➢
Définit une structure de donnée typée
And so on...
9
20 février 2014
10. Les fonctions (1)
Typage obligatoire ; Surcharge impossible
➢ Paramètres facultatifs précédés par un “?”. Les
variables sont remplies dans “l'ordre de leur type”
➢
10
20 février 2014
11. Les fonctions (2)
➢
➢
Enregistrer une fonction dans une variable
Toutes les variables déclarées avant sont
accessibles (y compris variables de classe)
11
20 février 2014
12. Les fonctions (3)
➢
Fonctions en paramètres de fonctions
➢
Seuls les types des paramètres dans l'ordre sont à préciser,
(y compris les facultatifs), séparés par des “->” et se
terminant par le type de retour de la fonction
Exemple avec la fonction de l'exemple précédent :
12
20 février 2014
13. Compilation (1)
➢
Génération de code optimisée et rapide
➢
➢
Seuls les outils utilisés sont compilés
Simple quelque soit le langage cible
13
20 février 2014
17. Macros
➢
Code exécuté à la compilation
➢
Un puissant outil à ne pas négliger
➢
Ne peut pas utiliser du code spécifique à une
cible (on a pas encore commencé la
compilation rappelez vous !)
17
20 février 2014
18. Tests (1)
➢
Tests (basiques) intégrés dans Haxe
➢
Héritage de classe haxe.unit.TestCase
➢
3 méthodes de test :
➢
➢
➢
➢
assertEquals(a, b)
assertTrue(a)
assertFalse(a)
2 méthodes de configuration
➢
➢
setup() appelée à l'instanciation
tearDown() appelée à la fin de tous les tests de classe
18
20 février 2014
19. Tests (2)
➢
Ajouter les tests dans un “TestRunner”
➢
Possibilité d'exécuter les tests à la compilation
Exemple simple :
Classe testée
Arborescence
19
20 février 2014
21. Tests (4)
Fichier de compilation
Main des tests
Résultat des tests (avec beaucoup de surprise, ils sont passés !)
➢
Framework plus poussé : Munit
21
20 février 2014
22. Librairies Haxe
➢
Un seul outil : haxelib
➢
➢
➢
➢
haxelib install <librairie>
haxelib update <librairie>
...
Quelques noms...
Flambe
22
20 février 2014
23. Utiliser du code existant
➢
➢
Méthode plus ou moins
différente selon les plateformes
Le cas des fonctions hors classe,
à travers un petit exemple JS....
Fonction javascript concaténant 2 variables
23
20 février 2014
24. Utiliser du code existant
Code Haxe faisant l'appel à la fonction javascript
Après compilation, insérer le code natif (javascript.js puis le code généré (haxe.js)
Résultat dans la console du navigateur :
24
20 février 2014
25. Utiliser du code existant
➢
Le cas des classes,
à travers un petit exemple....
Classe javascript simple à utiliser
25
20 février 2014
26. Utiliser du code existant
➢
Déclaration d'une classe externe
Résultat dans la console :
26
20 février 2014
30. Inconvénients d'Haxe
➢
Une documentation très mauvaise
➢
Une petite communauté
➢
➢
➢
➢
➢
➢
Librairies maintenues par 1 ou 2 pers. En moyenne
Peu de tutoriels
Peu de librairies à jour
Avancée rapide difficile → cercle vicieux
Proche de l'ActionScript (qui n'est pas
dans le coeur de tous les développeurs)
Aucun IDE spécialisé dans Haxe.
➢
Aucun debugger
30
20 février 2014
31. Avantages d'Haxe
➢
Une compilation très rapide
➢
Réutilisabilité du code accrue
➢
Communauté très active
➢
Langage souple malgré son typage
➢
Les macros <3
➢
Une syntaxe commune pour toute les
cibles !
31
20 février 2014