SlideShare a Scribd company logo
1 of 34
Download to read offline
“Un langage pour les coder tous”
JeUXDiCode 20 février 2013
La Rochelle
https://github.com/JeUXdiCode/2014Fevrier20

1

Par Axel Anceau
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
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
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
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
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
Utilisation
➢

➢

Déclaration d'une variable avec var
Spécification possible (mais non
obligatoire) du type d'une variable

7
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

8
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...
9
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”
➢

10
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)

11
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 :

12
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

13
20 février 2014
Compilation (2)
➢

Configurable TRÈS facilement grâce à un
fichier “.hxml”
➢

Compilation : haxe fichier.hxml

14
20 février 2014
Directives (1)
➢

Compilation conditionnelle (selon la cible)

15
20 février 2014
Directives (2)

16
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 !)

17
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
18
20 février 2014
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
Tests (3)

Classe de test

20
20 février 2014
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
Librairies Haxe
➢

Un seul outil : haxelib
➢
➢
➢

➢

haxelib install <librairie>
haxelib update <librairie>
...

Quelques noms...

Flambe

22
20 février 2014
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
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
Utiliser du code existant
➢

Le cas des classes,
à travers un petit exemple....

Classe javascript simple à utiliser

25
20 février 2014
Utiliser du code existant
➢

Déclaration d'une classe externe

Résultat dans la console :
26
20 février 2014
Exemple concret: nodejs
➢

Classe http.Server

Documentation de http.Server

27
20 février 2014
Exemple concret: nodejs

28

Classe externe http.Server

20 février 2014
Exemple concret: nodejs

Exemple d'utilisation
➢

En voir plus ? https://github.com/clemos/node-api
29
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
30
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 !

31
20 février 2014
Conseil final

Ne JAMAIS coder
dans le code
généré !
S'il vous plaît...

32
20 février 2014
Bibliographie
Le site officiel : http://haxe.org/
&

