Les objets de type array sont utiles pour stocker les noms ou les coordonnées de points (utile pour construire des objets dans l'espace, puisque CaRMetal gère les arêtes cachées), ou pour faire de la statistique dans un contexte graphique (recherche de distances médianes ou moyennes par exemple)
Les objets de type String et les RegExp à la Perl sont gérées par l'éditeur de CaRMetal, ce qui permet de simuler une tortue LOGO et de construire des figures basées sur les L-systems.
Grâce aux objets de type Date de JavaScript, CaRMetal sait quelle heure il est, ce qui permet de faire entrer le temps qui passe dans la figure. Il est possible par exemple d'incorporer une horloge à aiguilles tournantes dans une figure dynamique!
Une procédure est une fonction sans l'instruction return. Une fonction (éventuellement de plusieurs variables) peut très bien s'appeler elle-même, devenant ainsi récursive. Voici comment CaRMetal peut calculer récursivement un pgcd:
function pgcd(a,b) { if ((b % a) == 0){ return (a); } else { return (pgcd(a,b-a)); } }
Comme en JavaScript les objets sont définis comme des fonctions, il est possible de créer des objets comme par exemple le type nombre complexe dont ci-dessous seule la méthode dessine est implémentée (il manque au moins les méthodes somme, produit, inverse et conjugué!):
function complexe(x,y){ //attributs de l'objet complexe: this.real=x; this.imag=y; this.modulus=Math.sqrt(x*x+y*y); this.argument=Math.atan2(y,x); //méthodes de l'objet complexe: this.dessine=function(){//dessine le point p=Point(x,y); } this.conjugate=function(){//renvoie un complexe return new complexe(x,-y); } this.inverse=function(){//renvoie un complexe return new complexe(x/(x*x+y*y),-y/(x*x+y*y)); } } //Les opérations ne peuvent pas être des méthodes de l'objet // "complexe" parce qu'elles attendent 2 complexes function complexe_somme(a,b){//a et b sont des complexes return new complexe(a.real+b.real, a.imag+b.imag) } function complexe_produit(a,b){//a et b sont des complexes var r=a.real*b.real-a.imag*b.imag; var i=a.real*b.imag+a.imag*b.real; return new complexe(r,i); } function complexe_quotient(a,b){ return complexe_produit(a,b.inverse()); } var z = new complexe(3,2); z.dessine(); Println(z.argument*180/Math.PI); var zbar = z.conjugate();zbar.dessine(); var zsomme=complexe_somme(z,zbar); var u=complexe_quotient(z,zbar); u.dessine();
Bien que
On peut néanmoins aller plus loin dans l'interaction entre les objets créés par CaRScript et CaRMetal.