HAKUROU L'amour est dans le code

DJS: Du sucre syntaxique pour javascript

DJS: Du sucre syntaxique pour javascript<br>

La possibilité d'écrire des classes en JavaScript approche gràce à la future mouture de ECMAScript 6, mais en attendant on peut soit utiliser des bibliothèques, soit des préprocesseurs, j'ai choisi de faire le mien pour le fun !

De nombreuses solutions permettent de simplifier l'écriture du javascript et notamment des classes, les préprocesseurs ont le vent en poupe et deux en particuliers se sont distingués: CoffeeScript et TypeScript.

Les deux sont fort intéressants, le premier est inspiré Python, l'autre semble inspiré du C# ou encore AS3 de par sa façon de déclarer le typage.

Pourtant au final aucun des deux ne m'a inspiré pour une utilisation quotidienne. C'est au détour de la découverte du langage Dart que j'ai eu des drôles de sensations. Après avoir codé quelques scripts j'ai pu me rendre compte de sa puissance, j'ai pu voir qu'il serait sympa de battir des applications entièrement sous ce langage comme on pourrait le faire avec Angular ou BackBone, mais pour un site web classique ou un extranet n'utilisant pas principalement du javascript pour dynamiser le tout, ce n'est pas une bonne solution.

 

Je ne demande pas grand chose, juste de pouvoir modulariser mon code et faire de l'objet. Qu'a celà ne tienne, je pars donc faire mon propre parseur en me basant sur le parseur que j'avais fait pour le mini lisp.

DJS est une sorte de moteur de macro comme en C, car il ne va pas analyser tout le code javascript. En effet il ne parse uniquement que son propre langage, le reste étant accepté et transmis dans la source finale, par exemple, le contenu d'une méthode dans DJS sera repris sans être parsé.

Ce qui induit que toute erreur javascript dans DJS sera également retranscrite dans la source finale, le parseur ne s'en inquiètera pas et ce sera au développeur de vérifier son code, ça ne veut pas dire que DJS n'est pas utilisable.

 

DJS apporte donc quelques solutions telles que:

  • l'écriture de classes
  • l'héritage
  • les namespaces
  • les imports

 

DJS peut être utilisé en solution CLI couplée à un IDE afin de compiler vos fichiers js en un fichier final ou bien il peut être intégré à un projet et faire la transpilation à la volé:

// Utilisation via PHP
$djs = new \djs\DJS();
$i->parseFile(
    dirname(__FILE__).'/demo/main.djs', 
    dirname(__FILE__).'/resources/main.js'
);

Dans l'exemple on demande le parsing d'un fichier source main.djs afin de constituer le fichier main.js.

L'écriture est tout de même plus aisée que les prototypes:

class Vehicle
{
    // Déclaration d'un constructeur
    construct()
    {
    }

    klaxon()
    {
        console.log("pouet pouet");
    }
}

class Truck extends Vehicle
{
    construct()
    {
        // Appel au constructeur parent
        super.construct();
    }

    klaxon()
    {
        console.log("TuuuuTuuuuu");
    }
}

 

Derrière, ce code est transpilé en classes javascript classiques usant de prototype.

Les namespaces sont tout aussi simples à écrire:

namespace myproject
{
    class Customer
    {
        // ...
    }
}


Les imports permettent d'éclater le code et d'enfin faire une classe par fichier comme dans n'importe quel langage civilisé:

import "Orders.djs";
import "Customers.djs";

namespace cart
{
	class CartController
	{
		// Contenu de la classe
	}
}

Les fichiers sont inclut par rapport au fichier en cours de parsing, là par exemple Orders.djs et Customers.djs sont dans le même dossier que CartController.

 

Pour tester DJS, il suffit de le télécharger sur github https://github.com/hakurou/DJS.