مفهوم المتغيرات


المتغيرات variable في لغة الأسس هي فقط أماكن يتم حجزها في الذاكرة لتخزين بيانات عندما يتم تشغيل البرنامج. والنوع الذي نعطيه للمتغير يحدد صنف البيانات الذي يمكن تخزينه في المساحة المحجوزة لهذا المتغير في الذاكرة.

لتعريف أي متغير نستخدم الكلمة المحجوزة def يتبعها اسم المتغير يتبعها نقطتين : يتبعها صنف المتغير.

عرف اسم_المتغير: صـنف_المتغير؛
def variable_name: Data_type;

وإسناد قيمة المتغير,أمابطريقة ﻣﺒﺎﺷﺮة أﺛﻨﺎء ﺗﻌﺮﻳﻒ اﻟﻤﺘﻐﻴﺮ ، ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ:
عرف اسم_المتغير: صـنف_المتغير = قيمة؛
def variable_name: Data_type = value;

أو بعد تعريفه من خلال استخدام مؤثر الإسناد = بالشكل التالي:
اسم_المتغير = قيمة
variable_name = value


مثال:
اشمل "مـتم/طـرفية.أسس"؛
استخدم مـتم؛
عرف عمر: صـحيح = 40؛
طـرفية.اطبع("عمري %d عامًا.\ج"، عمر)؛
\* عمري 40 عامًا. *\
import "Srl/Console.alusus";
use Srl;
def age: Int = 40;
Console.print("I am %d years old.\n", age);
/* I am 40 years old. */

قواعد كتابة المتغيرات


  1. يمكن أن يتكون اسم المتغير من الأحرف الكبيرة A-Z, والأحرف الصغيرة a-z, والأرقام 9-0, والشرطة السفلية _.
  2. يجب أن يكون الحرف الأول حرفآ أو شرطة سفلية.
  3. ﻻ ﻳﻤﻜﻦ اﺳﺘﺨﺪام اﻟﻤﺴﺎﺣﺎت اﻟﻔﺎرﻏﺔ ﻓﻲ أﺳﻤﺎء اﻟﻤﺘﻐﻴﺮات.
  4. ﻏﻴﺮ ﻣﺴﻤﻮح ﺑﺎﺳﺘﺨﺪام اﻷﺣﺮف اﻟﺨﺎﺻﺔ ﻣﺜﻞ # و $.
  5. ﻻ ﻳﻤﻜﻦ إﺳﺘﺨﺪام اﻟﻜﻠﻤﺎت اﻷﺳﺎﺳﻴﺔ (اﻟﻤﺤﺠﻮزة ﻣﺜﻞ ﻛﻠﻤﺔ def-) في لغة الأسس كأسماء متغيرات.
  6. أﺳﻤﺎء اﻟﻤﺘﻐﻴﺮات ﺣﺴﺎﺳﺔ ﻟﺤﺎﻟﺔ اﻷﺣﺮف .
  7. ﻳﻤﻜﻦ أن ﺗﻜﻮن ﻗﻴﻢ اﻟﻤﺘﻐﻴﺮات رﻗﻤﻴﺔ أو أبجدية.
  8. الأسس حساسة لحالة الأحرف.

الأصناف الأساسية للمتغيرات


اﻷﻧﻮاع اﻷﺳﺎﺳﻴﺔ (اﻷوﻟﻴﺔ أو اﻟﺒﺪاﺋﻴﺔ) ﻟﻠﻤﺘﻐﻴﺮات ﻓﻲ ﻟﻐﺔ اﻷﺳﺲ ﺗﻌﺘﺒﺮ نفسها تقريبا ً في أﻏﻠﺐ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ.وﻫﻲ :
ﺛـﻨﺎﺋﻲ (Bool)- عائم (Float)-محرف(Char)- طبيعي(Word)- صحيح(Int) إضافة ً إلى الصنفين صحيح_متكيف(ArchInt) وطبيعي_متكيف (ArchWord).

ملاحظة: الأسس تعرّف الصنف "int" كلقب للصنف "Int" أي أنه لافرق بين كتابة "int" أو "Int" عند تعريف متغير من الصنف الصحيح، والحال نفسه مع الأصناف الأساسية الأخرى، أي أن "char" هو لقب للصنف "Char" و "word" لقب ل "Word" إلخ..

الصنف `صـحيح` (Int)
يستخدم هذا النوع لتخزين عدد صحيح, أي عدد لا يحتوي على فاصلة عشرية. وهنا سنقوم بتعريف متغير من النمط الصحيح. وبشكل افتراضي سيحجز 32 بت من الذاكرة:
عرف رقمي: صحيح // 32 بت
def my_number: int // 32 bits

لتغيير عدد البتات التي يتم حجزها من الذاكرة نستخدم الأقواس المعقوفة [n]، حيث أن n يمثل عدد البتات التي سيتم حجزها، كما يلي:
عرف عددي_الصحيح: صحيح[16] // 16 بت
def my_int_number: int[16] // 16 bits

كما يمكنك استخدام الصنف ArchInt الذي يعرَف عدد صحيح بعدد بتات مطابقة لمعمارية النظام، أي بحجم 32 بت على أنظمة 32 بت وبحجم 64 بت على أنظمة 64 بت.
عرف عددي_الصحيح: صـحيح_متكيف؛
def my_int_number: ArchInt;

