15 - سلسلة تبسيط البرمجة – أنواع المعطيات والقيم
السلام عليكم ورحمة الله وبركاته
بسم الله الرحمن الرحيم
تحدثنا عن المتغيرات وأنها عبارة عن أسماء لمواقع ذاكرية لحفظ قيم مختلفة تتغير أثناء سير البرنامج
لأسباب متعلقة بتقليص الأخطاء وتوفير موارد الذاكرة تم تحديد أنواع من المتغيرات لتحتوي أنواع معينة من القيم
ولكي نفهم هذا الكلام لنمثل ذلك بأمثلة من واقعنا
إذا فرضنا أن القيم هي الأشياء وأن المتغيرات هي الحاوية لهذه الأشياء أي الوعاء الذي تقوم باحتوائه
من هنا نجد أنه ليس كل وعاء يصلح لاحتواء أي شيء
فمثلا السلة تنفع لاحتواء الفواكه والخضروات والغسيل وغيره
ولكنها لا تنفع لاحتواء السوائل أو الهواء أو الطحين
وكيس الطحين مناسب لاحتواء الطحين ولكنه لا ينفع لاحتواء الماء
الكوب يحتوي ماء ولكنه لا يمكن أن يحتفظ بالهواء
البالون يمكن أن يحتوي كمية من الهواء ولكنه لا يمكن احتواء مادة الأسيد
لهذا عندما يتم تعريف أوعية أي متغيرات يجب تحديد أنواع القيم والمعطيات التي يُراد الاحتفاظ بها في تلك الحجرات
فمثلا نعرف متغير لحفظ القيم الرقمية والعددية من أجل إجراء العمليات الحسابية
وعليه فإنه لا يقبل الأحرف إلا الرموز المتعلقة بالأمور الرياضية كالنقطة الفاصلة وإشارة السالب
وهناك نوع المعطيات النصي أو السلسلة الرمزية والتي تعبر عن نصوص وقد سميت سلسلة رمزية لأنه مكونة من مصفوفة من الرموز أي الأحرف
وهذا النوع لا يقبل العمليات الحسابية وإنما يقبل العمليات التي تطبق على السلاسل مثل الجمع الذي يقوم بوصل سلسلتين رمزييتين خلف بعضها لتصبح سلسلة جديدة تجمع الاثنين
هناك نوع يدعى التاريخ والوقت وهذا النوع يتعامل مع صيغة متعارف عليها للتعبير عن التاريخ أو الوقت أو كلاهما معا
وهذا النوع يرفض أو يعطي خطأ في حال تم إعطاءه قيم بصيغة لا تتوافق مع التاريخ والوقت كأن تضع في خانة الشهور عدد أكبر من 31 أو الدقائق أكبر من 59 وهكذا
وهناك أنواع مختلفة منها ما هو معرف مسبقا من خلال مترجم اللغة
ومنها يتم تعريفه من قبل المستخدم أو المبرمج ويدعى نوع المعطيات المعرف من قبل المستخدم
إذا تحديد نوع القيم لمتغير ما هام جدا لتنظيم البرمجة وتقليل الأخطاء و إدارة الموارد
وموفقين بإذن الله
التعليقات
المقال جميل جدا
هذا الموضوع ينطبق على اللغات البرمجية غير الديناميكية مثل سي و سي++ و لكنه ﻻ ينطبق على اللغات البرمجية الديناميكية مثل بايثون و روبي،تشكر أخي عبد الرحمن
بعض اللغات تتطلب التصريح المسبق عن نوع المعطيات والبعض الآخر يحدد النوع من خلال أول استخدام
ولكن سؤالي هل في بايثون يمكن تغيير نوع المعطيات تلقائيا
مثلا صرحت عن متحول وأعطيته قيمة نصية
هل تستطيع أن تجمعها إلى متحول من نوع رقم أم أنه سيولد خطأ
وهل الخطأ المتولد أثناء الترجمة أم أثناء التنفيذ ؟
في المثال الذي طرحته في السؤال،إن قمنا بجمع متغير يحوي سلسلة نصية مع متغير آخر يحوي قيمة رقمية سينتج خطأ أثناء تنفيذ اﻷمر،و ذلك بسبب أن بايثون ﻻ يتم ترجمتها مثل سي و لكن يتم تنفيذ(تفسير) الكود سطرا سطرا.
لجمع متغير يحمل سلسلة نصية مع متغير يحوي رقما يجب علينا تحويل محتوى المتغير الثاني إلى نص عن طريق الدالة str و سأعطيك مثاﻻ بسيطا
name = "Abdelmadjid"
age = 24
print "my name is "+name+" and I'm "+str(age)+" years old"
هل توضحت الفكرة
لهذا السبب قلنا أن التصريح المسبق عن نوع المعطيات يعطي فكرة في حال أسندت متغير من نوع ما إلى متغير من نوع آخر ولا يوجد توافق فيعطيك تحذير أو خطأ أثناء الترجمة حتى تتجنب حدوث مثل هذه الأخطاء أثناء التنفيذ
دائما هناك أمر على حساب أمر يعني الديناميكية العالية تحتاج عمليات فحص أكثر
والضوابط الكثيرة تقلل عمليات الفحص وتجنبك المشاكل من البداية
مقدمة السلسلة
https://io.hsoub.com/progra...
الدرس السابق 14
https://io.hsoub.com/progra...
الدرس التالي 16