Az Aikido programozási nyelv

Típusok, típuskonstrukciók


Típusszerkezet

Az Aikido egy gyengén típusos nyelv, és mivel interpretált, ezért minden objektum típusa futásidőben dől el. Az Aikido csak dinamikus típusokat tartalmaz.

Elemi típusok

Az Aikido számos, más nyelvekből ismert elemi típuson kívül, sok más konstrukciót is típusként kezel. Előbbiekről lesz szó az "Alaptípusok", utóbbiakról a "Speciális típusok" alfejezetben.

Alaptípusok

Aikidoban az alaptípusok a C++-ban, és Java-ban is megtalálható típusok:

Speciális típusok

A speciális típusok, amelyek nem feltétlenül találhatóak meg az Aikido mintájául szolgáló nyelvek mindegyikében:

Az általános típus

Aikidoban lehetőség van általános típusú változók definiálására. Az ilyen változók dinamikus típusa futás közben változhat.
Használata:

... generic x; x=5; //x most Integer x="alma"; //x most String ...

Típuskonstrukciók

Az Aikido az elemi típusokon felül különböző típuskonstrukciós rendszereket is kínál.

Sorozat konstrukció

A sorozat konstrukció Aikidoban a következő módon került megvalósításra:

Direkt szorzat konstrukció

Aikidoban beépített rekord típus nincs, a direkt szorzat konstrukciót a class kulcsszóval tudjuk létrehozni, mint saját típust.

class szemely(integer id, nev, suly) { ... }

Vegyes konstrukciók

Típuskonverziók

Az Aikido legfőbb alapelve a típuskonverziók esetében, hogy ami konvertálható, azt konvertálja is.

var nev = "korte"; var darab = 5; var szoveg = "A " + nev + " gyumolcsbol " + darab + " darab van keszleten."; szoveg -> stdout; //A körte gyümölcsből 5 darab van keszleten.

Kifejezések konvertálása esetén természetesen adott egy természetes konverziós irány. El kell tudni dönteni a kifejezés kiértékelése előtt, hogy az adott operandus és operátor felállásban milyen típusúként kezeljük a kapott operandusokat.
Az alaptípusok esetében ez a következő szabályokat jelenti:
integer integer nem kell konverzió
integer real az integer érték először real-lé konvertálódik, majd megtörténik az operátor kiértékelése
integer string az integer string-gé konvertálódik, majd megtörténik az operátor kiértékelése
real real nem kell konverzió
string string nem kell konverzió
string integer az integer string-gé konvertálódik, majd megtörténik az operátor kiértékelése
string real

Kifejezések, operátorok

Aikidoban a kifejezések operátorok és operandusok meghatározott szintaxisú sorozata. Aikidoban az operátorok nagyon sokoldalúak, köszönhetően az alapértelmezés szerint meglévő túlterheléseknek. A következő táblázat tartalmazza az operátorok precedenciáját Aikidoban, felülről lefelé a csökkenő prioritás.

new, operator
[], (), ., ++ (postfix), -- (postfix)
sizeof, typeof, cast, !, -, +, ~, ++, --
*, /, %
<< (bit-eltolás balra), >> (aritmetikai bit-eltolás jobbra), >>> (logikai bit-eltolás jobbra)
<, >, <=, >=, instanceof, in
==, !=
& (bitenkénti ÉS)
^
| (bitenkénti VAGY)
&&
||
?:
->
=, +=, -=, *=, /=, %=, <<=, >>=, >>>=, &=, |=, ^=

A >> és a >>> operátorok közötti különbség az előjelek kezelésében van. A >> operátor előjel kiegészítést is végez balról, míg a >>> operátor előjeltől függetlenül 0-val tölti ki a rendelkezésre álló helyet.

Operátortúlterhelés

Aikidoban lehetőség van bizonyos operátorok túlterhelésére. Ezek a következők:

* () -> [] + - /
% ~ ^ ! & | <<
>> >>> < > <= >= ==
!= sizeof typeof foreach cast in

Az operátorok túlterhelése egész egyszerűen az operátor megvalósítását jelenti az adott osztályban. Példa:
class Teszt { public operator + (arg1) { ... } } var x = new Teszt() x+1 -> stdout

A fenti példakódban az automatikus konverziók is lefutnak, amennyiben azt az x változó típusa szükségessé, és lehetővé teszi. Az x+1 operációban az arg1 paraméter értéke 1, vagyis a kifejezés ugyanazt jelenti mint: x.operator+(1) .

Operátorok sokoldalúsága

Az Aikido operátorai típustól függően több alapértelmezett jelentéssel is bírhatnank. Ezek közül pár példa: