ما هي المتغيرات وأنواع البيانات ؟

السلام عليكم ورحمة الله وبركاته

وقت القراءة: ≈ 15 دقيقة

المقدمة

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

عن طريق أنك تنشيء متغيرات والمتغيرات هي رموز او مسميا تخزن قيمة ما
مثل ما كنا نفعله في الرياضيات عندما نقول س = 5 هنا قمنا بتخزين القيمة 5 في المتغير س

نفس المفهوم تمامًا في البرمجة نقوم بتعريف متغير ونعطيه قيمة معينة مثل x = 5

ما هي المتغيرات ؟

المتغيرات هي مجرد مسميات نستخدمها ونعرفها لنعطي لها قيم مثل ما نفعل في الرياضيات عندما نقول أن س = 5 و ص = 10
هنا الـ س والـ ص هما متغيران نستخدمها لتخزين قيم معينة فيهما
يمكن أن نسميهم أي اسم سواء كان x أو y أو z أو age أو name أو أي اسم آخر

وهذه المتغيرات تكون مرتبطة بنوع البيانات التي تحتويها

فمثلا عندما نقوم بكتابة age = 25 هكذا المتغير age يحجز مساحة في الذاكرة تكفي لتخزين القيمة 25
فمثلا عندما نقوم بكتابة letter = 'A' هكذا المتغير letter يحجز مساحة في الذاكرة تكفي لتخزين الحرف A
وهذه المساحة تحدد بحسب نوع البيانات

بمعنى أنه لو كان المتغير age يخزن أرقام صحيحة 25 مثلاً فسيحجز مساحة 4 bytes تكفي لتخزين الأعداد الصحيحة
وإذا كان المتغير letter يخزن حرف واحد فقط A مثلًا فسيحجز مساحة 1 byte تكفي لتخزين هذا الحرف

يمكننا تخيل لذلك بشكل بسيط

                        memory (RAM)
            ذاكرة الجهاز التي تخزن فيها البيانات
        +-----------------------------------------------+
        |                                               |
        |                          letter = 'A'         |
        |                             1 byte            |
        |      age = 25                                 |
        |       4 bytes                                 |
        |                                               |
        +-----------------------------------------------+

هذا شكل تخيلي لكيفية تخزين المتغيرات في الذاكرة
فهنا يتم تحزين كل شيء في الذاكرة وكل شيء له عنوان خاص به في الذاكرة
وكما ترى عندما نقوم بتعريف المتغير age يتم حجز مساحة 4 bytes في الذاكرة لتخزين القيمة 25
وعندما نقوم بتعريف المتغير letter يتم حجز مساحة 1 byte في الذاكرة لتخزين الحرف A

لنلتقط جزء من هذه الذاكرة ونتكلم عن بعض التفاصيل الأساسية

           age اسم المتغير
        +--------+
        |   25   | --> 4 bytes مساحته
        +--------+
      0x7ffd1afe0a9c --> عنوانه في الذاكرة

          letter اسم المتغير
        +--------+
        |   'A'  | --> 1 byte مساحته
        +--------+
      0x8a9de7fa15fd --> عنوانه في الذاكرة

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

العنوان هو شيء خاص باللغة وكل شيء في الذاكرة له عنوان خاص به ويحجز مساحته في الذاكرة
اللغات تستخدم هذه العناوين للوصول إلى المتغيرات والتعامل معها
أما المسميات التي نحددها نحن مثل age و letter هي فقط لتسهيل التعامل مع المتغيرات وتذكيرنا بما تحتويه
لكن في حقيقة الأمر بالنسبة لغات البرمجة هذه مجرد مسميات تحدد العنوان الذي سيتعامل معه في الذاكرة
لاحظ أن كل متغير يحجز مساحة معينة في الذاكرة وهذه المساحة تحدد بحسب نوع البيانات التي يحتويها المتغير

وهذه الأنواع تسمى Data Types أنواع البيانات اسم بديهي جدًا

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

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

أنواع البيانات المختلفة

ستجد أن معظم اللغات تشترك في مجموعة كبيرة من أنواع البيانات
لذا سأتكلم عن الأنواع الأساسية المشتركة التي ستقابلها في معظم اللغات

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

الأعداد الصحيحة | int

