🧱 الأنواع الأولية (Primitive Types) في لغة نفطه

يوضح هذا الملف كيفية تعريف المتغيرات والثوابت باستخدام التعيينات النوعية (Typed Assignments) في لغة نفطه، ويعرض أمثلة عملية على استخدام الأنواع الأولية المختلفة. كما يشمل بعض الاستخدامات المتقدمة مثل الدوال بمعاملات مخصصة النوع، والأنواع المركبة، ومعالجة السلاسل النصية، والمصفوفات، والقوائم، والكائنات المتداخلة.


This file demonstrates how to define variables and constants using typed assignments in the Naftah programming language. It provides practical examples of using various primitive types. It also includes advanced usage such as functions with typed parameters, composite types, handling strings, arrays, lists, and nested objects.


🎯 الأنواع الأولية المدعومة (Simple / Primitive Types)

الاسم في نفطه (والمرادفات) النوع المقابل (بالإنجليزية) الوصف
منطقي, بوليان BOOLEAN قيم منطقية: صحيح أو خطأ
حرف, رمز CHAR تمثيل حرف واحد
تسلسل_أحرف, تسلسل_حروف, تسلسل_رموز STRING سلسلة نصية
عدد_قصير_جدا, قصير_جدا BYTE عدد صحيح صغير جدًا
عدد_قصير, قصير SHORT عدد صحيح صغير
عدد_صحيح, عدد INT عدد صحيح قياسي (32-بت)
عدد_طويل, طويل LONG عدد صحيح طويل (64-بت)
عدد_طويل_جدا, طويل_جدا BIG_INT عدد صحيح كبير جدًا (بدقة غير محدودة)
عدد_عائم, عائم FLOAT عدد عشري (دقة عادية)
عدد_عائم_طويل, عائم_طويل DOUBLE عدد عشري عالي الدقة
عدد_عائم_طويل_جدا, عائم_طويل_جدا BIG_DECIMAL عدد عشري بدقة عالية جدًا (غير محدودة)
أي_عدد VAR_NUMBER أي نوع عددي (صحيح أو عشري)
أي_نوع, أي_نمط Any / Untyped نوع عام غير مقيّد

🗓️ أنواع التاريخ والزمن (Date & Temporal Types)

الاسم في نفطه النوع المقابل (بالإنجليزية) الوصف
مدة DURATION مقدار زمني محدد (مثل: 5 دقائق، 2 ساعة)
فترة PERIOD فترة زمنية بين تاريخين
فترة_و_مدة PERIOD_DURATION مزيج من فترة ومقدار زمني
تاريخ DATE تاريخ فقط (بدون وقت)
وقت TIME وقت فقط (بدون تاريخ)
تاريخ_و_وقت DATE_TIME تاريخ ووقت معًا

🧩 الأنواع المركّبة (Complex Types)

الاسم في نفطه (والمرادفات) النوع المقابل (بالإنجليزية) الوصف
كائن, هيكل STRUCT كائن يحتوي حقولًا مسماة
زوج, مفتاح_و_قيمة, زوج_مفتاح_و_قيمة PAIR<T, U> عنصران مترابطان (غالبًا مفتاح/قيمة)
ثلاثي, ثلاثي_القيم TRIPLE<T, U, V> تركيبة من ثلاثة عناصر
قائمة LIST<T> قائمة مرتبة قابلة للتكرار
تركيبة TUPLE عناصر ثابتة العدد والترتيب
مجموعة SET<T> مجموعة بدون عناصر مكررة
مصفوفة_ترابطية MAP<K, V> خريطة (مفتاح → قيمة)

✨ ملاحظات تصميمية


🧾 التصريحات والإسنادات في لغة نفطه

يوضح هذا القسم كيفية إعلان المتغيرات والثوابت، وكيفية إسناد القيم سواء كانت قيمة مفردة، أو تركيبة (Tuple)، أو عدة قيم مفصولة بفواصل. كما يوضح كيفية التعامل مع التصريحات متعددة المعرفات، وكيفية توزيع القيم على عدة متغيرات.

كما يشرح سلوك الإسناد عند التعامل مع الكائنات المتداخلة، القوائم المتعددة الأبعاد، والصيغ النقطية والمربعة للوصول إلى الحقول.


🟦 التصريح المفرد (Single Declaration)

متغير ه : عدد_صحيح تعيين 2147483647

🟩 التصريح المتعدد (Multiple Declarations)

بدون أنواع

ثابت ت٫ش٬ع،ي؛ز,س؛ص٫ه٬ض،ق
[ت٫ش٬ع،ي؛ز,س؛ص٫ه٬ض،ق]

