Scriptol, JavaScript, PHP, comparaison

Syntaxes comparées des trois langages de programmation.

Fonction basiques

Scriptol JavaScript PHP
print "Hello"
console.log("Hello");
echo "Hello", "\n";
print a[x .. y] 
console.log(a.slice(x,y-x+2));
print_r(array_slice($a,$x,$y-($x)+
   count($a)*(($y<0)-($x<0))+1));echo "\n";
a[.. y] = b[1 .. 3]
a.splice.apply(a,[0,y-0+1].
  concat(b.slice(1,4)));
array_splice($a,0,$y-(0)+count($a)*($y<0)+1,
  array_slice($b,1,3));
a[2 .. 8] = nil 
a.splice.apply(a,[2,7].concat([]));
array_splice($a,2,7);

JavaScript est quelquefois plus simple que PHP, quelquefois c'est l'inverse. Scriptol est toujours plus simple que les deux autres langages.

Structures de données

Scriptol JavaScript PHP
array a = [ 1, 2, 3 ]
var a=[1,2,3];
$a=array(1,2,3);
<car speed=150 name="Spitfire">
  <engine power=100></engine>
  <passengers num=4>
    "Clara, Dana, Elisa, Farah"
   </passengers>
</car>
var car={
  "speed":150,
  "name":"Spitfire",
  "engine":{
     "power":100
  },
  "passengers":{
  "num":4,
  "data":"Clara, Dana, Elisa, Farah"
 }
};
$car=[
  "speed"=>150,
  "name"=>"Spitfire",
  "engine"=>[
    "power"=>100],
    "passengers"=>[
      "num"=>4,
      "data"=>"Clara, Dana, Elisa, Farah"
   ]
];

Un objet XML est converti en tableau associatif en JS ou PHP. La structure XML à un équivalent JavaScript sous forme d'objets imbriqués, qui peut être sauvegardé dans un fichier au format JSON. JavaScript a donc toutes les possibilités de représentation évoluée et dynamique des données, mais sous une forme rudimentaire et peu lisible. Les autres langages ne disposent même pas de ces possibilités.
JSON est un moyen de sérialiser (copier dans un fichier) un tableau JavaScript.

Structures de contrôle

Scriptol JavaScript PHP
for int i in 0 .. 9 print i
for(i=0;i<=9;i++) 
 console.log(i);
for($i=0;$i<=9;$i++)
echo $i, "\n";
for int i in 0 .. 9
print i
/for
for(i=0;i<=9;i++) {
 console.log(i);
}
for($i=0;$i<=9;$i++)
{
echo $i, "\n";
}
if j in [ 1, 2, 3, 4 ] print "in"
if(([1,2,3,4].indexOf(j)!=-1)) {
console.log("in");
}
if(in_array($j,array(1,2,3,4)))
{
echo "in", "\n";
}
do
case x = 1: print 1
case x > 1: print 2
else print 0
/do
do {
   if(x===1) {
      console.log(1);
   }   
   else {   
     if(x>1) {
       console.log(2);
     }   
     else {
       console.log(0);
     }
   }
} while(false);
do
{
   if($x===1)
   {
      echo 1, "\n";
   }
   else
   {
   if($x>1)
   {
      echo 2, "\n";
   }
   else
   {
      echo 0, "\n";
   }
   }
}
while(false);
text t  
input "O/N?", t
if t.lower()
= "o": print "oui"
= "n": print "non"
else
print "quoi?"
/if
var t="";
process.stdout.write("O/N?");
t=fs.readSync(process.stdin.fd, 100, 0, 'utf8').shift();
process.stdin.pause();

t=t.toLowerCase();
if(t==="o") {
   console.log("oui");
}
else {
   if(t==="n") {
      console.log("non");
   }
else {
   console.log("quoi?");
}}
$t="";
echo "O/N?";
$fp=fopen("php://stdin","r");
$t=rtrim(fgets($fp,65536));
fclose($fp);

$t=strtolower($t);
if($t==="o")
{
   echo "oui", "\n";
}
else
{
   if($t==="n")
   {
      echo "non", "\n";
   }
else
{
   echo "quoi?", "\n";
}
}

La boucle for est commune à tous les langages, et la variation for in ou for each qui permet de scanner le contenu d'une liste, est ajoutée à tous les langages dynamiques. Cependant en JavaScript, for each est si peu performant qu'il est préférable d'utiliser la boucle for classique.

Le pattern-matching est implémenté dans Scriptol avec la structure do ... case.

Classes

Scriptol JavaScript PHP
class Car is Vehicle   
int speed   
int getSpeed()      
speed + 1
return speed
/class
var Car=(function(_super)
{
   scriptol.extends(Car,_super);
   Car.prototype.getSpeed=function()
   {
      this.speed+=1;
      return this.speed;
   }
   function Car() {
      _super.apply(this, arguments);
      this.speed=0;
   }
   return Car;
})(Vehicle);
class Car extends Vehicle
{
   var $speed=0;
   function getSpeed()
   {
      $this->speed+=1;
      return $this->speed;
   }
}

La déclaration d'une classe en JavaScript version 6 devient similaire à celle de Scriptol ou PHP, mais la compatibilité sur le Web ne viendra pas avant des années.