التحكّم بالتدفّق
تُوفّر لغة ص الشروط والحلقات ومطابقة الأنماط. كلّ كتلة تُغلَق بـنهاية.
الشرط إذا / وإلا
إذا الدرجة >= 90
اطبع("ممتاز")
وإلا
اطبع("دون الممتاز")
نهاية
الحلقة بينما
متغير العدّاد = 0
بينما العدّاد < 5
اطبع(العدّاد)
العدّاد = العدّاد + 1
نهاية
الحلقة لكل ... في
لكل عنصر في ["أ"، "ب"، "ج"]
اطبع(عنصر)
نهاية
تتحكّم توقف (break) واستمر (continue) في سير الحلقة.
المرور على الخرائط
حين يكون المصدر خريطةً تمرّ الحلقة على مدخلاتها. بمتغيّر واحد يُربَط الاسم
بكلّ مفتاح، وبمتغيّرين (يفصلهما ،) يُربَط الأوّل بالمفتاح والثاني بالقيمة:
متغير الأعمار = {"سعيد": 30, "نورة": 25}
لكل اسم في الأعمار
اطبع_سطر(اسم)
نهاية
لكل اسم، عمر في الأعمار
اطبع_سطر(اسم + ":" + نص(عمر))
نهاية
سعيد
نورة
سعيد:30
نورة:25
والصيغة نفسها تعمل في الاستيعابات.
مطابقة الأنماط طابق
تُقيَّم قيمة طابق مرّةً، ثمّ تُجرَّب أذرع عندما بالترتيب حتى يطابق نمطٌ، فيُنفَّذ
جسمه وحده. تُغطّي افتراضي ما لم يطابق. كلمات البنية: طابق (فتح)، عندما
(ذراع)، افتراضي (الافتراضيّ)، نهاية (إغلاق).
طابق الحالة
عندما 1
اطبع("واحد")
عندما 2
اطبع("اثنان")
افتراضي
اطبع("غير ذلك")
نهاية
أنواع الأنماط
يقبل عندما أنماطًا أغنى من مجرّد قيمةٍ حرفيّة:
نمط حرفيّ — عددٌ أو نصٌّ أو منطقيٌّ أو عددٌ سالب، يطابق بالتساوي:
عندما 0 // عدد
عندما "نعم" // نصّ
عندما -1 // سالب
نمط متغيّر ونمط شامل — الاسم المجرّد يطابق أيّ قيمةٍ ويربطها؛ و_ يطابق أيّ
قيمةٍ دون ربط:
عندما س // يطابق أيّ شيء ويربطه بـ«س»
عندما _ // يطابق أيّ شيء دون ربط
نمط النطاق — .. نطاقٌ حصريّ النهاية، و..= شاملها:
عندما 1..10 // من 1 إلى 9
عندما 1..=10 // من 1 إلى 10
نمط القائمة — يطابق طولًا محدّدًا ويربط العناصر؛ تدعم القائمة الفارغة []
والعنصر الشامل:
عندما [] // قائمة فارغة
عندما [أ، ب] // بالضبط عنصران، يُربَطان بـأ وب
عندما [أول، _] // عنصران، الثاني مُهمَل
نمط البنية — يطابق حقولًا مسمّاة؛ ويدعم الاختصار {حقل} (يربط باسم الحقل)
والبنية الفارغة {}:
عندما {الاسم: ن، العمر: ع} // يربط ن وع
عندما {الاسم} // اختصار: يربط «الاسم»
نمط قيمة التعداد — يطابق قيمة تعدادٍ بسيطة، أو قيمةً حاملةً بيانات بأنماطٍ لحقولها:
عندما اللون.أحمر // قيمة بسيطة
عندما الشكل.دائرة(نق) // حاملة بيانات، تربط «نق»
نمط البدائل — | يطابق أيًّا من عدّة أنماط في ذراعٍ واحد (|| مقبولٌ تساهلًا):
عندما 1 | 2 | 3
الحارس إذا — يقيّد الذراع بشرطٍ إضافيّ بعد مطابقة النمط:
عندما ع إذا ع > 100
⚠️ الحارس على نمطٍ تفكيكيّ (قائمة/بنية) لا يرى العناصر المربوطة في المترجم بعد (يُقيَّم قبل الربط) — استعمله مع نمط متغيّرٍ بسيط. تفصيلٌ في
ISSUE-069.
نمط الباقي والأنماط المتداخلة — *اسم يجمع ذيل القائمة، والأنماط تتداخل:
عندما [أول، *بقية] // يربط أول ويجمع البقيّة
عندما [[أ، ب]، [ج، د]] // قائمة داخل قائمة (متجانسة)
🚧 القناة القادمة: نمط الباقي
*اسموالأنماط المتداخلة (قائمةٌ داخل قائمة) متوفّرة في القناة القادمة (/next/) وتنتقل إلى المستقرّ مع الإصدار التالي. في المترجم يقتصر التداخل على القوائم المتجانسة النوع؛ التداخل المتباين النوع أو العميق أو داخل حقل بنيةٍ يسقط إلىافتراضيبأمان (حدٌّ معماريّ موثّق فيISSUE-070).
راجع الكلمات المحجوزة الأربعون لكامل كلمات التحكّم، وقواعد النحو لطبقة الأنماط الرسميّة.