مع نوع واحد لجميع المتغيرات

ثابت ت٫ش٬ع،ي؛ز,س؛ص٫ه٬ض،ق: منطقي
[ت٫ش٬ع،ي؛ز,س؛ص٫ه٬ض،ق]

مع عدة أنواع (كل نوع يقابل متغير)

ثابت ت٫ش٬ع،ي؛ز,س؛ص٫ه٬ض،ق:
    منطقي؛تسلسل_رموز؛عدد_طويل؛عدد_عائم_طويل؛عدد_عائم؛عدد_صحيح؛رمز؛عدد_قصير_جدا؛عدد_قصير؛منطقي
[ت٫ش٬ع،ي؛ز,س؛ص٫ه٬ض،ق]

عندما يكون عدد الأنواع أقل من عدد المتغيرات

ثابت ت٫ش٬ع،ي؛ز,س؛ص٫ه٬ض،ق:
    منطقي؛تسلسل_رموز؛عدد_طويل؛عدد_عائم_طويل
[ت٫ش٬ع،ي؛ز,س؛ص٫ه٬ض،ق]

🟧 الإسناد المفرد (Single Assignment)

متغير أ تعيين 50
متغير الاسم تعيين "قبلي"

🟨 الإسناد المتعدد (Multiple Assignments)

📌 إسناد عدة متغيرات باستخدام تركيبة (Tuple)

متغير أ؛ب تعيين (٣٢، ٤٥)
(أ , ب)

إعلان ثم إسناد لاحقًا

متغير أ؛ب
أ؛ب تعيين (٣٢، ٤٥)
(أ , ب)

🟪 إسناد عبر دالة تُرجع تركيبة

دالة دالة_ترجع_تركيبة() : عدد_طويل {
    ارجع (٣٢، ٤٥)
}

متغير أ؛ب تعيين دالة_ترجع_تركيبة()
(أ , ب)

دالة تُرجع قيمًا مفصولة (تُعامل كـ Tuple)

دالة دالة_ترجع_تركيبة() : عدد_طويل {
    ارجع ٣٢ ، ٤٥
}

متغير أ؛ب تعيين دالة_ترجع_تركيبة()
(أ , ب)

🟫 أمثلة تجمع بين الإسناد والحساب

متغير ه : عدد_صحيح تعيين 2147483647
متغير المدينة تعيين {
    متغير الاسم تعيين "قبلي",
    متغير عدد_السكان تعيين 50000,
    متغير البلدة تعيين {
        متغير الاسم تعيين "سوق الأحد",
        متغير عدد_البيوت تعيين 400
    }
}

المدينة:البلدة:عدد_البيوت؛ه = المدينة:البلدة:عدد_البيوت + 50 , ه - 1
(ه , المدينة:البلدة:عدد_البيوت)

🟦 الإسناد متعدد الأبعاد داخل القوائم (Nested Lists)

متغير ه : عدد_صحيح تعيين 2147483647
متغير قائمة_ تعيين [٨٥، ٩٠، ٧٨، ٩٢]
قائمة_[0]؛قائمة_[0][0]؛قائمة_[0][0][0]؛قائمة_[0][0][0][0]؛قائمة_[0][0][0][0][0]؛ه = [٨٥، ٩٠، ٧٨، ٩٢] , [٨٥، ٩٠، ٧٨، ٩٢], [٨٥، ٩٠، ٧٨، ٩٢], [٨٥، ٩٠، ٧٨، ٩٢], [٨٥، ٩٠، ٧٨، ٩٢], ه - 1
(ه , قائمة_[0][0][0][0][0])

🌀 إسناد تركيبي متعدد الأنواع (Mixed-Type Tuple Assignment)

ثابت ت٫ش٬ع،ي: تسلسل_رموز؛عدد_طويل؛عدد_طويل؛أي_نوع
تعيين "قبلي"؛400؛9223372036854775807؛(٣٢، ٤٥)

(ت٫ش٬ع،ي)

✅ أمثلة على التعيين النوعي

--- تعريف ثابت اسمه "ت" بقيمة 2
ثابت ت تعيين 2

--- تعريف متغير بدون قيمة ابتدائية اسمه "ش"
متغير ش

--- إسناد القيمة 1 للمتغير "ش"
ش تعيين ١

--- تعريف متغير "ع" بقيمة 15
متغير ع تعيين 15

--- تعريف ثابت "ي" بقيمة 1
ثابت ي تعيين ١

