لغة برمجة الأسس هي لغة برمجة متعددة الاستخدامات (general purpose) يمكن تمديدها بشكل ديناميكي من قبل المستخدمين. في جوهرها، هي لغة منخفضة المستوى مشابهة للغة C، حيث توفر للمستخدمين البرمجة الإجرائية والأصناف المفروضة (static typing) والمؤشرات وإدارة الذاكرة يدويًا وغيرها من الميزات منخفضة المستوى الموجودة في C/C++. بالإضافة إلى الميزات منخفضة المستوى، توفر الأسس أيضًا بعض المزايا التي تتيح توسيعها من قبل المستخدمين عموديًا لتوفير ميزات مرتفعة المستوى، وكذلك توسيعها أفقياً لدعم مجالات جديدة. مبدئيًا، برامج الأسس تترجم آنيًا عند التنفيذ (JIT compiled)، ولكنها تتيح أيضًا للمستخدمين الترجمة المسبقة لبرامجهم.
قبل أن نبدأ لابد أن تكون قد قمت بتثبيت لغة الأسس على جهازك، وفي حال لم تقم بذلك، يمكنك الذهاب الآن إلى الرابط التالي واتباع التعليمات اللازمة تعليمات التنصيب والتشغيل.
أيضاً في حال واجهتك أيّة مشكلة، يمكنك مراسلتنا على الرابط التالي وإضافة استفسارك أسئلة وأجوبة
سنتعلم كيفية كتابة أول وأبسط كود برمجي يمكن تحقيقه باستخدام لغة الأسس وهو "طباعة جملة !Hello World". لذا بدايةً يجب أن نقوم بتضمين (استيراد) المكتبات اللازمة لتحقيق هذا البرنامج، وكما هو الحال في أي لغة هناك وحدة بناء أساسية تقوم بتنفيذ العمليات الإجرائية ضمن البرنامج، وفي لغة الأسس هذه الوحدة هي "libalusus_spp.so"، وبالتالي يجب أن يبدأ البرنامج بتضمين هذه الوحدة، بالشكل التالي:
اشمل "libalusus_spp.so"؛
import "libalusus_spp.so";
اشمل "مـتم/طـرفية"؛
import "Srl/Console";
مـتم.طـرفية.اطبع("بسم الله الرحمن الرحيم\ج")؛
Srl.Console.print("Hello World!\n");
اشمل "مـتم/طـرفية"؛ مـتم.طـرفية.اطبع("بسم الله الرحمن الرحيم\ج")؛
import "Srl/Console"; Srl.Console.print("Hello World!\n");
بسم الله الرحمن الرحيم
Hello World!
ملاحظة: لكي نجعل استدعاء الدالة `اطبع` (print) أكثر سهولة، يمكننا أن نستخدم الأمر `استخدم` (use) لكي تمنحنا القدرة على الوصول لعناصر وحدة ما مثل `مـتم` (Srl) دون كتابة اسم الوحدة في كل مرة.
اشمل "مـتم/طـرفية"؛ استخدم مـتم.طـرفية؛ اطبع("بسم الله الرحمن الرحيم\ج")؛
import "Srl/Console"; use Srl.Console; print("Hello World!\n");
إن عمليات الإدخال والطباعة في لغة الأسس تتم كلها عن طريق الوحدة `طـرفية` (Console). لذا لاتنسَ تضمينها (كما فعلنا في المثال السابق) قبل التفكير في تنفيذ عمليات إدخال أو طباعة. كما أنه لكل صنف بيانات طريقة إدخال وطباعة مختلفة.
نستخدم في لغة الأسس الدالة `اطبع` (print) لتنفيذ عمليات الطباعة، فهي الدالة الأساسية المستخدمة لطباعة الجمل النصية، حيث تمنحنا هذه الدالة التحكم في طريقة طباعة الجمل النصية أو ما يعرف بتنسيق الجمل النصية، وإمكانية طباعة قيم المتغيرات بداخل النص المراد طباعته. ولها الشكل التالي:
اطبع(نسق، ...)؛
print(format, ...);
اشمل "مـتم/طـرفية"؛ استخدم مـتم.طـرفية؛ عرف س: صحيح = 3؛ // تعريف متغير من الصنف الصحيح (سنناقش كل الأنماط في الدرس القادم) اطبع("الـناتج = %d"، س)؛
import "Srl/Console.alusus"; use Srl.Console; def x: int=3; // تعريف متغير من الصنف الصحيح (سنناقش كل الأنماط في الدرس القادم) print("Result = %d", x);
الـناتج = 3
Result = 3
حيث قمنا بكتابة الجملة المراد طباعتها بين علامات تنصيص مزدوجة (double quote)، وقمنا بحجز مكان بداخل النص (Placeholder) (أي عنصر أو متغير نائب -ينوب عن قيمة ستحدد لاحقاً-)، ليتم طباعة قيمة المتغير بداخله عن طريق كتابة الحرف % متبوعا بالحرف d، حيث أن الرمز % بالنسبة لدالة الطباعة يعتبر ذو معنى خاص (حيث يتم استبداله بقيمة المتغير) الذي تم تحديد نوعه عن طريق الحرف d، ثم قمنا بتمرير المتغير س (x) كمعطى (argument) ثاني للدالة.
يوجد مجموعة محددة من الحروف التي يمكن استخدامها مع الرمز % للتحكم في طريقة طباعة قيم المتغيرات، حيث يمثل كل حرف صنف محدد من البيانات، وفيما يلي سنوضح الحروف (الرموز) المحددة للإستخدام مع الرمز % ونوع البيانات الخاص بكل حرف..
اشمل "مـتم/طـرفية"؛ استخدم مـتم.طـرفية؛ اطبع("لغة الأسس تدعم الكتابة بالإنجليزية والعربية 100%%")؛
import "Srl/Console"; use Srl.Console; print("Alusus language supports coding in English & Arabic 100%%");
لغة الأسس تدعم الكتابة بالإنجليزية والعربية 100%
Alusus language supports writing in English & Arabic by 100%
اشمل "مـتم/طـرفية"؛ استخدم مـتم.طـرفية؛ عرف عدد_صحيح: صحيح؛ عدد_صحيح = 778؛ اطبع("%d"، عدد_صحيح)؛ // طباعته مع إبقاء مؤشر الطباعة على نفس السطر // اطبع(عدد_صحيح)؛ // يكافئ عملية الطباعة السابقة // اطبع("%d\ج"، عدد_صحيح)؛ // نفس الأمر السابق لكن هنا سينزل المؤشر سطراً
import "Srl/Console"; use Srl.Console; def integerNum: int; integerNum=778 print("%d",integerNum); // طباعته مع إبقاء مؤشر الطباعة على نفس السطر //print(integerNum); // يكافئ عملية الطباعة السابقة //print("%d\n",integerNum); // نفس الأمر السابق لكن هنا سينزل المؤشر سطراً
اشمل "مـتم/طـرفية"؛ استخدم مـتم؛ عرف م: محرف = 'a'؛ طـرفية.اطبع("%c"، م)؛
import "Srl/Console"; use Srl;def c: char = 'a'; Console.print("%c", c)
اشمل "مـتم/طـرفية"؛ استخدم مـتم.طـرفية؛ عرف س: صحيح؛ اطبع("عنوان س في الذاكرة هو: %p\ج"، س~مؤشر)؛
import "Srl/Console.alusus"; use Srl.Console; def x:int; print("x Address is: %p\n", x~ptr);
عنوان س في الذاكرة هو: 0x55a3b28493f0
x Address is: 0x55a3b28493f0
لإدخال عدد صحيح (int)، نستخدم الدالة `أدخل_صحيح` (getInt) كما في المثال التالي:
اشمل "مـتم/طـرفية"؛ استخدم مـتم.طـرفية؛ عرف عدد_صحيح: صحيح؛ عدد_صحيح = أدخل_صحيح()؛ // إدخال العدد اطبع("%d"، عدد_صحيح)؛
import "Srl/Console"; use Srl.Console; def integerNum: int; integerNum=getInt (); // إدخال العدد print("%d",integerNum);
لإدخال عدد عائم، نستخدم الدالة `أدخل_عائم` (getFloat) كما في المثال التالي:
اشمل "مـتم/طـرفية"؛ استخدم مـتم.طـرفية؛ عرف عدد_عائم: عائم[64]؛ عدد_عائم = أدخل_عائم()؛ // إدخال العدد اطبع("%f"، عدد_عائم)؛
import "Srl/Console"; use Srl.Console; def floatNum: float[64]; floatNum = getFloat (); // إدخال العدد print("%f",floatNum);
لإدخال محرف char، نستخدم الدالة `أدخل_محرفا` (getChar) كما في المثال التالي:
اشمل "مـتم/طـرفية"؛ استخدم مـتم.طـرفية؛ عرف م: محرف = أدخل_محرفا()؛ اطبع("%c"، م)؛
import "Srl/Console"; use Srl.Console; def c: char = getChar(); print("%c", c);
لإدخال سلسلة نصية نستخدم الدالة `أدخل_محارف` (getString) ولكن لن نتحدث عنها في هذا الدرس، حيث سنتحدث عنها في الدرس المخصص للصنف `نـص` (String).