10. الذاكرة للمبتدئ: ثلاث قواعد
الهدف
رابط إلى قسم «الهدف»أن تعرف ثلاث قواعد للذاكرة في ميم، وأن تقرأ رسالة الكاشف حين تخطئ فيها: أي سطر، وماذا حدث.
الشرح
رابط إلى قسم «الشرح»لا جامع قمامة في ميم: الذاكرة التي يأخذها برنامجك تعيدها أنت، أو تعود كلها عند خروجه. ثلاث قواعد تكفيك الآن:
- احجز: ما تبنيه يأخذ مكاناً في الذاكرة: قائمة
[...]، وقاموس{...}، ونص تبنيه بـ+أونص(...). أما النص المكتوب بين علامتي تنصيص كما هو فلا يُحجز. - حرّر: حين تنتهي من شيء بنيته، أعده بـ
حرر(الاسم)، مرة واحدة، ولا تستعمله بعدها. - خاتمه:
خاتمه حرر(الاسم)تكتبها بجانب سطر الحجز، فيُحرَّر الشيء وحده عند الخروج من الكتلة (آخر البرنامج، أو آخر كل دورة في حلقة). هكذا لا تنساه.
# القاعدة 1: ما تبنيه يُحجز: قائمة، ونص بـ +اسماء = ["ليلى", "عمر"]تحية = "أهلاً يا " + اسماء[0]اطبع(تحية)# القاعدة 2: حرّر ما انتهيت منه، مرة واحدةحرر(تحية)# القاعدة 3: خاتمه تحرّر عند الخروج من الكتلة، بجانب سطر الحجزخاتمه حرر(اسماء)لكل ع في مدى(0, 3): سطر = "سطر " + نص(ع) خاتمه حرر(سطر) اطبع(سطر)المثال شُغّل بالخيار --debug-mem، وهو يطبع في آخر البرنامج كل ما حُجز ولم يُحرَّر. ولم يطبع شيئاً، فكل ما حُجز عاد.
كيف يخبرك الكاشف
رابط إلى قسم «كيف يخبرك الكاشف»meem برنامج.م يشغّل برنامجك ومعه كاشف الذاكرة: يراقب ما تحجزه وما تحرّره. فإن خالفت القاعدة الثانية أوقف البرنامج برسالة فيها السطر.
استعمال قائمة بعد تحريرها:
درجات = [90, 75]حرر(درجات)اطبع(طول(درجات))رمز الخروج: 3
في فهرس الأخطاء: E0428
سطر 3:10 يعني السطر الثالث، الحرف العاشر. وE0428 معرّف الخطأ، وشرحه في فهرس الأخطاء.
وإن وصلت إلى القائمة نفسها باسم آخر، فالكاشف يذكر أيضاً أين أُنشئت وأين حُرّرت:
درجات = [90, 75]نسخة = درجاتحرر(درجات)اطبع(نسخة[0])رمز الخروج: 3
في فهرس الأخطاء: E0429
نسخة = درجات لا تنسخ القائمة: الاسمان لقائمة واحدة، فحين حُرّرت في السطر 3 لم يبق لـ نسخة شيء. (E0429)
وإن نسيت التحرير، فلا خطأ: كل شيء يعود عند الخروج. لكن --debug-mem يخبرك بما بقي وسطره:
درجات = [90, 75]وصف = "عدد الدرجات: " + نص(طول(درجات))اطبع(وصف)السطر 1 حجز القائمة (كتلتان: رأسها وبياناتها)، والسطر 2 حجز النص.
تمرين
رابط إلى قسم «تمرين»أصلح البرنامج «نسيان التحرير» أعلاه بحيث لا يطبع --debug-mem شيئاً، بالقاعدة الثالثة.
اعرض الحل
درجات = [90, 75]خاتمه حرر(درجات)وصف = "عدد الدرجات: " + نص(طول(درجات))خاتمه حرر(وصف)اطبع(وصف)الأخطاء الشائعة
رابط إلى قسم «الأخطاء الشائعة»- استعمال الشيء بعد
حرر: خطأ تشغيل E0428 بالاسم نفسه، وE0429 باسم آخر. انقلحرربعد آخر استعمال، أو استعملخاتمه حرر. - تحرير الشيء نفسه مرتين: بالاسم نفسه E0347 «تحرير حاوية قيمتها لاشيء»، وباسمين «تحرير مزدوج» (E0350 للقائمة والقاموس، وE0431 للنص).
- ظن أن
ب = اتنسخ القائمة: لنسخة مستقلة استعملنسخ(ا)، وحرّر كلاً منهما.
اقرأ أيضاً
رابط إلى قسم «اقرأ أيضاً»الذاكرة في ميم · الذاكرة في الحلقات الطويلة