إنتقل إلى المحتوى الرئيسي

العبارات

القواعد النحوية​

program = { statement } ;
statement = assignment | exprStmt | block | ifStmt | forStmt | ";" ;
assignment = identifier "=" expression ";" ;
exprStmt = expression ";" ; (* result discarded, e.g. a builtin call *)
block = "{" { statement } "}" ;
ifStmt = "if" "(" expression ")" statement [ "else" statement ] ;
forStmt = "for" "(" identifier "=" expression ";"
expression ";"
identifier "=" expression ")" statement ;
expression = see the precedence table under Operators ;
call = identifier "(" [ expression { "," expression } ] ")" ;

الإسناد​

name = expression; عبارة، وليست تعبيرًا. لذا فإن a = b = 1; وif (x = 5) وf(x = 1) كلها أخطاء. لا يوجد إسناد مركب (+=) ولا ++/--. اكتب i = i + 1;.

عبارات التعبير​

أي تعبير يليه ; هو عبارة، وتُهمَل قيمته. هكذا تُستدعى الدالة المضمَّنة من أجل أثرها: WindowMinimize(w);. تُتجاهل قيمة Bool التي تُرجعها معظم الدوال المضمَّنة ما لم تلتقطها: ok = FileDelete(p);.

if / else​

الأقواس حول الشرط مطلوبة. الفرع عبارة واحدة أو كتلة { }. إن else if مجرد else عبارتها if أخرى، لذا تعمل السلاسل. تنتمي else المعلّقة إلى أقرب if. استخدم الأقواس المعقوصة عندما يكون ذلك ملتبسًا.

n = MathRandom(1, 100);
if (n < 10) {
size = "small";
} else if (n < 50) {
size = "medium";
} else {
size = "large";
}
if (n == 42) UtilityPrint("the answer"); // فرع من عبارة واحدة، بلا أقواس معقوصة

for​

for (init; condition; step) body. الأجزاء الثلاثة كلها مطلوبة. يجب أن يكون كل من init وstep إسنادًا واحدًا بالشكل name = expression، بلا قوائم مفصولة بفواصل وبلا استدعاءات مجردة. يمكن أن يكون condition أي تعبير، ويُفحص قبل كل دورة، بما فيها الأولى. يُنفَّذ step بعد كل دورة.

for (i = 10; i > 0; i = i - 2) {
UtilityPrint(StringFormat("{0}", i, "")); // 10 8 6 4 2
}

إنها الحلقة الوحيدة. لا يوجد while ولا do ولا break ولا continue ولا for x in …. البدائل المعتادة موجودة في أنماط التحكم في التدفق.

الكتل​

تجمع { ... } العبارات في أي موضع يُتوقع فيه عبارة واحدة، بما في ذلك المستوى الأعلى. ولا تفتح نطاقًا جديدًا للمتغيرات.