وهو اختصار لـ integer ويمثل الأعداد الصحيحة الموجبة مثل 0, 1, 2, 3 ... وأيضًا الأعداد السالبة -1, -2, -3, -4 ...
ولا يستطيع ان يمثل الأعداد الكسري مثل 1.5 بعض اللغات قد ترفض هذا وتعطيك خطأ
وبعض اللغات قد تقبله لكنها تقوم بازالة الكسر وتبقي الجزء الصحيح فقط
فعندما تحاول أن تخزن العدد 1.5 كرقم صحيح اللغة تقوم بتحويله إلى 1 وتتخلص من الكسر .5 الأمر يرجع إلى اللغة كيف تتعامل مع الأمر

الـ int يحجزن مساحة 4 bytes في الذاكرة لتخزين الأعداد الصحيحة

في معظم اللغات مثل C++ و C# و Java يتم تعريف المتغير من نوع int بهذا الشكل

int age = 25;

نكتب نوع البيانات في البداية وفي حالتها كان int ثم نكتب اسم المتغير فمثلًا age ونعطيه القيمة المراد تخزينها 5
وفي النهاية نضيف ; لتعرف اللغة أن هنا هو نهاية السطر، هناك لغات تعرف نهاية السطر دون الحاجة لكتابة ;
هذا الشكل في تعريف المتغيرات وتحديد نوعه واعطاء قيمة له يكون متشابهًا في معظم اللغات مثل C++ و Java و C# وغيرها

بعد تعريف المتغير واعطاء قيمة له يمكنك أن تغير قيمته في أي وقت تريد

int age = 25;

age = 30; // تغيير قيمة المتغير إلى 30

لاحظ أننا لم نقم بكتابة int مجددًا قبل المتغير age بل قمنا بتغيير قيمته فقط لأن اللغة تعرف بالفعل أن المتغير age هو من نوع int
فلا داعي لتكرار تعريف النوع مرة أخرى في كل مرة تريد تغيير قيمته
ولاحظ أننا نكتب int وليس INT أو Int لأن هناك بعض اللغات حساسة لشكل الكلمة وهناك لغات لا تفرق

لاحظ هنا عندما نحاول تغير قيمة المتغير age إلى قيمة كسرية مثل 23.5 قد تحصل على خطأ في بعض اللغات وفي بعض اللغات سيتم تحويلها إلى 3

int age = 25;

age = 23.5; // سيتم تحويلها إلى 23

هنا قيمة 23.5 ستتحول إلى 23 وسيتم تخزينها في المتغير age كرقم صحيح 23 وليس كرقم كسري 23.5
لأن المتغير age هو من نوع int ولا يمكنه تخزين الأعداد الكسرية

هذه العملية تسمى casting وهي عملية تحويل القيم من نوع إلى نوع آخر
في المثال السابق تم تحويل القيمة الكسرية 8.5 إلى 8 وأصبحت من نوع int وسوف نتكلم عنها لاحقًا في مقالات أخرى


ملحوظة: الـ // تستخدم لكتابة تعليق أو ملحوظة في الكود
وهذه التعليقات لا تؤثر ابدأ على البرنامج ولا تُنفذ، بل الجهاز او البرنامج لا يراها ولا يعير لها أي انتباه
وتستخدم لتوضيح وشرح الكود للقارئ
بعض اللغات قد تستخدم # أو % لكتابة التعليقات

int age = 25;
// ملحوظة للشخص الذي يقرأ الكود الآن، هذا مجرد تعليق للتوضيح
// هنا أنا أنشأت متغير يمثل العمر وجعلته يساوي 25 لذا أرجو أن تكون قد فهمت الكود وشكرًا
// ولا تنسى متابعة وقراءة المقالات الأخرى في مدونة الطبراني الجميلة

قلنا أن المتغير age يحجز مساحة في الذاكرة تكفي لتخزين القيمة 25 على سبيل المثال وهذه المساحة تحدد بحسب نوع البيانات
فمثلا النوع int يحجز مساحة 4 bytes في الذاكرة لتخزين الأعداد الصحيحة

                        memory (RAM)
            ذاكرة الجهاز التي تخزن فيها البيانات
        +-----------------------------------------------+
        |                                               |
        |      age = 25                                 |
        |       4 bytes                                 |
        |                                               |
        +-----------------------------------------------+

هنا المتغير age حجز 4 bytes في الذاكرة لتخزين القيمة لأنه من نوع int

