ما هي المتغيرات وأنواع البيانات ؟
السلام عليكم ورحمة الله وبركاته
الفهرس
المقدمة
لعل أهم شيء ستجده في البرمجة هو تخزين البيانات والتعامل معها
سواء كانت هذه البيانات رقمية أو نصية أو غيرها
لذا كل لغة توفر لك طريقة لتخزين تلك البيانات المختلفة والتعامل معها
عن طريق أنك تنشيء متغيرات والمتغيرات هي رموز او مسميا تخزن قيمة ما
مثل ما كنا نفعله في الرياضيات عندما نقول س = 5
هنا قمنا بتخزين القيمة 5
في المتغير س
نفس المفهوم تمامًا في البرمجة نقوم بتعريف متغير ونعطيه قيمة معينة مثل x = 5
ما هي المتغيرات ؟
المتغيرات هي مجرد مسميات نستخدمها ونعرفها لنعطي لها قيم مثل ما نفعل في الرياضيات عندما نقول أن س = 5
و ص = 10
هنا الـ س
والـ ص
هما متغيران نستخدمها لتخزين قيم معينة فيهما
يمكن أن نسميهم أي اسم سواء كان x
أو y
أو z
أو age
أو name
أو أي اسم آخر
وهذه المتغيرات تكون مرتبطة بنوع البيانات التي تحتويها
- فمثلا عندما نقوم بكتابة
age = 25
هكذا المتغيرage
يحتوي على القيمة25
وهذه القيمة هي عدد صحيح - وعندما نقوم بكتابة
price = 49.99
هكذا المتغيرprice
يحتوي على القيمة49.99
وهذه القيمة هي عدد كسري - وعندما نقوم بكتابة
name = "Ahmed"
هكذا المتغيرname
يحتوي على القيمةAhmed
وهذه القيمة هي نص - وعندما نقوم بكتابة
letter = 'A'
هكذا المتغيرletter
يحتوي على القيمةA
وهذه القيمة هي حرف - ... وهكذا
فمثلا عندما نقوم بكتابة 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
- القيمة التي يحتويها المتغير مثل
25
أوA
- المساحة التي يحتاجها المتغير لتخزين هذه القيمة مثل
4 bytes
أو1 byte
- العنوان الذي يحتله المتغير في الذاكرة مثل
0x7ffd1afe0a9c
أو0x8a9de7fa15fd
ودائمًا ما يكون بالنظام السادس عشريHexadecimal
العنوان هو شيء خاص باللغة وكل شيء في الذاكرة له عنوان خاص به ويحجز مساحته في الذاكرة
اللغات تستخدم هذه العناوين للوصول إلى المتغيرات والتعامل معها
أما المسميات التي نحددها نحن مثل 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 ...
float
: يستخدم لتخزين الأعداد الكسرية الصغيرة
بمعنى أنه يقبل7
أرقام فقط بعد العلامة العشرية لكنه يستهلك مساحة أقل في الذاكرة
لأنه يحجز4 bytes
فقطdouble
: يستخدم لتخزين الأعداد الكسرية الكبيرة
بمعنى أنه يحجز15
رقم فقط بعد العلامة العشرية لكنه يستهلك مساحة أكبر في الذاكرة
لأنه يحجز8 bytes
فقط
في لغات مثل 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
الخلاصة
- المتغيرات هي مجرد مسميات نستخدمها لتخزين البيانات
- كل متغير يحتوي على نوع بيانات معين
- هناك العديد من أنواع البيانات المختلفة مثل
int
وfloat
وchar
وstring
وbool
وغيرها - كل نوع بيانات يحجز مساحة معينة في الذاكرة لتخزين القيمة
- يمكنك استخدام المتغيرات في العمليات الحسابية والمنطقية