--- تعريف ثابت "ت" من نوع "أي_نمط" وتعيينه بالقيمة 2
ثابت ت_1 : أي_نمط تعيين 2

--- تعريف متغير "ش" من نوع منطقي (Boolean) وتعيينه بالقيمة صائب (True)
متغير ش_1 : منطقي تعيين صائب

--- تعريف متغير "ع" من نوع تسلسل_رموز (String) وتعيينه بالنص "15"
متغير ع_1 : تسلسل_رموز تعيين "15"

--- تعريف ثابت "ي" من نوع بوليان (Boolean) وتعيينه بالقيمة خاطئ (False)
ثابت ي_1 : بوليان تعيين خاطئ

--- تعريف ثابت "ز" من نوع حرف (Character) وتعيينه بالحرف 'ث'
ثابت ز : حرف تعيين 'ث'

--- تعريف ثابت "س" من نوع عدد_قصير_جدا (Very Short Integer) وتعيينه بالقيمة ١
ثابت س : عدد_قصير_جدا تعيين ١

--- تعريف ثابت "ص" من نوع عدد_قصير (Short Integer) وتعيينه بالقيمة 128
ثابت ص : عدد_قصير تعيين 128

--- تعريف ثابت "ه" من نوع عدد_صحيح (Integer) وتعيينه بالقيمة 2147483647 (أكبر قيمة 32-بت)
ثابت ه : عدد_صحيح تعيين 2147483647

--- تعريف ثابت "ض" من نوع عدد_صحيح (Integer) وتعيينه بالقيمة 2147483648 (أكبر من الحد السابق)
ثابت ض : عدد_صحيح_طويل تعيين 2147483648

--- تعريف ثابت "ق" من نوع عدد_طويل (Long Integer) وتعيينه بالقيمة 9223372036854775807 (أكبر قيمة 64-بت)
ثابت ق : عدد_طويل تعيين 9223372036854775807

--- تعريف ثابت "ذ" من نوع عدد_طويل (Long Integer) وتعيينه بقيمة أكبر من الحد الأعلى السابق
ثابت ذ : عدد_طويل_جدا تعيين 9223372036854775808

--- تعريف ثابت "ل" من نوع عدد_عائم (Floating Point Number) بقيمة كبيرة جداً (تمثيل عشري)
ثابت ل : عدد_عائم_طويل تعيين 340282346638528860000000000000000000000,000000

--- تعريف ثابت "ك" من نوع عدد_عائم_طويل (Extended Floating Point) بقيمة ضخمة جداً
ثابت ك : عدد_عائم_طويل_جدا تعيين 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,000000

--- تعريف ثابت "ن" من نوع عدد_عائم_طويل بتقريب قيمته لأعلى قليلاً (بالأعداد العشرية)
ثابت ن : عدد_عائم_طويل_جدا تعيين 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001,000000

--- تعريف ثابت "م" من نوع عدد_عائم_طويل بقيمة ضخمة جدا مركبة (سلسلة متكررة من أعداد)
ثابت م : عدد_عائم_طويل_جدا تعيين 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001,000000

--- تعريف ثابت "ج" من نوع معرّف مركب (مثل مسار أو نوع مخصص) وتعيينه بقيمة "لاشيء" (Null)
ثابت ج : ا:ب:ت:ث:ج:ح تعيين لاشيء

🧪 استخدامات متقدمة

✅ استخدام قوالب النصوص (String Templates)


--- إرجاع نص مع تضمين القيم باستخدام قوالب ${}
ارجع "ت = ${ت}، ش = ${ش}، ع = ${ع}، ي = ${ي}"

--- إرجاع النص بصيغة "خام" دون تنفيذ القوالب
ارجع خام "ت = ${ت}، ش = ${ش}، ع = ${ع}، ي = ${ي}"
ارجع نص_خام "ت = ${ت}، ش = ${ش}، ع = ${ع}، ي = ${ي}"
ارجع سلسلة_خام "ت = ${ت}، ش = ${ش}، ع = ${ع}، ي = ${ي}"

--- إرجاع مع قيمة افتراضية في حال كانت المتغيرات غير معرفة
ارجع "ت = ${ت:ت_فارغ}، ش = ${ش:ش_فارغ}، ع = ${ع:ع_فارغ}، ي = ${ي:ي_فارغ}"

--- إرجاع نص مع تضمين القيم باستخدام قوالب {}$
ارجع "ت = {ت}$، ش = {ش}$، ع = {ع}$، ي = {ي}$"

