Génération de code

La génération de code consiste à transformer les blocs d'un espace de travail en une chaîne de code pouvant être exécutée.

La génération de code est extrêmement importante, car c'est elle qui permet à vos blocs d'effectuer des actions, comme évaluer des expressions arithmétiques, déplacer un personnage dans un labyrinthe ou configurer une boutique en ligne.

Blockly n'exécute pas les blocs directement. À la place, vous générez des chaînes de code, puis vous les exécutez.

Générateurs de code

Pour générer du code, vous utilisez une instance de générateur de code.

Cet extrait de code montre comment générer du code JavaScript pour les blocs d'un espace de travail:

// javascriptGenerator is a code generator that makes JavaScript strings.
import {javascriptGenerator} from 'blockly/javascript';

const code = javascriptGenerator.workspaceToCode(myWorkspace);

Pour en savoir plus sur les différents générateurs de code fournis par Blockly et sur la façon d'y accéder, consultez la section Présentation du générateur de code.

Générateurs de code en bloc

Chaque bloc est associé à un générateur de code de bloc qui définit le code qu'il génère. Un générateur de code en bloc doit être défini pour chaque langage que vous souhaitez générer.

Ces extraits de code définissent un générateur de code de bloc JavaScript pour un bloc "progressive" :

javascriptGenerator.forBlock['my_custom_block'] = function(block, generator) {
  const steps = block.getFieldValue('FIELD_NAME');
  // moveForward is a function you would have to define yourself and provide
  // within your execution context.
  return `moveForward(${steps});\n`;
}

Pour en savoir plus sur la définition de vos générateurs de code de bloc, consultez la section Générateurs de code bloc.

Exécution

Une fois le code généré, vous devez déterminer comment l'exécuter. Le choix de la manière de l'exécuter est très spécifique à l'application et sort du champ d'application de Blockly.

Pour en savoir plus sur les façons d'exécuter du code, consultez Exécution de code.