Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ميزات متقدّمة

تتجاوز لغة ص الأساسيّات إلى ميزات حديثة: القوالب، المولّدات، إدارة الموارد، الماكرو، العقود، وغيرها. هذا الفصل تعريفيّ؛ وللتزامن (أطلق/القنوات/اختر) فصلٌ مستقلّ في التزامن.

القوالب (الأنواع العامّة)

قالب يكتب دالةً أو صنفًا يعمل على أنواعٍ متعدّدة دون تكرار؛ يسبقه معاملُ نوعٍ واحد على الأقلّ بين <...>:

قالب <نوع ت>
دالة هوية(ت س)
    ارجع س
نهاية

اطبع_سطر(هوية(7))          // استنتاج النوع
اطبع_سطر(هوية<رقم>(4))     // تخصيص صريح

ويدعم القوالب الثابتة (const-generics) بقيمةٍ ثابتة بدل نوع:

قالب <ثابت رقم ن>
دالة الحجم()
    ارجع ن
نهاية
اطبع_سطر(الحجم<3>())      // 3

وتُقيَّد معاملات النوع بجملة حيث:

قالب <نوع ت>
دالة الأكبر(ت أ، ت ب) حيث ت: مقارن
    ...
نهاية

⚠️ تباعُد مترجم مفتوح (ISSUE-071): التخصيص الصريح بوسيطٍ نصّيّ هوية<نص>("ن") يُرجع قيمةً خاطئة في المترجم بينما ن في المفسّر؛ التخصيص بوسيطٍ رقميّ يعمل مزدوجًا.

المولّدات: مولد وأنتج

الدالة المسبوقة بـمولد تُنتج قيمًا كسولةً عبر أنتج، وتُستهلَك بحلقة لكل:

مولد دالة عدّ()
    أنتج 1
    أنتج 2
    أنتج 3
نهاية

لكل ع في عدّ()
    اطبع_سطر(ع)          // 1، 2، 3
نهاية

بادئة مولد إلزاميّة: أنتج صالحةٌ فقط داخل دالةٍ مسبوقةٍ بـمولد — لا في دالةٍ عاديّة ولا في المستوى الأعلى. وتُستعمَل أنتج أيضًا لفصل رأس الحلقة عن الناتج في الاستيعابات.

إدارة الموارد: باستخدام وأجّل

باستخدام كتلةُ سياقٍ لموردٍ يُغلَق عند الخروج؛ الاسم المستعار بعد كـ اختياريّ، والكتلة تُغلَق بـنهاية:

باستخدام 5 كـ م
    اطبع_سطر(م)
نهاية

(في الاستعمال الحقيقيّ يكون المورد كائنًا يُنفّذ بروتوكول السياق فيُغلَق تلقائيًّا.)

أجّل يؤجّل تنفيذ جملةٍ (أو كتلة) إلى خروج الدالة، بترتيب LIFO (الأخير أوّلًا) — مثاليّ للتنظيف المضمون:

دالة عالِج()
    أجّل اطبع_سطر("أُغلِق")   // يُنفَّذ آخرًا
    اطبع_سطر("عُولِج")
نهاية
عالِج()                        // عُولِج ثمّ أُغلِق

الماكرو: ماكرو

يُعرَّف بـماكرو ويُستدعى بعلامة تعجّبٍ ! تميّزه عن الدالة:

ماكرو ضِعف(س)
    ارجع س * 2
نهاية
اطبع_سطر(ضِعف!(21))          // 42

استدعاؤه بلا ! يُعامَل دالةً غير معرّفة (خطأ دلاليّ) — العلامة إلزاميّة.

العقود: عقد

عقد يُعرّف نوعًا شبيهًا بالصنف (بأعضاء وطرائق، ويدعم يرث) بدلالة «العقد الذكيّ»:

عقد محفظة
    متغير عام رصيد = 0
    دالة عام إيداع(مبلغ)
        هذا.رصيد = هذا.رصيد + مبلغ
    نهاية
نهاية

متغير م = محفظة()
م.إيداع(50)
اطبع_سطر(م.رصيد)              // 50

معاملات العمر (Lifetimes)

تعليقُ عمرٍ يبدأ بفاصلةٍ عليا ، يُوسَم على البنى والدوال لتتبّع الاستعارة:

بنية مرجع<'أ>
    رقم قيمة = 0
نهاية

اختبار الخصائص: اختبر

كتلةُ اختبارٍ قائمٍ على الخصائص، الأقواس حول الاسم إلزاميّة، مع تكرارات/بذرة اختياريّتين:

استورد تأكيدات
اختبر("الجمع تبادليّ") تكرارات 100
    تأكد_صحيح(1 + 2 == 2 + 1)
نهاية

(دوال التأكيد في وحدة تأكيدات ⇒ تلزم استورد تأكيدات أوّلًا.)

الواجهة والبرمجة الأجنبيّة

  • الواجهة (SadUI): واجهة/@حالة/اعرض لبناء واجهات تفاعليّة — راجع وثائق SadUI.
  • الربط الأجنبيّ (FFI، تجريبيّ): خارجي "C" لاستدعاء دوالٍ أصليّة.

الكلمات السياقيّة المتقدّمة

أغلب ما سبق كلماتٌ سياقيّة (لا محجوزة): قالب، مولد، أنتج، باستخدام، أجّل، ماكرو، عقد، اختبر، حيث، انتظر — يجوز استعمالها أسماءً خارج سياقها. (أمّا خارجي فكلمةٌ محجوزة.) راجع الكلمات المحجوزة الأربعون للتمييز.