مثال برنامج يقوم بجمع عددين صحيحين:
اشمل "مـتم/طـرفية"؛
استخدم مـتم؛
عرف ا: صحيح = 3؛ // تعريف متغير من الصنف صحيح وإسناد قيمة له مباشرةً
عرف ب: صحيح؛ // تعريف عدد آخر من الصنف صحيح
ب = 8؛ // إسناد القيمة 8 لهذا العدد
عرف مجموع: صحيح = ا + ب؛ // تخزين الناتج في متحول جديد
طـرفية.اطبع(مجموع)؛ // طباعة الناتج
import "Srl/Console.alusus";
use Srl;
def a: Int = 3; // تعريف متغير من الصنف صحيح وإسناد قيمة له مباشرةً
def b:int; // تعريف عدد آخر من الصنف صحيح
b=8 // إسناد القيمة 8 لهذا العدد
def sum:int=a+b; // تخزين الناتج في متحول جديد
Console.print(sum); // طباعة الناتج

الصنف `عـائم` (Float)
يستخدم هذا الصنف لتخزين عدد يمكن أن يحتوي على فاصلة عشرية. ولتعريف متغير من هذا الصنف نستخدم نفس الطريقة السابقة.
عرف عددي_العائم: عائم = قيمة؛
def my_float_number: float = value;

مثال:
اشمل "مـتم/طـرفية"؛
استخدم مـتم؛
عرف س1: عائم[64] = 0.3؛
عرف س2: عائم[64] = 0.6؛
عرف مجموع: عائم[64] = س1 + س2؛
طـرفية.اطبع("س1 + س2 = %f"، مجموع)؛ // س1 + س2 = 0.900000
import "Srl/Console.alusus";
use Srl;
def x1: float[64]=0.3;
def x2: float[64]=0.6;
def sum: float[64]=x1+x2;
Console.print("x1+x2 = %f",sum); // x1+x2 = 0.900000

وللتحكم بعدد الأرقام بعد الفاصلة العشرية بإمكاننا أن نكتب:
طـرفية.اطبع("س1 + س2 = %0.1f"، مجموع)؛ // س1 + س2 = 0.9
طـرفية.اطبع("س1 + س2 = %0.2f"، مجموع)؛ // س1 + س2 = 0.90
Console.print("x1+x2 = %0.1f",sum); // x1+x2 = 0.9
Console.print("x1+x2 = %0.2f",sum); // x1+x2 = 0.90

في حالة كانت معمارية جهازك 32 بت ولاتستطيع تحديد عدد البتات ب 64 للنمط float فيمكنك استخدام الحل البديل التالي:
اشمل "متـم/طـرفية"؛
استخدم مـتم.طـرفية؛
عرف عدد_عائم: عائم؛ // افتراضيًا سيكون 32 بت
عدد_عائم = أدخل_عائم()؛ // إدخال العدد
اطبع("%f"، عدد_عائم~مثل[عـائم[64]])؛ // قمنا بعملية تحويل عند الطباعة
import "Srl/Console.alusus";
use Srl.Console;
def float_num: float; // افتراضيًا سيكون 32 بت
float_num=getFloat (); // إدخال العدد
print("%f", float_num~cast[Float[64]]); // قمنا بعملية تحويل عند الطباعة

الصنف `طـبيعي` (Word)
يستخدم لتمثيل عدد صحيح موجب. يتم تحديد عدد البتات بين أقواس معقوفة. وتحديد عدد البتات اختياري وبدونه يكون العدد الافتراضي للبتات 32. أي تماماً كما في الصنف سالف الذكر int. كما يمكنك استخدام الصنف ArchWord بشكل مشابه للصنف ArchInt وذلك لتحديد عدد بتات مطابقة لمعمارية النظام الذي لديك.

الصنف `مـحرف` (Char)
يستخدم هذا النوع لتخزين محرف أو لتخزين عدد صحيح قيمته تمثل حرف نسبةً لرقم الآسكي كود ( ASCII Code ) الخاص به. ولتعريف متغير من هذا الصنف نستخدم نفس الطريقة السابقة. وهذا الصنف هو مجرد لقب للصنف word[8].
عرف ا: محرف = 65؛
طـرفية.اطبع("%c"، ا)؛ // A
def a: char = 65;
Console.print("%c", a); // A

الصنف `ثـنائي` (Bool)
يستخدم هذا النوع لتخزين إما القيمة 1 أي true و إما القيمة 0 أي false. قيمته ثنائية، وهو مجرد لقب للصنف `طبيعي[1]` (word[1]).


المؤشرات (ptr)
سنتحدث عنه في درس مخصص.

ملاحظة: يمكن أيضاً تعريف الثوابت بنفس الطريقة وذلك بوضع القيمة نفسها بدل الصنف ويمكن هذا مع الأعداد الصحيحة والعائمة بالإضافة إلى سلاسل المحارف، كما في المثال التالي:

عرف بسملة: "بسم الله الرحمن الرحيم"؛
عرف النسبة_الثابتة: 3.141592؛
عرف عدد_أيام_الأسبوع: 7؛
def hello: "Hello World";
def pi: 3.141592;
def daysPerWeek: 7;

الأصناف الكائنية


أي نوع أصله كائن من كلاس يعتبر من البيانات الكائنية وأهم هذه الأصناف هو الصنف Array والصنف String وكلها تعتبر متغيرات كائنية في لغة الأسس. وسنتطرق لكل منها في درس مخصص.