في لغات قد لا تحتوي عن int لكن تحتوي على شيء مماثل لها
فمثلًا في لغة TypeScript لديها نوع بيانات يدعى number وهو يخزن أي عدد مهما كان صحيح أو كسري

let age: number = 25;

لاحظ أن في لغة الـ Typescript شكل التعريف اختلف قليلًا عن الـ C++ و Java
فهنا نكتب let ليعرف البرنامج أننا نريد تعريف متغير
ثم يليه اسم المتغير ونكتب : ثم نوع البيانات number وأخيرًا نعطيه القيمة المراد تخزينها 25

في لغة typescript نوع البيانات number يمكن أن يحتوي على الأعداد الصحيحة والكسرية على عكس int الذي يحتوي فقط على الأعداد الصحيحة
وهذا يعتمد على اللغة وكيف تتعامل مع الأنواع المختلفة

هناك لغات لا تعتمد على أن تحدد لها نوع المتغير بل هي تستنتج النوع تلقائيًا من القيمة التي تعطيها للمتغير
فمثلًا في لغة Python، لا تحتاج إلى تحديد نوع البيانات عند تعريف المتغير. اللغة تستنتج النوع تلقائيًا من القيمة التي تعطيها للمتغير

age = 25

يمكنك عمل عمليات حسابية في البرمجة بين المتغيرات
كما في الرياضيات عندما نقول س = 5 و ص = 10 ونقوم بجمعهما داخل متغير جديد ج = س + ص
يمكننا فعل نفس الشيء في البرمجة

int age = 25;
int yearsPassed = 5;

int newAge = age + yearsPassed; // newAge = 30

هنا قمنا بجمع المتغير age و yearsPassed ووضع الناتج في متغير جديد يدعى newAge
سنشرح كل العمليات التي نستطيع القيام بها في المقالة التالية

الأعداد الكسرية | float و double

الـ float هو اختصار لـ floating point والـ double يمكنك أن تقول أنه اختصار لـ double floating point أي ضعف الـ float
ويتم استخدام الـ float والـ double لتخزين الأعداد الكسرية مثل 1.5, 2.5, 3.6 ...

في لغات مثل C++ و Java يتم تعريف متغير من نوع float بنفس طريقة تعريف متغير من نوع int، مع اختلاف نوع البيانات فقط:

float x = 3.1415926; // يمكنك كتابة 7 أرقام بعد العلامة العشرية
double y = 3.141592653589793; // يمكنك كتابة 15 رقم بعد العلامة العشرية

في لغات أخرى قد لا يكون هناك نوع بيانات مخصص للأعداد الكسرية
ولكن قد يكون هناك نوع بيانات عام للأعداد مثل number في TypeScript الذي يمكنه تخزين كل من int و float

let age: number = 25;
let price: number = 19.99;

الحروف | char

وهو اختصار لـ character ويستخدم لتخزين الأحرف مثل 'a'، 'b'، 'c' ... والرموز والعلامات الخاصة مثل '@'، '#'، '$'، '%' ... وما شابه ذلك
وهو يحجز 1 byte في الذاكرة لتخزين الحرف أو الرمز
يتم تعريف متغير من نوع char بنفس طريقة تعريف أي متغير لكن بتحديد نوع البيانات إلى char

char letter = 'A';

هنا عليك كتابة حرف أو رمز واحد فقط بين علامتي التنصيص ' بهذا الشكل 'A' ولا يمكنك كتابة أكثر من حرف أو رمز واحد

بمعنى أنه لا يمكنك كتابة letter = 'AB' لأنها تحتوي على حرفين وليس حرف واحد فقط

char letter_1 = 'A'; // ✅
char letter_2 = 'AB'; // ❌

char symbol_1 = '@'; // ✅
char symbol_2 = '@#'; // ❌


char space = ' '; // ✅
char spaces = '         '; // ❌

char number_1 = '5'; // ✅
char number_3 = '35'; // ❌

لاحظ أنه يقبل حرف واحد فقط وليس حرفين أو أكثر

ولاحظ أن الحرف يكون بين علامتي التنصيص ' بهذا الشكل 'A' وليس ضمن علامتي التنصيص المزدوجة "
وهذا شائع جدًا في معظم اللغات للتوضيع أنه حرف واحد فقط وليس جملة اونص طويل

ولاحظ أن المسافة ' ' تعتبر حرف واحد فقط

