التنبيهات التالية ظهرت :
Warning [2] count(): Parameter must be an array or an object that implements Countable - Line: 864 - File: showthread.php PHP 7.4.33 (Linux)
File Line Function
/showthread.php 864 errorHandler->error



تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
اسلوب الأستدعاء الذاتى و مدخل الى تطبيقات اكثر كفائة و عملية
#1
كاتب الموضوع : 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)
فى الواقع هنا سيتم الأنتهاء من المعامل الخاص بالصفر اولا
ثم معامل الواحد ثم معامل الأثنين و هكذا

و السبب هو ان معامل الأربعة ينتظر و تنطلق الدالة التى تم استدعائها (نفس الدالة تستدعى بطلب من نفسها)
و هى الدالة التى تحسب معامل الثلاثة ثم تنتظر و تنطلق دالة الأثنين و هكذا
حتى تنتهى دالة حساب معامل الصفر من عملها فتتبعها دالة حساب معامل الواحد و هكذا



و لكن ما علاقة هذا بمسح المجلدات

حسنا سنقوم بذلك فى المرة القادمة حيث سنتدرج فى الأمر حتى نصنع برنامج يقوم بمسح جميع ملفات النظام و تصنيفه و فك ضغط الملفات المضغوطة و فحصها و تصنيفها بضغطة زر واحد
ان شاء الله
}}}
تم الشكر بواسطة:


الردود في هذا الموضوع
اسلوب الأستدعاء الذاتى و مدخل الى تطبيقات اكثر كفائة و عملية - بواسطة Raggi Tech - 02-10-12, 01:45 AM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
Question [مثال] كيف تضيف اكثر من لغة الى برنامجك HASAN6.0 3 3,341 26-11-15, 11:20 PM
آخر رد: hamada558
Brick [مثال] السحب والافلات على ايقونه البرنامج اكثر من مره والافلات على النافذه الطالب 0 2,338 15-08-15, 09:58 PM
آخر رد: الطالب
  خطوات بسيطه لجعل الفورم على شكل صورة معينه و بشكل اكثر احترافية - بدون أدوات خارجية السكر المغرور 4 7,261 08-05-13, 01:20 AM
آخر رد: السكر المغرور
  عمل ملف Setup لتنصيب برنامجك + إضافة برامج أساسية ظمن عملية التنصيب(شرح بالصور) RaggiTech 0 6,959 05-10-12, 02:25 AM
آخر رد: RaggiTech
  كيفية تنفيذ عملية في مسار آخر وإظهار النتيجة في التحكمات على النموذج RaggiTech 2 2,674 05-10-12, 01:45 AM
آخر رد: RaggiTech
  مثال على عملية إنشاء Windows Service – إنشاء برنامج تشفير تلقائي للملفات RaggiTech 1 2,595 05-10-12, 01:42 AM
آخر رد: RaggiTech
  مدخل عملي لـ N-Tier - التطبيقات المُتعددة الطبقات senior 9 4,115 04-10-12, 04:34 PM
آخر رد: senior
  إنهاء عملية بواسطة مسارها RaggiTech 0 1,482 02-10-12, 01:19 AM
آخر رد: RaggiTech
  تطبيقات متعدد الطبقات بمفهوم مايكروسوفت smss 2 3,544 20-09-12, 02:15 PM
آخر رد: smss

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم