[french] discover haxe

Post on 07-Jul-2015

562 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Haxe presentation from JeUXDiCode (La Rochelle) 20th February 2014

TRANSCRIPT

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...

33

20 février 2014

Bibliographie

Le site officiel : http://haxe.org/

&

34

Merci pour votre écoute

(https://github.com/JeUXdiCode/2014Fevrier20)

top related