ولاحظ أيضًا أننا كتبنا رقم 5 هل هذا يعني أن char يمكنه تخزين الأرقام ؟ لا، لاحظ الفرق هنا

char number_1 = '5'; // ✅

لا فالـ char يمكنه تخزين الأحرف والرموز والعلامات الخاصة فقط وليس الأرقام
وهنا قمنا بتخزين 5 كرمز وليس كرقم عن طريق وضع الرقم بين علامتي التنصيص '5'
هكذا ستتعامل معه اللغة على أنه رمز وليس رقم لذا '5' يعتبر حرف واحد فقط


ماذا لو قمت بتخزين الرقم 5 في متغير من نوع char ؟ من غير وضعه بين علامتي التنصيص '
هل سيقوم بتخزينه كرقم أم كرمز ؟

بعض اللغات عندما تسند قيمة عددية لمتغير من نوع char فهو سيحول الرقم إلى رمز
فمثلا في لغة C++ عندما تقوم بتخزين الرقم 65 في متغير من نوع char فهو سيحوله إلى الحرف A
لأنه يعتمد على جدول يسمى ASCII وهو جدول به 128 حرف ورمز وكل واحدة يقابلها عدد معين
فمثلا الحرف A يقابله الرقم 65 والحرف B يقابله الرقم 66 والحرف C يقابله الرقم 67 وهكذا

بعض اللغات مثل قد تجعل الـ char يقبل فقط ما هو موجود في جدول الـ ASCII ولا يقبل غيره
وعندما تسند له رقم فسيبحث عن الحرف أو الرمز المقابل له في جدول الـ ASCII ويقوم بتخزينه

char letter = 65; // A سيقوم بتخزين الحرف

يمكنك الاطلاع على جدول الـ ASCII من هنا

وعندما تخزن رقم كسري في متغير من نوع char فسيقوم بتخزين الجزء الصحيح فقط ويتجاهل الجزء الكسري

char letter = 66.5; // B سيقوم بتخزين الرقم الصحيح فقط 66 والذي يقابله الحرف

يوجد أيضًا رموز خاصة ستجدها في معظم اللغات مثل \n و \t و \r وغيرها
حيث أن \n تعني سطر جديد و \t تعني 4 مسافات وهكذا
وهذه الرموز تعتبر من الحروف والرموز وتخزن في متغير من نوع char أيضًا

char newLine = '\n'; // سيقوم بتخزين سطر جديد
char tab = '\t'; // سيقوم بتخزين 4 مسافات

ملحوظة: في بعض اللغات مثل PHP أو Typescript لا تفرق كثيرًا بين ' أو " هناك لغات تفرق بينهم بشكل كبير والتفريق يؤثر على السرعة والأداء وكيفية التعامل مع المتغير مثل في لغات C++ و Java و C#

سؤال هل يمكننا تخزين حروف من لغات أخرى كالعربية والصينية وغيرها ؟ الإجابة لا
لأن الـ char يخزن حرف واحد يمكنك تخزينه في 1 byte
لكن الحروف العربية واليابانية والصينية تحتاج إلى مساحة أكبر من 1 byte لتخزينها

char arabic = 'أ'; // ❌ Error: this letter need 2 byte
char chinese = '诶'; // ❌ Error: this letter need 3 byte
char emoji = '😎'; // ❌ Error: this emoji need 4 byte

النصوص | string

هو ببساطة مثله مثل الـ char ولكن يمكنه تخزين نص أو جملة حتى معناه سلسلة بمعنى أنه سلسلة من الحروف متجمعة معًا لأن في بعض اللغات مثل C لا يوجد نوع بيانات مخصص للنصوص أو الجمل الطويلة لذا يتم عمل سلسلة من المتغيرات من نوع الـ char وتجميعها معًا لتكون نص أو جملة ثم تم تسمية هذه السلسلة بـ string وهو ما تبنته اللغات الحديثة الآن

لنفترض أننا لدينا جملة جميلة كهذه "أنا جملة تخبركم بأن تتابعوا مدونة الطبراني" هذه جملة طويلة لا نستطيع تخزينها في char لأنه يمكنه تخزين حرف واحد فقط لذا نستخدم الـ string لتخزين الجمل والنصوص

نعرف متغير نوعه string بهذا الشكل

string message = "أنا جملة تخبركم بأن تتابعوا مدونة الطبراني";

