# Blockly

Blockly est une bibliothèque logicielle JavaScript permettant de créer des environnements de développement utilisant un langage graphique. C'est un projet open source de Google, publié sous la licence Apache 2.0. Présenté à la Maker Faire 2012, il vise à démocratiser le développement web.
Concrètement, il s'agit d'assembler des blocs dans un éditeur visuel directement sur une page web. Le code généré est exempt d'erreurs de syntaxe et peut être exporté en JavaScript, Python, PHP, Dart ou Lua.

## Interface utilisateur

L'interface utilisateur de Blockly est composée de deux éléments : une boîte à outils et un espace de travail. La boîte à outils contient tous les blocs disponibles pour créer le programme, ces blocs sont présentés seuls ou en catégories. Les blocs de la boîte à outils peuvent être déplacés (par "glisser-déposer") au sein de l'espace de travail afin de créer un programme.
Les blocs sont définis par le créateur de l'interface et peuvent être assemblés selon des règles prédéfinies de placement vis-à-vis des autres blocs.

### Les blocs prédéfinis

Il existe de nombreux blocs prédéfinis qui ont l'avantage d'être traduits en JavaScript, Python, PHP, Lua, Dart. Ils sont regroupés en différentes catégories :
* Logique : Contient des blocs de définitions de booléens, de vérification d'égalité et de conditions
* Boucles : Contient des blocs permettant de faire des boucles
* Mathématiques : Contient les blocs de création de nombres ainsi que les opérations mathématiques, certaines fonctions de bases (sin, cos, racine carrée, ...) ainsi que des valeurs (pi)
* Texte : Contient des blocs permettant la création de texte et des opérations standards (concaténation, récupération d'une lettre, ...)
* Listes : Contient des blocs de création de listes ainsi que des opérations standards (longueur, récupération d'un élément, ...)
* Couleur : Contient des blocs définissant une couleur.
* Variables : Contient un bloc pour créer une nouvelle variable, ainsi que les opérateurs de modification et de récupération de la valeur d'une variable déjà créée.
* Fonctions : Contient des blocs pour créer une nouvelle fonction (avec ou sans valeur de retour), ainsi que les blocs pour utiliser les fonctions existantes (appel de fonction).

## Personnalisation

En plus des blocs fournis dans la bibliothèque standard de Blockly, des blocs peuvent être créés pour adapter Blockly à un contexte particulier. Blockly fournit un outil appelé Blockly Developer Tools pour créer de nouveaux blocs.

### Caractéristiques des blocs

Chaque bloc a une forme prédéfinie qui permet de limiter son usage à certaines situations, cette forme est définie par les connexions avec d'autres blocs, ces connexions pouvant être externes (les blocs précédents et suivants) mais également internes (arguments, blocs internes, ...).
La définition d'un bloc doit être stockée soit sous format JSON soit en code JavaScript pour être ajoutée à la boîte à outils. La définition visuelle d'un bloc doit être accompagnée de sa traduction dans un langage (ou plusieurs), de manière à pouvoir traduire l'intégralité des blocs formant un programme dans un langage de programmation existant, en évitant toute erreur de syntaxe.

## Caractéristiques

* Application web en JavaScript du côté client (sans plugin)
* Support pour tous les principaux navigateurs : Chrome, Firefox, Safari, Opera, Internet Explorer, Microsoft Edge
* Support pour les navigateurs sous Android et iOS
* Traduction instantanée des blocs dans un ou plusieurs langages de programmation (sans erreur de syntaxe pour les blocs prédéfinis)
* Exécution bloc par bloc possible si l'ensemble des blocs est traductible en JavaScript, en utilisant un interpréteur JavaScript dans le navigateur.
* Traduction des blocs dans plus de 50 langues
* Support pour les systèmes d'écriture de gauche à droite et de droite à gauche

## Applications utilisant Blockly

Blockly est utilisé dans un grand nombre de projets :
* Blockly Games, un ensemble de jeux éducatifs pour enseigner les concepts de programmation tels que les boucles et les conditions.
* App Inventor, pour créer des applications Android.
* Code.org pour enseigner une introduction à la programmation à des millions d'étudiants dans le cadre de l'Hour of Code.
* Scratch