IF: ELSEIF olmadan çok koşullu mantık

TROIA'nın IF yapısı IF condition THEN ... ELSE ... ENDIF; şeklindedir. En çok şaşırtan nokta: ELSEIF yoktur. Üçüncü bir koşul eklemek istediğinizde ELSE bloğunun içine yeni bir IF yazmanız gerekir:

IF PUAN >= 90 THEN
    NOT = 'AA';
ELSE
    IF PUAN >= 70 THEN
        NOT = 'BA';
    ELSE
        NOT = 'FF';
    ENDIF;
ENDIF;

Ayrıca TROIA, && (ve) ve || (veya) operatörlerinde kısa devre (short-circuit) yapmaz — ilk koşul sonucu belirlemeye yetse bile ikinci koşul her zaman çalıştırılır. İkinci koşulda bir metod çağrısı varsa bu, beklenmedik bir yan etkiye (side effect) yol açabilir.

SWITCH: BREAK gerekmez

SWITCH ifadesi yalnızca bir değişken alır, ifade (expression) kabul etmez ve karşılaştırmayı metin (string) olarak yapar:

SWITCH DURUMKODU
CASE '1':
    SONUC = 'Beklemede';
CASE '2', '3':
    SONUC = 'Onaylandı';
DEFAULT:
    SONUC = 'Bilinmiyor';
ENDSWITCH;

Diğer dillerin aksine TROIA'da BREAK gerekmez ve desteklenmez — her CASE bloğu kendiliğinden biter, bir sonrakine "düşmez" (fall-through yoktur).

WHILE, BREAK ve CONTINUE

Klasik döngü WHILE condition BEGIN ... ENDWHILE; şeklindedir. BREAK döngüyü tamamen keser, CONTINUE kalan bloğu atlayıp döngü başına döner:

LOCAL:
    INTEGER I;

I = 0;
WHILE I < 10
BEGIN
    I = I + 1;

    IF I % 2 == 0 THEN
        CONTINUE;
    ENDIF;

    IF I == 7 THEN
        BREAK;
    ENDIF;

    SONUC = SONUC + I + ',';
ENDWHILE;

Sonuç

TROIA'nın akış kontrol komutları tanıdık görünür, ama ELSEIF yokluğu ve &&/||'nin kısa devre yapmaması, başka dillerden gelen geliştiricilerin en sık düştüğü iki tuzak.