لاحظ أننا كتبنا النص بين علامتي التنصيص " وليس بين علامتي التنصيص '
في معظم اللغات يتم استخدام " مع الـ string و char
وفي بعض اللغات لا يتم التفريق

لذا عندما تتعامل مع أي عليك ادرس وافهم كيف تتعامل تلك اللغة مع تلك التفاصيل الصغيرة

كم يحجز الـ string من مساحة في الذاكرة ؟
هذا يعتمد على اللغة وكيف تتعامل مع النصوص
لكن في غالب اللغات يحجز الـ string مساحة تكفي لتخزين الجملة الذي يحملها
فمثلا إذا كانت الجملة تحتوي على 10 حروف فسيحجز 10 bytes فقط وإذا كانت تحتوي على 50 فسيحجز 50 bytes في الذاكرة لتخزين وهكذا

string message = "Ahmed"; // 5 bytes
string message_2 = "Hello, World!"; // 13 bytes

string empty_message = ""; // 0 bytes
string one_letter = "A"; // 1 byte
string new_line = "\n"; // 1 byte
string space = " "; // 1 byte
string spaces = "          "; // 10 bytes

طالما أن الـ string يحجز مساحة تكفي لتخزين الجملة التي يحملها فيمكنه تخزين أي شيء يمكنك كتابته ونسخه كالحروف العربية والصينية وغيرها
وحنى أنه يمكنه تخزين الأموجي والرموز التعبيرية لأن الـ string يستطيع حجز أي مساحة يحتاجها على عكس الـ char الذي يحجز 1 byte فقط

string arabic = "أ"; // 2 byte
string chinese = "诶"; // 3 byte
string emoji = "😎"; // 4 byte

الرموز \n و \t و \r وغيرها تعتبر من الرموز الخاصة وتستخدم لقيام بأمور مختلفة
وهي تعتبر حرف واحد فقط وتخزن في متغير من نوع char أو string أيضًا

string message = "Hello, World!\nIt's a wonderful day";

هنا قمنا بتخزين جملة تحتوي على رمز السطر الجديد \n وهو يعني أنه بعد هذا الرمز سيتم الانتقال إلى سطر جديد
بالتالي شكل الجملة سيكون هكذا

Hello, World!
It's a wonderful day

وهذا يعني أنه بعد كل رمز \n سيتم الانتقال إلى سطر جديد

string message = "Hello, World!\tIt's a wonderful day";

هنا قمنا بتخزين جملة تحتوي على رمز المسافة \t وهو يعني أنه بعد هذا الرمز سيتم وضع مسافة كبيرة قد تكون 4 أو 8 مسافات

Hello, World!    It's a wonderful day

وهذا يعني أنه بعد كل رمز \t سيتم وضع مسافة كبيرة

القيم المنطقية | bool

هو اختصار لـ boolean ومعناه قيمة منطقية يستخدم لتخزين قيمتين فقط هما true أو false يمكنك استخدامه في الأمور التي تحتمل دائمًا رأيين فقط مثل نعم و لا أو صحيح و خطأ أو موجود و غير موجود و ... وهكذا

bool isStudent = true;

هنا قمنا بتعريف متغير من نوع bool وأعطيناه القيمة true
ولاحظ أننا نكتب true أو false كما هي أي علامات تنصيص سواء " أو '
معظم اللغات تقبل الرقم 0 كـ false ورقم 1 أو أي رقم أخر كـ true
عندما تحاول تخزين false في متغير من نوع int فهو سيحوله إلى الرقم 0
وعندما تحاول تخزين true في متغير من نوع int فهو سيحوله إلى الرقم 1

تتذكر في الابتدائية عندما كنا نحل مسائل منطقية بحيث نحدد أي الرقمين أكبر أو أصغر ؟
نستطيع القيام بذلك داخل متغير من نوع bool في البرمجة

int x = 5;
int y = 10;

bool isXGreaterThanY = x > y;

هنا قمنا بتعريف متغيرين x و y وأعطيناهما القيم 5 و 10
ثم قمنا بتعريف متغيرين isXGreaterThanY هو من نوع bool كما تلاحظ ثم قلنا أن قيمته تساوي x > y وهذا يعني أننا نقول هل x أكبر من y ؟
الاجابة على هذا السؤال يحدد هل ستكون قيمة المتغير isXGreaterThanY هي true أم false
وهذا يعتمد على قيمة x و y فإذا كانت x أكبر من y فسيكون المتغير isXGreaterThanY هو true وإذا كانت x أصغر من y فسيكون المتغير isXGreaterThanY هو false
هنا بما أن x أصغر من y فستكون القيمة المتغير isXGreaterThanY هو false

