02-10-12, 01:45 AM
كاتب الموضوع : egyption-coder
تصنيف الموضوع للمبرمج المتوسط و لن يعنى المتقدمين كثيرا
__________________________________________________ _
صغر حجم الكود .. استهلاك اقل للذاكرة
اعتقد ان هذه الأمور من اهم ما يشغل المطورين و المبرمجين فى جميع اللغات
ناهيك عن برامج لا يمكن تطبيقها الا بهذا الأسلوب
مثل مستكشف الويندوز (windows Explorer) او برامج مضادات الفيروسات أو برامج الكراك أو الألعاب..الخ
بالطبع الموضوع قديم و لكن نظرا لأمكانية تجاهله فقد تجاهله الكثير من المبرمجين و بعضهم يتجنبه
اما البعض الأخر فيكتفى بنظرة خاطفة على الموضوع ثم يتحول عنه
ان اسلوب الأستدعاء الذاتى قد بدأ استخدامه منذ الأصدارات الأولى من الفيجوال بيزيك و قد اصبح من الصعب تجنبه بعد ظهور الفيجوال دوت نت و هو ذلك الأجراء الذى يقوم باستدعاء نفسه بنفسه
و فى هذا الموضوع ان شاء الله سأحاول ان اوضح كيف يمكن ان نستخدم هذا الأسلوب فى انشاء مستكشف للملفات و عمل مسح تلقائى لجميع الملفات على الهارد و من ثم تصنيفها مما يمكننا بعد ذلك من قرائة انواع معينة منها ثم مقارنتها بنماذج قياسية لمعرفة هل هى ملفات ضارة ام لا و من ثم حذفها او تعطيلها ..... و فى الحقيقة ان الجزء الصعب و المهم فى الموضوع هو النصف الأول حيث انك اذا ما تمكنت من مسح جميع الملفات و فك المضغوط منها و تحديد انواع الأمتدادات التى تريدها ان فعلت ذلك تلقائيا فأنك تستطيع القيام بالأجرائات التى تريدها من مقارنات و حذف و تغيير فى خصائص تلك الملفات
و سوف اقوم كذلك بشرح اسلوب تعامل الذاكرة مع اسلوب الأستدعاء الذاتى
و سيكون مرجعى فى ذلك الماسترنج بتصرف منى لأصل الى ما ذكرت من نتائج و الله المستعان
و ان رأى الأخوة ان الموضوع قديم او لا يستحق فأرجو ابلاغى توفيرا للوقت و المساحة
اولا لكى نعرف الفكرة التى يقوم عليها الأستدعاء التلقائى اريدك ان تضع تصورا لما نريد
اننا نريد ان ندخل الى الدريف الأول و نتجول بين المجلدات فأن وصلنا الى مجلد نوقف الدالة ثم نفتح المجلد لنتجول بنفس الدالة بين ملفات المجلد و نحصل على بياناتها فان وجدنا مجلد نوقف عمل الدالة و نفتح المجلد الثانى لنتجول بين ملفاته حتى اذا وجدنا نوع ملف نريده اوقفنا عمل الدالة ثم طبقنا بعض الأوامر ثم نستكمل حتى اذا انتهينا عدنا الى الدالة السابقة فأستكملنا باقى المجلدات و هكذا اذا انتهينا رجعنا الى الأولى ثم ننهى الدالة عندما نمسح جميع ملفات الدرايف او محرك القرص الذى نمسحة
لعل الأمر يبدو معقدا قليلاً خاصة للمبتدئين و لكنه ليس كذلك و سيظهر كم الأمر بسيطا بالمثال التالى
تخيل انك تبحث عن كتاب فى منزل و المنزل به عدد من الغرف و كل غرفة بها عدد من الصناديق و الكتب
بعض الكتب خارج الصناديق و بعض الصناديق يحتوى على صناديق اصغر بالأضافة الى الكتب
لا بد انك ستدخل الغرفة الأولى و تفتح اول صندوق ثم تبحث فى محتويات الصندوق فأن كانت كتب قرأت عناوينها و ان وجدت صندوق اخر توقفت عن القراءة ثم قمت بنفس العملية مع الصندوق الثانى
و هنا لنا وقفة....... ان قلنا ان فتح الصندوق و قرائة عناوين الكتب هو دالة
فأننا نستدعى تلك الدالة كلما وجدنا صندوقا حتى اذا لم نجد اي صناديق انهينا كل الدوال المفتوحة واحدة تلو الأخرى لنعود خارج الصندوق الكبير و قد استكشفنا كل ما فيه من كتب
حسنا لا بد من مثال بسيط يوضح لنا الأمر
هل تذكر ما هو المعامل
ان معامل الرقم ن و الذى يرمز له بـ !ن
يساوى ن × !(ن-1) (الا معامل الصفر فهو دائما يساوى 1)
و بما ان معامل (ن-1)
يساوى (ن-1) × !(<ن-1> -1) يساوى (ن-1) × !(ن-2)
و هكذا فأن
معامل الرقم 4 و الذى يرمز له بالرمز !4
يكون كالتالى
!4 = 4 × !3
= 4×3×!2
=4×3×2×!1
=4×3×2×1×!0
=4×#×2×1×1
= 24
اعتقد انك فهمت ما اقصده تقريباً
ان المعادلة هى
معامل ن = ن × معامل (ن-1)
و اذا كان ن = 0 اذن معامل ن = 1
و لعمل دالة تحسب معامل n
كود :
function facNO (n as integer) as double
if n = 0 then
facNo = 1
Else
facNo = n * facNo ( n-1)
End if
End function
ان الأستدعاء التلقائى هنا هو فى السطر
كود :
facNo = n * facNo ( n-1)
ثم معامل الواحد ثم معامل الأثنين و هكذا
و السبب هو ان معامل الأربعة ينتظر و تنطلق الدالة التى تم استدعائها (نفس الدالة تستدعى بطلب من نفسها)
و هى الدالة التى تحسب معامل الثلاثة ثم تنتظر و تنطلق دالة الأثنين و هكذا
حتى تنتهى دالة حساب معامل الصفر من عملها فتتبعها دالة حساب معامل الواحد و هكذا
و لكن ما علاقة هذا بمسح المجلدات
حسنا سنقوم بذلك فى المرة القادمة حيث سنتدرج فى الأمر حتى نصنع برنامج يقوم بمسح جميع ملفات النظام و تصنيفه و فك ضغط الملفات المضغوطة و فحصها و تصنيفها بضغطة زر واحد
ان شاء الله