İlişkisel operatörler: >= ve <= şeklinde yazılır

TROIA'da büyük-eşit ve küçük-eşit operatörleri, birçok dilde olduğu gibi >= ve <= şeklinde yazılır — tersi (=>, =<) geçerli değildir:

IF STOKMIKTARI >= 10 THEN
    DURUM = 'YETERLI';
ELSE
    DURUM = 'KRITIK';
ENDIF;

IF INDIRIMORANI <= 0 THEN
    INDIRIMORANI = 0;
ENDIF;

Eşitlik kontrolü ==, eşit değil kontrolü != ile yapılır (= tek başına atama operatörüdür, eşitlik testi değildir).

İki farklı atama yöntemi

MOVE ... TO komutu ifade (expression) desteklemez, yalnızca sabit bir değeri veya değişkeni doğrudan taşır:

MOVE 'Hello World' TO STRINGVAR1;
MOVE STRINGVAR1 TO STRINGVAR2;

MOVE 3 + 1 TO INTEGERVAR1; /* gecersiz, MOVE ifade desteklemez */

= operatörü ise sağ tarafta ifade kullanılmasına izin verir:

INTEGERVAR1 = 3 * (5 + INTEGERVAR1);
INTEGERVAR1 = ABS(5 - 10);

Mantıksal operatörler

TROIA kodunda IF, WHILE, LOOP koşullarında ! (değil), && (ve), || (veya) kullanılır. AND/OR/NOT kelimeleri ise sadece kod içine yazılan SQL cümlelerinde geçerlidir, TROIA koşul ifadelerinde çalışmaz.

Tip dönüşümü: otomatik casting

TROIA'da basit tipler (STRING, INTEGER, DECIMAL, DATE...) arasında ayrı bir casting operatörüne gerek yoktur, atama sırasında otomatik dönüşüm yapılır. Dönüşüm başarısız olursa hedef değişkene varsayılan değeri atanır:

OBJECT:
    STRING KAYNAKSTR,
    DOUBLE HEDEFDOUBLE,
    DATE HEDEFTARIH;

KAYNAKSTR = '6.0';
HEDEFDOUBLE = KAYNAKSTR;   /* HEDEFDOUBLE: 6.0 */

KAYNAKSTR = '25.11.1984';
HEDEFTARIH = KAYNAKSTR;   /* HEDEFTARIH: 25.11.1984 */

TABLE, VECTOR ve sınıf örnekleri gibi kompleks tipler için otomatik casting desteklenmez — bu tipler arasında veri taşımak için TROIA'nın ayrı komutları vardır (özellikle tablolar için).

Sonuç

Operatör setini doğru yazmak (özellikle >=/<= sırası) küçük ama sık yapılan bir hata kaynağıdır. MOVE ile = arasındaki fark da aynı derecede önemli: ifade kullanmanız gerekiyorsa = kullanmak zorundasınız.