قواعد الأنواع المختلطة
لا يوجد تحويل ضمني عام. لكل عامل قائمة قصيرة من مجموعات الأنواع التي يفهمها. أي مجموعة أخرى لا تُطلق
خطأ، بل تعطي بهدوء Integer 0 (أو false لعمليات الترتيب) ويستمر البرنامج النصي في العمل. هذا
مقصود، حتى لا تُجهض قيمةٌ شاذة واحدة الإجراءَ في منتصفه. ويعني ذلك أيضًا أن التعبير ذا النوع الخاطئ يفشل
بصمت، لذا تحقق باستخدام UtilityPrint عندما تبدو النتيجة خاطئة.
| العامل | المجموعات المقبولة ← النتيجة | أي شيء آخر |
|---|---|---|
+ | Text + Text → Text (ربط) Integer + Integer → Integer مزيج Integer/Real → Real | 0 |
- * | Integer ∘ Integer → Integer مزيج Integer/Real → Real | 0 |
/ | Integer / Integer → Integer، مقتطَعًا نحو الصفر (-7 / 2 يساوي -3)مزيج Integer/Real → Real القسمة على صفر ← 0 أو 0.0، بلا خطأ | 0 |
== != | النوع نفسه ← مقارنة بالقيمة (Text بشكل مطابق وحساس لحالة الأحرف، وWindow بالمقبض) Integer مقابل Real ← مقارنة عددية ( 5 == 5.0) | لا يتساويان أبدًا: 1 == true و"5" == 5 وw == 0 كلها false |
< <= > >= | رقمان (يُسمح بمزيج Integer/Real) ← ترتيب عددي Text مقابل Text ← ترتيبي، حساس لحالة الأحرف (وحدات ترميز UTF-16: "Z" < "a") | false للأربعة كلها، لذا فإن !(a < b) لا تعني a >= b هنا |
&& || ! | أي أنواع، عبر قيمة الصدق ← Bool | |
& | ^ | Integer ∘ Integer → Integer | 0 (يُحتسب المعامل من نوع Bool أو Real: true & true يساوي 0) |
<< >> | Integer بمقدار Integer من 0 إلى 63 ← Integer. يحافظ >> على الإشارة: -16 >> 2 يساوي -4. | 0، بما في ذلك مقادير الإزاحة الأقل من 0 أو الأكبر من 63 |
- الأحادي | Integer → Integer، Real → Real | 0 |
~ | Integer → Integer (~0 يساوي -1) | 0 |
التحويل بين الأنواع:
| من ← إلى | الطريقة |
|---|---|
| Integer → Real | تلقائي عند تمريره إلى معلمة دالة مضمَّنة مُعلَنة من نوع Real؛ وفي غير ذلك n * 1.0 (أي عملية حسابية مع Real تعطي Real) |
| Real → Integer | MathRound(r) (يقرّب الأنصاف بعيدًا عن الصفر)، أو MathFloor(r) أو MathCeil(r) |
| أي شيء ← Text | StringFormat("{0}", value, "") |
| Bool → Integer | if (b) n = 1; else n = 0; |
| Text ← رقم | StringToNumber(text, false) لما يكتبه شخص (بتنسيقه الإقليمي؛ ويجب أن تتبعه مجموعات الأرقام، لذا 1,5 ليس رقمًا لمستخدم بالعربية (المملكة العربية السعودية))، وtrue للنص الآلي (. كفاصل عشري، بلا تجميع). Integer عندما يكون الرقم صحيحًا، وإلا Real؛ استخدم StringIsNumber أولًا إذا كان النص قد لا يكون رقمًا (راجع هذا المثال). |
| رقم ← Text | StringFromNumber(n, decimals, invariantCulture)، وdecimals بالقيمة -1 لأكبر عدد لازم من الخانات |
| Integer → Text بصيغة ست عشرية | لا توجد دالة مضمَّنة تفعل ذلك. ابنه باستخدام الإزاحات (راجع هذا المثال). |