المتغيرات في لغة بايثون
| المفهوم أو القاعدة البرمجية | طريقة العمل والتطبيق في الشيفرة | التقييم البرمجي ونوع التسمية |
|---|---|---|
| تعريف المتغير Variable | معرف برمي يشير إلى موقع تخزين القيمة في الذاكرة العشوائية وتتعرف بايثون على نوع البيانات تلقائياً دون إعلان مسبق | مفهوم أساسي |
| البداية الصحيحة للمعرف | يجب أن يبدأ اسم المتغير بحرف أبجدي كبير أو صغير أو بشرطة سفلية فقط | قاعدة إلزامية ومسموحة |
| مكونات اسم المتغير | يمكن أن يحتوي المتغير على مزيج من الحروف والأرقام والشرطة السفلية بعد الحرف الأول | قاعدة إلزامية ومسموحة |
| بدء المتغير برقم | يمنع منعاً باتاً كتابة رقم في خانة الحرف الأول من اسم المتغير مثل كود 2name | قاعدة ممنوعة وتسبب خطأ |
| المسافات الفاصلة | يمنع استخدام المسافة العادية للفصل بين الكلمات داخل الاسم الواحد مثل كود my name | قاعدة ممنوعة وتسبب خطأ |
| الكلمات المحجوزة للغة | يمنع استخدام الكلمات الدليليلة الخاصة ببنية بايثون مثل كلمات if أو for أو class كمتغيرات | قاعدة ممنوعة وتسبب خطأ |
| أسلوب snake_case | ربط الكلمات بشرطة سفلية منخفضة وتكون كافة الحروف صغيرة مثل كود user_name | النمط القياسي والمفضل في بايثون |
| أسلوب camelCase | تبدأ الكلمة الأولى بحرف صغير وتبدأ الكلمات التالية بحرف كبير دون مسافات مثل userName | نمط شائع في لغات برمجية أخرى |
| أسلوب UPPER_CASE | كتابة الاسم بالكامل بحروف كبيرة والفصل بين الكلمات بشرطة سفلية مثل MAX_SIZE | النمط المعتمد للإشارة إلى الثوابت برمجياً |
1. مفهوم المتغيرات في Python المتغير (Variable) في لغة بايثون هو عبارة عن اسم أو مُعرّف (Identifier) يشير إلى مساحة محددة داخل ذاكرة الوصول العشوائي (RAM) تُخزن فيها قيمة معينة.
تتميز لغة Python بأنها لغة ذات كتابة ديناميكية (Dynamically Typed)؛ وهذا يعني أن المطور لا يحتاج إلى الإعلان عن نوع البيانات (مثل int أو string) بشكل مسبق عند كتابة المتغير، بل يقوم محرك بايثون بفحص القيمة المسندة وتحديد نوع البيانات في الذاكرة بشكل تلقائي بمجرد التشغيل.
2. القواعد القانونية لتسمية المتغيرات (Naming Rules) يخضع بناء أسماء المتغيرات في بايثون إلى محددات صارمة يترتب على مخالفتها حدوث خطأ في بناء الجملة البرمجية (SyntaxError).
أولاً: الحالات المسموحة والمطابقة للمواصفات يجب أن يكون الحرف الأول من اسم المتغير حرفاً أبجدياً (A-Z أو a-z) أو شرطة سفلية (_).
يمكن أن تحتوي بقية خانات الاسم على أرقام (0-9) بالإضافة إلى الحروف والشرطة السفلية.
أسماء المتغيرات حساسة لحالة الأحرف (Case-Sensitive)، فالرمز Age يختلف تماماً عن age.
ثانياً: الحالات الممنوعة والمخالفة للمواصفات البدء برقم: لا يمكن للمتغير أن يبدأ برقم كـ 2name.
إدراج مسافات: يمنع فصل الكلمات بالمسافات مثل user name؛ حيث تعتبرها البيئة أمراً برمجياً منفصلاً.
الرموز الخاصة: يمنع استخدام الرموز الرياضية أو الخاصة مثل (-, !, @, $, %) داخل الاسم.
الكلمات المحجوزة (Reserved Keywords): تمتلك بايثون كلمات دلالية مخصصة لبناء منطق اللغة (مثل: if, for, class, while, and)، ويحظر استخدامها تماماً كأسمـاء للمتغيرات.
3. معايير وتنسيقات التسمية (Naming Conventions) توجد أنماط كتابية متفق عليها عالمياً بين المطورين لتنظيم الشيفرة البرمجية وجعلها أكثر مقروئية (Readability)، وتختلف حسب الغرض من المتغير:
تنسيق snake_case: تُكتب جميع الحروف صغيرة (Lowercase) وتُفصل الكلمات بواسطة الشرطة السفلية (_). هذا الأسلوب هو المعيار الرسمي والموصى به في وثيقة توثيق بايثون الرسمية (PEP 8) لتسمية المتغيرات والدوال.
تنسيق camelCase: تبدأ الكلمة الأولى بحرف صغير، ثم تبدأ كل كلمة تالية بحرف كبير (Uppercase) دون فواصل. يُستخدم بكثرة في لغات مثل JavaScript و Java، ولكنه أقل استخداماً في بايثون.
تنسيق UPPER_CASE: تُكتب جميع الحروف كبيرة (Uppercase) مع استخدام الشرطة السفلية للفصل. يُستخدم هذا النمط حصرياً للإشارة إلى الثوابت (Constants)؛ وهي القيم التي تُعرف في بداية البرنامج ويُفترض عدم تغييرها أثناء سير العمل.
| 1 | # إسناد القيم للمتغيرات مباشرة دون تحديد النوع |
| 2 | age = 25 # يُعامل كعدد صحيح (Integer) تلقائياً |
| 3 | name = "nouvil" # يُعامل كسلسلة نصية (String) تلقائياً |
مثال 1: إنشاء واستخدام المتغيرات
| 1 | # متغيرات مختلفة الأنواع |
| 2 | name = "سارة" |
| 3 | age = 28 |
| 4 | salary = 5500.50 |
| 5 | is_employed = True |
| 6 | |
| 7 | print(name, age, salary, is_employed) |
مثال 2: تعيين متعدد
| 1 | # تعيين متعدد في سطر |
| 2 | x, y, z = 10, 20, 30 |
| 3 | print(x, y, z) |
| 4 | |
| 5 | # تبادل قيمتين (Python طريقة أنيقة) |
| 6 | a = 5 |
| 7 | b = 10 |
| 8 | a, b = b, a # الآن a=10 و b=5 |
| 9 | print(a, b) |
مثال 3: type() لمعرفة نوع المتغير
| 1 | x = 42 |
| 2 | name = "Python" |
| 3 | pi = 3.14 |
| 4 | flag = True |
| 5 | |
| 6 | print(type(x)) # <class 'int'> |
| 7 | print(type(name)) # <class 'str'> |
| 8 | print(type(pi)) # <class 'float'> |
| 9 | print(type(flag)) # <class 'bool'> |