--- إرجاع مع قيمة افتراضية في حال كانت المتغيرات غير معرفة باستخدام قوالب {}$
ارجع "ت = {ت:ت_فارغ}$، ش = {ش:ش_فارغ}$، ع = {ع:ع_فارغ}$، ي = {ي:ي_فارغ}$"

--- إرجاع نص مع تضمين القيم باستخدام قوالب {{}}
ارجع "ت = {{ت}}، ش = {{ش}}، ع = {{ع}}، ي = {{ي}}"

--- إرجاع مع قيمة افتراضية في حال كانت المتغيرات غير معرفة باستخدام قوالب {{}}
ارجع "ت = {{ت:ت_فارغ}}، ش = {{ش:ش_فارغ}}، ع = {{ع:ع_فارغ}}، ي = {{ي:ي_فارغ}}"


🔁 تحويل إلى ثمانية-بت (Byte Arrays)


--- تحويل السلسلة إلى تمثيل 8-بت (byte array)
ارجع ثمانية_بت "ت = {{ت}}، ش = {{ش}}، ع = {{ع}}، ي = {{ي}}"
ارجع بايتات "ت = {{ت}}، ش = {{ش}}، ع = {{ع}}، ي = {{ي}}"
ارجع سلسلة_ثمانية_بت "ت = {{ت}}، ش = {{ش}}، ع = {{ع}}، ي = {{ي}}"
ارجع مصفوفة_ثمانية_بت "ت = {{ت}}، ش = {{ش}}، ع = {{ع}}، ي = {{ي}}"
ارجع سلسلة_بايتات "ت = {{ت}}، ش = {{ش}}، ع = {{ع}}، ي = {{ي}}"
ارجع مصفوفة_بايتات "ت = {{ت}}، ش = {{ش}}، ع = {{ع}}، ي = {{ي}}"


🧠 فحص الأنواع والحجم (Type, Instance & Size Checking)

يدعم Naftah فحص النوع، التحقق من الانتماء، وحساب الحجم بطريقتين متكافئتين:


🔍 معرفة النوع (Type Of)

نوع 6
نوع صحيح
نوع '6'
نوع "666"
نوع @{}

الناتج المحتمل:

'أي_عدد'
'بوليان' أو 'منطقي'
'حرف' أو 'رمز'
'تسلسل_أحرف' أو 'تسلسل_حروف' أو 'تسلسل_رموز'
'كائن' أو 'هيكل'

🧪 التحقق من الانتماء (Instance Of)#

6 مثيل_من أي_عدد
6 مثيل_من أي_نوع

صحيح مثيل_من منطقي
خطأ مثيل_من بوليان

'6' مثيل_من حرف
"666" مثيل_من تسلسل_رموز

@{} مثيل_من كائن
@{} مثيل_من هيكل

الناتج:

true

📏 حساب الحجم (Size Of)

حجم 6
حجم "666"
حجم (٣٢، ٤٥)
حجم [٨٥، ٩٠، ٧٨]

🧱 مثال مركّب (Type + Instance)

متغير شخص: كائن تعيين {
    متغير الاسم: تسلسل_رموز تعيين "أنيس",
    متغير العمر: قصير_جدا تعيين 32,
    متغير متزوج: منطقي تعيين خطأ
}

نوع شخص
شخص مثيل_من هيكل
شخص مثيل_من كائن

🌀 مثال مع التراكيب (Tuples & Collections)

متغير تركيبة_ تعيين (٣٢، ٤٥)

نوع تركيبة_
تركيبة_ مثيل_من زوج<:أي_عدد,أي_عدد:>
تركيبة_ مثيل_من تركيبة

🧠 ملاحظات


## 📁 ملفات مرتبطة * [Home - الرئيسية](./../../../README.md) * [🔑 الكلمات المفتاحية - Keywords](./01_keywords.md) * [📚 بُنى المعطيات - Collections](./03_collections.md) * [🧮 التعبيرات - Expressions](./04_expressions.md) * [🔢 الأعداد بأنظمة العد - Radix Numbers](./05_radix_numbers.md) * [📦 تعريف الكائنات - Objects](./06_objects.md) * [🌀 التحكم في تدفق البرنامج - Control Flow](./07_control_flow.md) * [⚙️ الدوال في لغة نفطه - Functions](./08_functions.md) * [⚙️ التوافق مع Java (Java Interop) في لغة نفطه - Java Interop](./09_java_interop.md) * [⚡ التعامل مع التزامن في نفطه – Concurrency](./10_concurrency.md) * [⏱️ الزمن والنقاط الزمنية في نفطه – Temporal](./11_temporal.md) ---