Скриптол, JavaScript, PHP, сравнение
Сопоставленные синтаксисы трех языков программирования.
Основная функция
Скриптол |
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 иногда проще PHP, иногда наоборот. Скриптол всегда проще, чем два других языка.
Структуры данных
Скриптол |
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"
]
];
|
Объект XML преобразуется в ассоциативный массив в JS или PHP. XML-структура имеет эквивалент JavaScript в виде вложенных объектов, который можно сохранить в файле формата JSON. Поэтому JavaScript имеет все возможности для развитого и динамического представления данных, но в рудиментарной и не очень читаемой форме. У других языков таких возможностей даже нет.
JSON - это способ сериализации (копирования в файл) таблицы JavaScript.
Контрольные структуры
Скриптол |
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";
}
}
|
Цикл for является общим для всех языков, и вариация для in или для each, которая позволяет просканировать содержимое списка, добавляется ко всем динамическим языкам. Однако в JavaScript для each настолько мало производительности, что лучше использовать классический цикл для.
Паттерн-совпадение реализовано в Script со структурой do... поле.
Классы
Скриптол |
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;
}
}
|
Объявление класса в JavaScript версии 6 становится похожим на то, что было в Script или PHP, но веб-совместимость наступит не раньше многих лет.