Upload
axel-anceau
View
563
Download
0
Embed Size (px)
DESCRIPTION
Haxe presentation from JeUXDiCode (La Rochelle) 20th February 2014
Citation preview
1
“Un langage pour les coder tous”
JeUXDiCode 20 février 2013La Rochelle
Par Axel Anceau
https://github.com/JeUXdiCode/2014Fevrier20
2
20 février 2014
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
3
20 février 2014
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
4
20 février 2014
1 code : 7 langages ?
PHP C# Java C++ JS Flash Neko
➢ Code réutilisable
➢ Un seul langage à maîtriser
➢ Développeurs contents
5
20 février 2014
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
6
20 février 2014
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
7
20 février 2014
Utilisation
➢ Déclaration d'une variable avec var
➢ Spécification possible (mais non obligatoire) du type d'une variable
8
20 février 2014
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
9
20 février 2014
Types avancés (2)
➢ typedef : Structure de donnée ➢ Définit une structure de donnée typée
And so on...
10
20 février 2014
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”
11
20 février 2014
Les fonctions (2)
➢ Enregistrer une fonction dans une variable
➢ Toutes les variables déclarées avant sont accessibles (y compris variables de classe)
12
20 février 2014
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 :
13
20 février 2014
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
14
20 février 2014
Compilation (2)
➢ Configurable TRÈS facilement grâce à un fichier “.hxml”➢ Compilation : haxe fichier.hxml
15
20 février 2014
Directives (1)
➢ Compilation conditionnelle (selon la cible)
16
20 février 2014
Directives (2)
17
20 février 2014
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 !)
18
20 février 2014
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
19
20 février 2014
Tests (2)
➢ Ajouter les tests dans un “TestRunner”
➢ Possibilité d'exécuter les tests à la compilation
Exemple simple :
Arborescence
Classe testée
20
20 février 2014
Tests (3)
Classe de test
21
20 février 2014
Tests (4)
Main des tests
Fichier de compilation
Résultat des tests (avec beaucoup de surprise, ils sont passés !)
➢ Framework plus poussé : Munit
22
20 février 2014
Librairies Haxe
➢ Un seul outil : haxelib➢ haxelib install <librairie>➢ haxelib update <librairie>➢ ...
➢ Quelques noms...
Flambe
23
20 février 2014
Utiliser du code existant
➢ Le cas des fonctions hors classe, à travers un petit exemple JS....
Fonction javascript concaténant 2 variables
➢ Méthode plus ou moins différente selon les plateformes
24
20 février 2014
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 :
25
20 février 2014
Utiliser du code existant
➢ Le cas des classes, à travers un petit exemple....
Classe javascript simple à utiliser
26
20 février 2014
Utiliser du code existant
➢ Déclaration d'une classe externe
Résultat dans la console :
27
20 février 2014
Exemple concret: nodejs
➢ Classe http.Server
Documentation de http.Server
28
20 février 2014
Exemple concret: nodejs
Classe externe http.Server
29
20 février 2014
Exemple concret: nodejs
Exemple d'utilisation
➢ En voir plus ? https://github.com/clemos/node-api
30
20 février 2014
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
31
20 février 2014
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 !
32
20 février 2014
Conseil final
Ne JAMAIS coder dans le code
généré !S'il vous plaît...
34
Merci pour votre écoute
(https://github.com/JeUXdiCode/2014Fevrier20)