الـ bool يحجز 1 byte في الذاكرة لتخزين القيمة true أو false


المقالة التالية سنتعرف على كيفية القيام بعمليات المقارنة بين المتغيرات مثل > و < و == و != و >= و <= وكيفية استخدامها

هل هذه كل أنواع البيانات ؟

بالطبع لا، هذه الأنواع هي الأساسية التي ستجدها في معظم اللغات
ولكن هناك العديد من الأنواع الأخرى التي قد تجدها في بعض اللغات وقد لا تجدها في البعض الآخر
أنا فقط أردت أن أعرض لك الفكرة الأساسية من المتغيرات وكيف يتم تخزين البيانات المختلفة

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

مساحة تخزين البيانات

كما تعلمنا أن كل نوع بيانات يحجز مساحة معينة في الذاكرة لتخزين القيمة
هذه المساحة تحدد بحسب نوع البيانات لكن قد تختلف بشكل جزري من لغة لأخرى
قد تجد لغات تحجز char 1 byte وقد تجد لغات تحجز 2 bytes مثل اللغة C#

معرفة كم تحجز كل نوع بيانات في الذاكرة مهم جدًا لأنها تساعدك في تحسين أداء برنامجك وسرعة وتقلل من استهلاك الذاكرة
هناك لغات قد تعطيك تنوع فمثلا لا تعطيك int واحدة بل تعطيك 10 أنواع مختلفة للـ int وكل نوع يحجز مساحة مختلفة في الذاكرة

المتغير الثابت | const

في معظم لغات البرمجة يمكنك تعريف متغير ثابت لا يمكن تغيير قيمته بعد تعريفه عن طريق كلمة const وهي اختصار لـ constant أي ثابت

const int age = 25;

هنا قمنا بتعريف متغير age وأعطيناه القيمة 25 ولاحظ أننا كتبنا const لنوضح أن هذا المتغير لا يمكن تغيير قيمته بعد تعريفه
وإن حاولت أنت أو أي شخص تغيره فسيقوم البرنامج أو اللغة بتنبيك وستقول لك أن هذا المتغير ثابت ولا يمكن تغيير قيمته

const int age = 25;

age = 30; // ❌ Error: cannot change the value of a constant variable

هنا عندما نحاول تغيير قيمة المتغير age البرنامج سيرفض ذلك التغيير لأن المتغير age هو ثابت ولا يمكن تغيير قيمته


هناك لغات قد تستخدم كلمة أخرى لتعريف المتغير الثابت مثل final في لغة Java و C#
وقد تستخدم كلمة أخرى مثل const في لغة TypeScript و PHP

تعريف المتغيرات في سطر واحد

في بعض اللغات يمكنك تعريف أكثر من متغير في سطر واحد

فبدلًا من كتابة

int age = 25;
int yearsPassed = 5;

يمكنك كتابة

int age = 25, yearsPassed = 5;

لاحظ أننا قمنا بوضع فاصلة , بين كل متغير والآخر لتفصل بينهم
هذه الطريقة تنفع فقط عندما تكون المتغيرات من نفس النوع بيانات
فهنا بما أن كلا المتغيرين age و yearsPassed من نوع int فهذه الطريقة تنفع وتجعل الكود أقصر ومنظم أكثر

القيمة NULL

في بعض اللغات يمكنك تعريف متغير بقيمة NULL وهي تعني أن المتغير فارغ ولا يحتوي على قيمة

int age = NULL;

هنا قمنا بتعريف متغير age وأعطيناه القيمة NULL وهذا يعني أن المتغير age لا يحتوي على قيمة بعد بل هو فارغ

هذه القيمة تستخدم في العديد من الأمور مثل عندما تقوم بتعريف متغير وتريد تعيين قيمته لاحقًا
أو أنك لا تعرف قيمته حاليًا وتريد تعيينها لاحقًا عندما يتحقق شرط معين أو تحضرها من مكان معين


هناك لغات قد تستخدم كلمة أخرى لتعريف المتغير بقيمة NULL مثل nil في لغة Ruby وكلمة None في لغة Python وكلمة null في لغة JavaScript

الخلاصة