العوامل
الأولوية الأعلى أولًا. كل عامل ثنائي يرتبط من اليسار: a - b - c هو (a - b) - c.
| المستوى | العوامل | المعنى | أنواع المعاملات |
|---|---|---|---|
| 1 | ( ) f(…) | التجميع، استدعاء دالة مضمَّنة | |
| 2 | ! - ~ (أحادية) | النفي المنطقي، السالب، النفي على مستوى البت | !: أي نوع · -: Integer/Real · ~: Integer |
| 3 | * / | الضرب، القسمة | Integer/Real |
| 4 | + - | الجمع أو الربط، الطرح | Integer/Real، أو Text + Text |
| 5 | << >> | الإزاحة لليسار، الإزاحة الحسابية لليمين | Integer |
| 6 | < <= > >= | الترتيب | رقمان، أو قيمتا Text |
| 7 | == != | المساواة | أي نوع |
| 8 | & | AND على مستوى البت | Integer |
| 9 | ^ | XOR على مستوى البت | Integer |
| 10 | | | OR على مستوى البت | Integer |
| 11 | && | AND المنطقي (يُقيَّم الطرفان دائمًا) | أي نوع (قيمة الصدق) |
| 12 | || | OR المنطقي (يُقيَّم الطرفان دائمًا) | أي نوع (قيمة الصدق) |
لا يوجد عامل باقي القسمة (%)، ولا عامل أُس، ولا العامل الثلاثي (?:)، ولا عامل الفاصلة.
warning
لا تُقيِّم && و|| تقييمًا مختصرًا. يُقيَّم المعاملان دائمًا، الأيسر ثم الأيمن. يُنفَّذ استدعاء الدالة
المضمَّنة على اليمين حتى عندما يكون الطرف الأيسر قد حسم النتيجة، وإذا فشل ذلك الاستدعاء يتوقف الإجراء.
احمِ الاستدعاء بعبارة if متداخلة بدلًا من ذلك:
text = ClipboardGetText();
idx = StringGetIndexOf(text, ":");
// خطأ: عندما تكون idx هي -1، يظل StringGetSubstring(text, -1, 5) يُنفَّذ ويوقف الإجراء
// if (idx >= 0 && StringGetSubstring(text, idx, 5) == ":here") { ... }
// صحيح: لا يُنفَّذ الاختبار الثاني إلا عندما يتحقق الأول
if (idx >= 0) {
if (StringGetSubstring(text, idx, 5) == ":here") UtilityPrint("found");
}
warning
أولوية العوامل على مستوى البت أدنى من المقارنات (كما في C). يُقرأ flags & 4 == 4 على أنه
flags & (4 == 4)، أي flags & true، أي 0. أحِط القناع بأقواس دائمًا:
(flags & 4) == 4 أو (flags & 4) != 0.
warning
المقارنات لا تتسلسل. يُقرأ 0 < x < 10 على أنه (0 < x) < 10، وهو يقارن قيمة Bool بقيمة Integer
ويكون دائمًا false. اكتب x > 0 && x < 10.