Joodo

Du HTML dans lequel on ouvre des zones de code.
Compilé à la volée, exécuté sur le serveur.

Joodo est le langage dans lequel sont écrites les pages .do. Une page est un fichier HTML ordinaire ; partout où il faut du calcul, on ouvre <%%> et on écrit du code. Le moteur compile la page à chaque requête et l'exécute immédiatement : pas d'étape de build, pas de binaire à déployer.

À quoi ça ressemble

<h2>Clients à relancer</h2>

<%
Script;
var Q, Nb;
Begin
Nb := '0';

SqlAssignDb(Q, Vars('Db'));
SqlQuery(Q, 'select nom, ville, solde from clients where solde > :seuil');
SqlParam(Q, 'seuil', '1000');

If SqlExec(Q) Then
  If SqlFirst(Q) Then
    Repeat
      EchoChar('<p>' + HtmlEncode(SqlField(Q, 'nom')));
      EchoChar(' — ' + FormatFloat('#,##0.00', SqlField(Q, 'solde')) + '</p>');
      Nb := Nb + 1;
    Until Not SqlNext(Q);

SqlFree(Q);
EchoChar('<p>' + Nb + ' client(s)</p>');
End;
%>

Une syntaxe de la famille Pascal : Begin / End, If … Then … Else, := pour l'affectation. Rien à apprendre de plus pour lire du Joodo si vous connaissez déjà un langage impératif.

Le Script; en tête indique un bloc qui s'exécute là où il est écrit, dans le flux de la page. Le bloc principal d'une page, lui, s'exécute avant tout le HTML : c'est là qu'on lit la requête et qu'on prépare les données, pas qu'on affiche.

Les quatre idées à retenir

Le HTML d'abord

Une page est du HTML dans lequel on insère du code, et non un programme qui fabrique du HTML. La mise en page reste lisible telle quelle.

Un seul type

Tout est chaîne de caractères. Les nombres, les dates et les booléens sont des chaînes interprétées selon le contexte. Pas de déclaration de type, pas de conversion à écrire.

Des structures par clés

A[3] et C.nom ne sont pas des tableaux ni des enregistrements, mais des clés composées. Un objet JSON entier s'aplatit ainsi en une seule opération.

292 fonctions intégrées

SQL, fichiers, dates, chaînes, JSON, HTTP, FTP, courriel, images, PDF, empreintes. La bibliothèque couvre ce qu'on écrit réellement dans une application de gestion.

Un exemple plus court

Aplatir une réponse JSON et la parcourir tient en quatre lignes :

jsonToObject(HttpGet('https://api.exemple.fr/clients'), Liste);

For I := 0 To Liste - 1 Do
  EchoChar(Liste[I].nom + ' (' + Liste[I].ville + ')<br>');

jsonToObject range le nombre d'éléments dans Liste et chaque champ sous une clé composée : Liste[0].nom, Liste[0].ville, et ainsi de suite. La même fonction charge un objet seul ou une collection entière.

Pour aller plus loin

La prise en main vous fait écrire votre première page et récapitule les quelques points qui surprennent au début. Le manuel est la référence complète : syntaxe, structures de contrôle, modèle de données, et les 292 procédures et fonctions avec leurs paramètres et leur résultat.