Un CaRScript est un script pour CaRMetal. Le terme est un néologisme obtenu par apocope et aphérèse sur l'expression "CaRMetal-JavaScript". Le langage des CaRScripts est donc JavaScript. Mais des instructions spécifiques à la géométrie dynamique sont incluses dans la boîte à outil des CaRScripts, ce qui tend à donner des codes courts, par rapport à l'effet produit. Et l'usage conjoint du langage de scripts et de la géométrie dynamique permet d'avoir des figures à la fois complexes et dynamiques.
DrGeo est muni d'un langage de script, permettant de construire notamment des fractales. Ce langage issu de LISP est basé sur la récursivité et n'est pas très emblématique de la démarche algorithmique.
Kig est lui aussi muni d'un langage de script, à savoir Python (langage). Ce langage de script est un langage objet ce qui peut le faire trouver un peu compliqué pour un usage en classe.
Cinderella (logiciel) est depuis la version 2, muni de son propre langage de script appelé CindyScript. CindyScript est un langage procédural donc adapté à l'enseignement de l'algorithmique en Lycée.
CaRMetal utilise pour langage de script, JavaScript, langage proche de Java (langage), c++, le langage de programmation d'xcas mais aussi du langage Asymptote (langage de dessin vectoriel).
Il est possible de donner à un objet un aspect qui dépend du résultat d'un test, comme dans ce début (le calcul n'est pas effectué) d'implémentation du calcul de pi par la méthode de Monte-Carlo:
for(n=1;n≤100;n++){ x=Math.random(); y=Math.random() p=Point(x,y); if(x*x+y*y<1){ SetColor(p,"red"); } else { SetColor(p,"blue"); } }
La syntaxe des boucles par JavaScript n'est pas des plus simples, mais elle permet facilement d'avoir des boucles où l'indice ne suit pas une progression arithmétique, comme dans cette liste des nombres premiers de la catégorie nombre de Fermat:
for(p=1;p≤16;p*=2){ Println(Math.pow(2,p)+1); }
Pour obtenir une boucle à condition de sortie, on clique sur while ou sur do..while dans le menu JavaScript en bas à droite. Ces boucles sont utiles pour fabriquer des figures récursives mais aussi pour simuler les boucles à nombre prédéfini d'exécutions:
for(i=1;i≤10;i++){ Println(i); }
a le même effet que
i=1; while(i≤10){ Println(i); i=i+1; }
Le script du triangle de Sierpinski est assez court en CaRMetal grâce à l'abondance d'instructions graphiques toutes faites:
a=Point(-4,-2); b=Point(4,-2); c=Point(0,4); m=Point(Math.random(),Math.random()); SetHide(m,true); for(n=0;n≤2000;n++){ dé=Math.ceil(Math.random()*3); //dé à trois faces! switch(dé){ case 1: {p=MidPoint(a,m); break; } case 2: {p=MidPoint(b,m); break; } case 3: {p=MidPoint(c,m); break; } } SetPointType(p,"point"); m=p; }
Seulement la figure est dynamique: On peut bouger les trois premiers points construits et le nuage de points suit le mouvement.
Les objets créés dans les CaRScripts sont en général des objets de type chaîne de caractères. Par exemple,
a=Point(2,3);
crée un point et met son nom dans la variable a. Les coordonnées initiales du point sont 2 et 3 mais celui-ci peut bouger avec la souris puisqu'il n'a pas été fixé. On peut aussi créer en programmation procédurale par
Point("A",2,3);
Une fois que le nom d'un objet est stocké dans une variable, il est possible de faire appel à cette variable pour utiliser l'objet. Par exemple
a=Point(2,3); SetHide(a,true); b=Point(4,5); SetPointType(b,"cross"); s=Segment(a,b);
L'effet est de cacher le premier point et de donner au second point une forme de croix puis de construire le segment joignant ces deux points, segment dont le nom est stocké dans la variable s.
Les constructions telles que Point s'obtiennent en cliquant sur des icônes à droite de l'éditeur JavaScript et ce faisant on obtient un exemple tout fait qu'on n'a plus qu'à modifier. Ce remplacement de la création par la modification est un paradigme issu du monde de la technologie: Choisir un outil dans une boîte à outils est plus rapide qu'avoir à construire l'outil.
Pour afficher le contenu d'une variable numérique (utile pour le débogage) on dispose de la fonction Println mais aussi de la possibilité d'ouvrir une fenêtre d'affichage de données avec Alert(). Ainsi, pour savoir ce que contient la variable x, on a le choix entre
Println(x); Alert(x);
En réalité, l'objet affiché est une chaîne de caractères, au besoin convertie automatiquement depuis un autre type, et il est possible d'obtenir des affichages complexes avec la concaténation de chaînes. Une entrée de données est également possible, soit avec Input qui ouvre une boîte d'entrée de données, soit avec InteractiveInput qui demande à l'utilisateur de sélectionner un objet géométrique de la figure, en cliquant dessus. Ces instructions en JavaScript s'obtiennent en cliquant sur les entrées correspondantes dans le menu en bas à droite de l'éditeur JavaScript.
Dans les exemples ci-dessus, les coordonnées des points sont données sous forme numérique. En fait elles sont automatiquement converties en chaînes de caractères, et il est tout-à-fait possible d'entrer les coordonnées des points directement sous forme de chaînes de caractères! Et dans ce cas, écrire la chaîne dans le langage de CaRMetal permet de créer par programme des objets dynamiques. Par exemple
a=Point("2.72","3.14"); b=Point("round(x_a)","round(y_a)");
Deux points sont créés, l'un mobile, l'autre qui suit le premier, mais en gardant des coordonnées entières (c'est donc un entier de Gauss). Comme on ne sait pas d'avance comment CaRMetal a nommé le point, on peut avoir son abscisse avec "x("+a+")"qu'on peut abréger en x_a.