33
20 février 2014
Merci pour votre écoute
(https://github.com/JeUXdiCode/2014Fevrier20)

34

More Related Content

What's hot

ES6, le futur de Javascript
ES6, le futur de JavascriptES6, le futur de Javascript
ES6, le futur de JavascriptOpenska
 
Intégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CIIntégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CIHugo Hamon
 
Laravel yet another framework
Laravel  yet another frameworkLaravel  yet another framework
Laravel yet another frameworkLAHAXE Arnaud
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoftdavrous
 
Vbscript
VbscriptVbscript
Vbscriptouedib
 
I le langage java d'una manière avancée introduction
I  le langage java d'una manière avancée introductionI  le langage java d'una manière avancée introduction
I le langage java d'una manière avancée introductionsabrine_hamdi
 
Active Server Pages (ASP)
Active Server Pages (ASP)Active Server Pages (ASP)
Active Server Pages (ASP)Saïd Radhouani
 
Initiation au JavaScript
Initiation au JavaScriptInitiation au JavaScript
Initiation au JavaScriptStrasWeb
 
Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10Jean-Michel Doudoux
 
AlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPAlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPjulien pauli
 
Introduction TypeScript
Introduction TypeScriptIntroduction TypeScript
Introduction TypeScriptfelixbillon
 
Orchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notesOrchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notesXavier Gorse
 
Présentation JavaScript
Présentation JavaScriptPrésentation JavaScript
Présentation JavaScripttarkan_
 
Une application en deux heure - PHP Québec Janvier 2009
Une application en deux heure - PHP Québec Janvier 2009Une application en deux heure - PHP Québec Janvier 2009
Une application en deux heure - PHP Québec Janvier 2009Philippe Gamache
 
Interface texte plein écran en Go avec TView
Interface texte plein écran en Go avec TViewInterface texte plein écran en Go avec TView
Interface texte plein écran en Go avec TViewOSInet
 
Introduction à l'objet - Deuxième année ISIMA
Introduction à l'objet - Deuxième année ISIMAIntroduction à l'objet - Deuxième année ISIMA
Introduction à l'objet - Deuxième année ISIMALoic Yon
 

What's hot (20)

openFrameworks
openFrameworksopenFrameworks
openFrameworks
 
ES6, le futur de Javascript
ES6, le futur de JavascriptES6, le futur de Javascript
ES6, le futur de Javascript
 
Intégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CIIntégration Continue PHP avec Jenkins CI
Intégration Continue PHP avec Jenkins CI
 
Laravel yet another framework
Laravel  yet another frameworkLaravel  yet another framework
Laravel yet another framework
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoft
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 
Vbscript
VbscriptVbscript
Vbscript
 
I le langage java d'una manière avancée introduction
I  le langage java d'una manière avancée introductionI  le langage java d'una manière avancée introduction
I le langage java d'una manière avancée introduction
 
Active Server Pages (ASP)
Active Server Pages (ASP)Active Server Pages (ASP)
Active Server Pages (ASP)
 
Initiation au JavaScript
Initiation au JavaScriptInitiation au JavaScript
Initiation au JavaScript
 
Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10
 
AlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPAlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHP
 
Introduction TypeScript
Introduction TypeScriptIntroduction TypeScript
Introduction TypeScript
 
Orchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notesOrchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notes
 
Présentation JavaScript
Présentation JavaScriptPrésentation JavaScript
Présentation JavaScript
 
Introduction à ASP.NET
Introduction à ASP.NETIntroduction à ASP.NET
Introduction à ASP.NET
 
Une application en deux heure - PHP Québec Janvier 2009
Une application en deux heure - PHP Québec Janvier 2009Une application en deux heure - PHP Québec Janvier 2009
Une application en deux heure - PHP Québec Janvier 2009
 
Interface texte plein écran en Go avec TView
Interface texte plein écran en Go avec TViewInterface texte plein écran en Go avec TView
Interface texte plein écran en Go avec TView
 
Introduction à l'objet - Deuxième année ISIMA
Introduction à l'objet - Deuxième année ISIMAIntroduction à l'objet - Deuxième année ISIMA
Introduction à l'objet - Deuxième année ISIMA
 
Bureau
BureauBureau
Bureau
 

Viewers also liked

POWER POINT; PRIMERA PARTE DEL PROYECTO
POWER POINT; PRIMERA PARTE DEL PROYECTOPOWER POINT; PRIMERA PARTE DEL PROYECTO
POWER POINT; PRIMERA PARTE DEL PROYECTOhenrygarcia0301
 
Tecnologia ensayo
Tecnologia ensayo Tecnologia ensayo
Tecnologia ensayo Dalexandromv
 
Mercado alberto 12
Mercado alberto 12Mercado alberto 12
Mercado alberto 12chivas98
 
La publicidad Alan Huerta
La publicidad Alan HuertaLa publicidad Alan Huerta
La publicidad Alan HuertaAlan Huerta
 
J.carmona presentaciones power point actividades 37 71
J.carmona  presentaciones power point actividades 37 71J.carmona  presentaciones power point actividades 37 71
J.carmona presentaciones power point actividades 37 71wiichiitho
 
Débat 10 mai 2014
Débat 10 mai 2014Débat 10 mai 2014
Débat 10 mai 2014hanifiyyah
 
Ts102804895
Ts102804895Ts102804895
Ts102804895pahim01
 
Présentation France Angels Université Automne 2014
Présentation France Angels Université Automne 2014Présentation France Angels Université Automne 2014
Présentation France Angels Université Automne 2014FranceAngels
 
Grupo 2 de informatica
Grupo 2 de informaticaGrupo 2 de informatica
Grupo 2 de informaticadadf100
 
Vs escapada a islandia y auroras boreales pl-bp
Vs escapada a islandia y auroras boreales pl-bpVs escapada a islandia y auroras boreales pl-bp
Vs escapada a islandia y auroras boreales pl-bpviajessingulares
 
5 idées de génie pour être premier sur google
5 idées de génie pour être premier sur google5 idées de génie pour être premier sur google
5 idées de génie pour être premier sur googleJessy Seonoob
 
Le seigneur a dit a mon seigneur ... et nul n'osa dire que jesus est dieu
Le seigneur a dit a mon seigneur ... et nul n'osa dire que jesus est dieuLe seigneur a dit a mon seigneur ... et nul n'osa dire que jesus est dieu
Le seigneur a dit a mon seigneur ... et nul n'osa dire que jesus est dieuhanifiyyah
 
Le quartz rose présentation proprietes bienfaits lithotherapie
Le quartz rose présentation proprietes bienfaits lithotherapieLe quartz rose présentation proprietes bienfaits lithotherapie
Le quartz rose présentation proprietes bienfaits lithotherapieEquilibre Et Minéraux
 

Viewers also liked (20)

POWER POINT; PRIMERA PARTE DEL PROYECTO
POWER POINT; PRIMERA PARTE DEL PROYECTOPOWER POINT; PRIMERA PARTE DEL PROYECTO
POWER POINT; PRIMERA PARTE DEL PROYECTO
 
Tecnologia ensayo
Tecnologia ensayo Tecnologia ensayo
Tecnologia ensayo
 
Mercado alberto 12
Mercado alberto 12Mercado alberto 12
Mercado alberto 12
 
Cianuro
CianuroCianuro
Cianuro
 
La publicidad Alan Huerta
La publicidad Alan HuertaLa publicidad Alan Huerta
La publicidad Alan Huerta
 
¿Sabias que...?
¿Sabias que...?¿Sabias que...?
¿Sabias que...?
 
Mapas
MapasMapas
Mapas
 
J.carmona presentaciones power point actividades 37 71
J.carmona  presentaciones power point actividades 37 71J.carmona  presentaciones power point actividades 37 71
J.carmona presentaciones power point actividades 37 71
 
Débat 10 mai 2014
Débat 10 mai 2014Débat 10 mai 2014
Débat 10 mai 2014
 
L’est du Témiscamingue : petite histoire d’un compromis territorial / Étien...
L’est du Témiscamingue : petite histoire d’un compromis territorial / Étien...L’est du Témiscamingue : petite histoire d’un compromis territorial / Étien...
L’est du Témiscamingue : petite histoire d’un compromis territorial / Étien...
 
Ts102804895
Ts102804895Ts102804895
Ts102804895
 
Présentation France Angels Université Automne 2014
Présentation France Angels Université Automne 2014Présentation France Angels Université Automne 2014
Présentation France Angels Université Automne 2014
 
Grupo 2 de informatica
Grupo 2 de informaticaGrupo 2 de informatica
Grupo 2 de informatica
 
Vs escapada a islandia y auroras boreales pl-bp
Vs escapada a islandia y auroras boreales pl-bpVs escapada a islandia y auroras boreales pl-bp
Vs escapada a islandia y auroras boreales pl-bp
 
5 idées de génie pour être premier sur google
5 idées de génie pour être premier sur google5 idées de génie pour être premier sur google
5 idées de génie pour être premier sur google
 
Kmj
KmjKmj
Kmj
 
Le seigneur a dit a mon seigneur ... et nul n'osa dire que jesus est dieu
Le seigneur a dit a mon seigneur ... et nul n'osa dire que jesus est dieuLe seigneur a dit a mon seigneur ... et nul n'osa dire que jesus est dieu
Le seigneur a dit a mon seigneur ... et nul n'osa dire que jesus est dieu
 
Power dcadei
Power dcadeiPower dcadei
Power dcadei
 
Le quartz rose présentation proprietes bienfaits lithotherapie
Le quartz rose présentation proprietes bienfaits lithotherapieLe quartz rose présentation proprietes bienfaits lithotherapie
Le quartz rose présentation proprietes bienfaits lithotherapie
 
Ensayo. Educacion
Ensayo. EducacionEnsayo. Educacion
Ensayo. Educacion
 

Similar to [French] Discover haxe

Introduction à Docker et Gaudi
Introduction à Docker et GaudiIntroduction à Docker et Gaudi
Introduction à Docker et GaudiEmmanuel Quentin
 
WebHookIt @parisjs #4
WebHookIt @parisjs #4WebHookIt @parisjs #4
WebHookIt @parisjs #4Eric Abouaf
 
Docker le buzz est il justifié ?
Docker le buzz est il justifié ? Docker le buzz est il justifié ?
Docker le buzz est il justifié ? Romain Chalumeau
 
Quand java prend de la vitesse, apache maven vous garde sur les rails
Quand java prend de la vitesse, apache maven vous garde sur les railsQuand java prend de la vitesse, apache maven vous garde sur les rails
Quand java prend de la vitesse, apache maven vous garde sur les railsArnaud Héritier
 
Integrons en mode continu
Integrons en mode continuIntegrons en mode continu
Integrons en mode continuneuros
 
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...Jasmine Conseil
 
Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10Jean-Michel Doudoux
 
Javascript & tools
Javascript & toolsJavascript & tools
Javascript & toolsSlim Soussi
 
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016Fabien Arcellier
 
Réalisation d’applications Desktop Windows/Mac Os avec PHP
Réalisation d’applications Desktop Windows/Mac Os avec PHPRéalisation d’applications Desktop Windows/Mac Os avec PHP
Réalisation d’applications Desktop Windows/Mac Os avec PHPAlexandre Morgaut
 
Objet Direct Formation Java pour devenir autonome
Objet Direct Formation Java pour devenir autonomeObjet Direct Formation Java pour devenir autonome
Objet Direct Formation Java pour devenir autonomeformationobjetdirect
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsJulien Wittouck
 
20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders BattleArnaud Héritier
 
0251-formation-java-programmation-objet.pdf
0251-formation-java-programmation-objet.pdf0251-formation-java-programmation-objet.pdf
0251-formation-java-programmation-objet.pdfOmbotimbe Salifou
 
Introduction à docker.io
Introduction à docker.ioIntroduction à docker.io
Introduction à docker.ioNicolas Hennion
 
La boîte à outils de développements dans Firefox
La boîte à outils de développements dans FirefoxLa boîte à outils de développements dans Firefox
La boîte à outils de développements dans FirefoxChristophe Villeneuve
 
CodeBuilder_DevOpsCenter.pptx
CodeBuilder_DevOpsCenter.pptxCodeBuilder_DevOpsCenter.pptx
CodeBuilder_DevOpsCenter.pptxThomasParaiso1
 
Devoxx 17 - Orchestration de conteneurs : le choix des armes !
Devoxx 17 - Orchestration de conteneurs : le choix des armes !Devoxx 17 - Orchestration de conteneurs : le choix des armes !
Devoxx 17 - Orchestration de conteneurs : le choix des armes !Publicis Sapient Engineering
 
CI-Jenkins.pptx
CI-Jenkins.pptxCI-Jenkins.pptx
CI-Jenkins.pptxMEDOBEST1
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...XavierPestel
 

Similar to [French] Discover haxe (20)

Introduction à Docker et Gaudi
Introduction à Docker et GaudiIntroduction à Docker et Gaudi
Introduction à Docker et Gaudi
 
WebHookIt @parisjs #4
WebHookIt @parisjs #4WebHookIt @parisjs #4
WebHookIt @parisjs #4
 
Docker le buzz est il justifié ?
Docker le buzz est il justifié ? Docker le buzz est il justifié ?
Docker le buzz est il justifié ?
 
Quand java prend de la vitesse, apache maven vous garde sur les rails
Quand java prend de la vitesse, apache maven vous garde sur les railsQuand java prend de la vitesse, apache maven vous garde sur les rails
Quand java prend de la vitesse, apache maven vous garde sur les rails
 
Integrons en mode continu
Integrons en mode continuIntegrons en mode continu
Integrons en mode continu
 
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
 
Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10
 
Javascript & tools
Javascript & toolsJavascript & tools
Javascript & tools
 
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
 
Réalisation d’applications Desktop Windows/Mac Os avec PHP
Réalisation d’applications Desktop Windows/Mac Os avec PHPRéalisation d’applications Desktop Windows/Mac Os avec PHP
Réalisation d’applications Desktop Windows/Mac Os avec PHP
 
Objet Direct Formation Java pour devenir autonome
Objet Direct Formation Java pour devenir autonomeObjet Direct Formation Java pour devenir autonome
Objet Direct Formation Java pour devenir autonome
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 
20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle
 
0251-formation-java-programmation-objet.pdf
0251-formation-java-programmation-objet.pdf0251-formation-java-programmation-objet.pdf
0251-formation-java-programmation-objet.pdf
 
Introduction à docker.io
Introduction à docker.ioIntroduction à docker.io
Introduction à docker.io
 
La boîte à outils de développements dans Firefox
La boîte à outils de développements dans FirefoxLa boîte à outils de développements dans Firefox
La boîte à outils de développements dans Firefox
 
CodeBuilder_DevOpsCenter.pptx
CodeBuilder_DevOpsCenter.pptxCodeBuilder_DevOpsCenter.pptx
CodeBuilder_DevOpsCenter.pptx
 
Devoxx 17 - Orchestration de conteneurs : le choix des armes !
Devoxx 17 - Orchestration de conteneurs : le choix des armes !Devoxx 17 - Orchestration de conteneurs : le choix des armes !
Devoxx 17 - Orchestration de conteneurs : le choix des armes !
 
CI-Jenkins.pptx
CI-Jenkins.pptxCI-Jenkins.pptx
CI-Jenkins.pptx
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
 

[French] Discover haxe

  • 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
  • 7. Utilisation ➢ ➢ Déclaration d'une variable avec var Spécification possible (mais non obligatoire) du type d'une variable 7 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
  • 14. Compilation (2) ➢ Configurable TRÈS facilement grâce à un fichier “.hxml” ➢ Compilation : haxe fichier.hxml 14 20 février 2014
  • 15. Directives (1) ➢ Compilation conditionnelle (selon la cible) 15 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
  • 20. Tests (3) Classe de test 20 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
  • 27. Exemple concret: nodejs ➢ Classe http.Server Documentation de http.Server 27 20 février 2014
  • 28. Exemple concret: nodejs 28 Classe externe http.Server 20 février 2014
  • 29. Exemple concret: nodejs Exemple d'utilisation ➢ En voir plus ? https://github.com/clemos/node-api 29 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
  • 32. Conseil final Ne JAMAIS coder dans le code généré ! S'il vous plaît... 32 20 février 2014
  • 33. Bibliographie Le site officiel : http://haxe.org/ & 33 20 février 2014
  • 34. Merci pour votre écoute (https://github.com/JeUXdiCode/2014Fevrier20) 34