#1
|
||||
|
||||
الدرس الرابع : الإجراءات والدوال - دورة CSharp 2005
الدرس الرابع الإجراءات Procedures الإجراء هو مجموعة أوامر ينفذها المعالج مكتوبة بين حاصرتين { } ويتم تعرفها في مكان واحد في البرنامج ويمكن إستدعائها عدة مرات والإجراء له ثلاثة أشياء مهمة : 1- تعريف الإسمName Decleration 2-المدخلاتParameters 3-الشفرة مكتوبة بين حاصرتين Code فمثلاً عند الدخول إلى شفرة زر رسالة الترحيب في الدرس الأول سنرى هذا الكود: كود PHP:
نلاحظ انه يحتوي على الثلاث الأشياء المهمة للإجراء وهي تعريف الإسم: كود PHP:
كود PHP:
كود PHP:
كما عرفنا متغير من نوع رقم في الدرس السابق: كود PHP:
كود PHP:
مثلاً لو أردنا إجراء يظهر رسالة مكتوب عليها مثلاً "من داخل الإجراء" فسكون التعريف كالتالي: كود PHP:
تشاء يوجد لدينا الإسم: كود PHP:
كود PHP:
وسنعرف فيما بعد كيف نتعامل مع المدخلات ولدينا الشفرة: كود PHP:
والآن إذا أردنا في أي مكان من البرنامج تنفيذ الإجراء فما علينا سوى كتابة اسمه هكذا: كود PHP:
ربما يقول البعض ما الداعي من عمل إجراء وكتابة الكود داخلة ثم إستدعاءه لماذا لا نكتب الكود مباشرة كما فعلنا في الدرس الأول؟؟؟ والجواب ببساطه ماذا لو أردت إظهار الرسالة خمس مرات؟؟ بالطريقة القديمة ستكتب هكذا: كود PHP:
كود PHP:
نلاحظ أن طريقة الإجراءات تسهل التعامل أكثر وتوفر الوقت والجهد ربما يقول البعض لا يوجد فرق كبير بين الطريقتين لكن ماذا إذا كانت الرسالة كبيرة جداً أو ماذا إذا كانت الأوامر أكثر من مجرد إظهار رسالة عندها بالتأكيد الإجراء سيوفر الكثير من الجهد والوقت وإيضا المدخلات تجعل الإجراءات أكثر فائدة : مثلاً لو أردنا أن نطور الإجراء السابق ليظهر رسالة مختلفة في كل مرة نستدعيه سنجعل الرساله المراد إظهارها علي أنها مدخل متغير ويكون تعريف الإجراء كالتالي: كود PHP:
وفي تعليمة إظهار الرسالة جعلنا الكائن MessageBox.Show يظهر ما في المتغير المدخل msg الآن عند إستدعاء الإجراء يجب تمرير قيمة من نوع نص مكان المتغير المدخل هكذا: كود PHP:
الأمر الأول في الكود السابق سيظهر رسالة مكتوب عليها "من داخل الإجراء" والأمر الثاني سيظهر رسالة مكتوب عليها "رسالة مختلفة من نفس الإجراء" ملاحظة: إذا كان لدينا أكثر من مدخل فنفصل بينها بالفاصلة مثلاً: كود PHP:
كود PHP:
الدول هي إجراءات لكن لها خاصية أنها ترجع قيم رأينا في الإجراءات أنا نستدعيها للقيام بعمل محدد فقط أما الدوال فإنا نستدعيها للقيام بعمل محدد وإرجاع قيمة لنا ولها خمس أشياء مهمة: 1- تعريف الإسم Name Decleration 2-نوع القمية التي ستحملها الدالة Result Data Type 3-المدخلات Parameters 4-الشفرة مكتوبة بين حاصرتين Code 5-تعليمة تحميل الدالة للقيمة الناتجة Return phrase مثلاً إذا إردنا عمل دالة تقوم بأخذ رقمين وترجع لنا مجموعهما فيكون التعريف كما يأتي: كود PHP:
ولها مدخلين من نوع رقم x و y وبين الحاصرتين لدينا التعليمات التي تقوم بجمع المتغيرين وفي التعليمة الأخيرة return z تعني تحميل الدلة القيمة الموجود في z وهي مجموع xوy وعند الإستدعاء بنفس الطريقة في الإجراءات لكن الدالة تكون محملة بقيمة : كود PHP:
int z; كود PHP:
كود PHP:
في المثال السابق تعرفنا كيف نستخدم الدالة , رغم اننا لم نستفد منها كثيراً في المثال السابق ولكن كان الغرض منه توضيح إستخدام الدوال . عزل - كبسلة المتغيرات Variables Encabsulation مارأيك بالكود التالي: كود PHP:
لو قمت بتنفيذ الكود السابق , ما الذي ينتج , ستقول ستظهر رسالة مكتوب عليها 15 سأقول لا , لا ليس صحيحاً , سينتج خطأ جسيم !! السبب أن المتغير x معرف داخل الإجراء باللون الأزرق وبالتالي فالمفروض أن نستخدمة في هذا الإجراء فقط , وإذا أستخدمناه في إجراء آخر كما فعلنا فإن المعالج لن يتعرف على هذا المتغير !! .. ولكن ماذا لو أردنا أن نستخدم متغير في أكثر من إجراء؟؟ الجواب: المتغيرات Variables تنقسم إلى نوعين رئيسيين : 1-متغيرات محلية Local وهي التي تعرف وتستخدم داخل الإجراء فقط 2-متغيرات عامة Global وهي التي تعرف خارج الإجراء وتستخدم من قبل إجراءات كثيرة والمتغيرات العامة تنقسم إلى قسمين : ِa- متغيرات خاصة private وهي تستخدم من قبل إجراءات ودوال النافذة الواحدة فقط ولا تراها النوافذ الأخرى كود PHP:
كود PHP:
والأفضل أن يكون تعريف المتغيرات العامة في بداية كود النافذة فوق دالة Main : كود PHP:
. وبالتالي فالإجراء السابق بعد التعديل سيصبح هكذا : كود PHP:
. كود PHP:
بهذه الطريقة عرفنا x مرة واحدة ويمكن إستخدامه في أكثر من إجراء من نفس النافذة ملاحظة: إذا أردنا أن نكتب تعليق في الشفرة أو ملاحظة بدون أن يقرأها المترجم فإننا نكتب في بداية السطر // والمترجم لن يقرأ الكود التي تحول لونها إلى الأخظر كما فعلنا في الكود السابق , أما إذا كانت الملاحظة من عدة أسطر ولا نريد أن نضيف // لكل سطر نتيجة الكسل أو ما شابه فيكفي أن نكتب*/ في بداية الملاحظة و/* في نهاية الملاحظة : كود PHP:
وهذا السطر ايضا وهذا أيضاً*/ MessageBox....... .. ملحق 1 : تعقب الأخطاء Appendix 1 : Error Handling كثيراً ما تحدث أخطاء في البرامج نتيجة تعامل المستخدم مع البرنامج , وبدون تعقب للأخطاء سيغلق البرنامج بمجرد أي خطأ , لذلك يجب على المبرمج تعقب الأخطاء ليمنع من إغلاق البرنامج وليظهر رسالة للمستخدم بالخطأ مثلاً في تطبيق الآله الحاسبة في الدرس الثاني ماذا لو أدخل المستخدم حرف بدل من رقم بالتأكيد كائن التحويل Convert.ToInt32 سيطلق خطأ لأنه لن يستطيع تحويل حرف إلى رقم الكود كان هكذا : كود PHP:
لتعقب الأخطاء نستخدم جملة try و catch حيث نكتب الكود الذي يمكن أن يسبب خطأ ضمن جملة try ونكتب الكود الذي ينفذ في حالة حدوث حطأ ضمن جملة catch ويصبح الكود السابق هكذا: كود PHP:
وإذا حصل إي خطأ فإن المعالج سينتقل لتنفيذ الكود باللون الأحمر أما إذا لم يحدث أي خطأ , فالمعالج لن ينفذ الكود بالأحمر .. ملحق 2 :إنهاء البرنامج Appendix 2 : Program Termination لإنهاء البرنامج نحتاج إلى كائن يتعامل مع بيئة الدوت نت وهذه هي التعليمة : كود PHP:
والتعليمة Exit تجعل المعالج ينهي البرنامج ويفرغ الذاكرة Release Memory References والمدخل 0 يعني إنهاء البرنامج تماماً و سنعرف فيما بعد مدخلات أخرى لهذه التعليمة ملحق 3 : التعامل مع ملفات المشروع Appendix 3 :-Dealing with project files في لغات البرمجة المشروع ليس ملف وحيد فقط , انما مجموعة من الملفات المترابطة مع بعضها بواسطة ملف المشروع وعند فتح المشروع يجب فتح الملف الأساسي للمشروع وسيقوم هو آلياً بتحميل جميع ملفات المشروع لبيئة التطوير : كما في الصورة فالملف الأساسي للمشروع هو بامتداد csproj وإذا كان المشروع متعدد البرامج فالملف الأساسي هو بإمتداد sln أما إذا كان المشروع برنامج واحد كما في مشروعنا فيمكن فتح أي منهما وإذا أردت أن تنسخ المشروع فعليك نسخ المجلد بالكامل الذي يحتوي على جميع الملفات ثم فتح المشروع بواسطة ملف المشروع الأساسي التطبيق ربما تسائل الكثير عن وظيفة الملفات الكثيرة التي تنتهي بإمتداد dll حان الوقت لنعرف ذلك , dll هي إختصار لـ Dynamic Link Library هذه الملفات كتبت بلغة برمجة و تحتوي على دوال وإجرائات وكائنات و تستخدم في برامج أخرى, مثلاً دالة إظهار رسالة كما إستخدمناها في الدروس السابقة موجودة في ملف اسمة System.dll ينزل مع لغة البرمجة , وبدون هذا الملف لن نستطيع إظهار الرسالة , حيث أن شفرة إظهار الرسالة ورسم صندوق الرسالة ورسم زر موافق ورسم شريط العنوان كلها هذه الشفرة مكتوبة مسبقاً وموجود في الملف System.dll ونحن ما علينا سوى إستدعائها من الملف كما نستدعي دالة أو إجراء عادي , وهناك دوال كثيرة أخري تتعلق بقواعد البيانات موجوده في الملف System.Data.dll وهناك دوال الرسم موجوده في System.Drawing.dll .... إي أن الدوال و الإجراءات والكائنات في لغات البرمجة مقسمة في ملفات بغرض تنظيمها وعندما تريد إستخدام دالة في ملف محدد يجب أن تظيف هذا الملف إلى مشروعك حتى يتعرف علية المعالج ويستطيع إستدعاء الدوال داخلة . ربما تسأل كيف إستخدمنا دالة إظهار الراسالة في الدروس السابقة ولم نظيف ملف System.dll الإجابة أن لغة البرمجة تضيف هذا الملف آلياً لأنه يحتوي على دوال كثيرة الإستخدام ومهمة ولتعرف إن هذا الملف مضاف في المشروع : أفتح نافذة ملفات المشروع كما في رقم 1 ثم إفتح الملحقات References رقم 2 سترى مجموعة من الملفات مضافة للمشروع ومنها ملف System رقم 3 وفي بداية كود النافذة يجب إستدعاء الملف بإستخدام تعليمة using حتى يتم تحميل جميع كائنات ودوال الملف ويتمكن المعالج من معرفتها وإستخدامها . أحياناً ملف dll يحتوي على كائنات داخلة وداخل كل كائن دوال مختلفة في هذه الحالة لن نستطيع إستدعاء الدالة كما فعلنا في دالة إظهار الرسالة لأن المعالج لا يعرف مكان الدالة في الملف فهو يفحص الدوال الموجوده في الملف ولكنه لا يفحص الكائنات , لذلك لا يجد الدوال المخزنة داخل كائنات ويجب علينا أن نحدد عنوان الدالة داخل الملف , ويتم ذلك بكتابة إسم الكائن متبوعاً بنقطة ثم إسم الكائن الداخلي ... وهكذا حتى نصل إلى مكان الدالة مثلاً دالة إنهاء البرنامج هي Exit , وهذه الدالة موجوده داخل كائن إسمة Environment وهذا الكائن موجود داخل ملف System , فإذا إستدعينا هذه الدالة بإسمها فقط فإن المعالج لن يعرف عنوانها ويظهر لنا خطأ , لذلك وجب علينا تحديد عنوانها هكذا : كود PHP:
وبما أن تطبيقنا يشغل ملفات صوت وفيديو فيجب علينا إضافة الملفات التي يوجد فيها دوال الصوت والفيديو ودوال الصوت والفيديو موجود في ملفي dll وللأسف هذه الملفات لا ينزل مع لغة البرمجة لذلك يجب تنزيلها من هذا الرابط بعد تنزيل الملفات وفك الضغط , إفتح المشروع وافتح نافذة ملفات المشرع واضغط بالزر الأيمن على References وإختار Add Reference ستظهر لك هذه النافذة: إختر Browse من تبويب .Net Assemply ثم أضف ملف Microsoft.DirectX.AudioVideoPlayback.dll الذي قمت بتنزيله حتى يظهر الملف في قائمة الملفات المختارة رقم 3 , ثم إختر OK سترى أن الملف تم إضافتها إلى قائمة الملفات الملحقة : الآن في أعلى كود النافذة يجب إستدعاء الملف ليتعرف عليه المعالج وذلك بإضافة الكود: كود PHP:
الآن إذهب إلى تصميم نافذة تطبيق الدرس السابق و قم بحذف القائمة l1 وعدل النص في الزر من "تشغيل الدوارة" إلى "فتح ملف الصوت" إسحب زر آخر وأكتب عليه "تشغيل ملف الصوت" ثم إسحب أداة OpenFileDialog إلى النافذة ستلاحظ أنها لن تضاف في النافذة وإنما في شريط أصفر تحت وذلك لأن هذه الأداة لا تظهر على النافذة مثل الزر أو صندوق النص الآن إختر الأداة من الشريط الأصفر و غير إسمها من openFileDialog1 إلى OF ليسهل التعامل معها من الكود حتى يصبح شكل النافذة هكذا : الآن سنقوم بتعريف متغير من نوع مشغل صوت Audio, وهذا النوع موجود في ملف Microsoft.DirectX.AudioVideoPlayback كنا نعرف متغير من نوع رقم هكذا : كود PHP:
كود PHP:
لاحظ أن النوع Audio لا يعتبر متغير وإنما كائن لأنه يحتوي على أفعال وصفات ودوال كما سنرى ولكن لاحظ أننا سنستخدم هذا الكائن في إجرائين إثنين , إجراء فتح الملف و إجراء تشغيل الملف إذا في أي إجراء سنعرفه ؟؟ .... يجب أن يكون هذا المتغير متغر عام Global لذلك يجب أن نعرفه خارج الإجرائين ونحدد هل هو عام لجميع النوافذ أم خاص لهذه النافذة إبحث عن مكان في الشفرة خارج الإجرائين , والمفضل أن يكون كما حددته في الدرس وقم بتعريف الكائن بهذا الكود : كود PHP:
الآن افتح التصميم و اضغط مزدوجاً على زر "فتح ملف الصوت" لتذهب إلى الكود إمسح الكود من الدرس السابق : وأضف هذا الكود : كود PHP:
كود PHP:
هذة الدالة ترجع قيمة من نوع نص تحتوي على مسار الملف الذي إخترته وفي السطر الثاني إستخدمنا دالة FromFile في كائن Audio لفتح الملف وتحميلة للمتغير ap لاحظ أن الدالة FromFile تتطلب مدخل من نوع نص يحتوي على مسار الملف المراد تحميلة ومسار هذا الملف هو القيمة التي سترجعها الدالة OF.FileName في الكود الثاني إستخدمنا دالة Play في المتغير ap لتشغيل ملف الصوت الآن قم بتشغيل البرنامج وإضغط على زر "فتح ملف الصوت" وإختر ملف صوت من نوع mp3 أو wav , لا تختر ملف من نوع rm سنعرف فيما بعد كبف نشغل ملفات rm و ram بعد إختيار الملف اضغط على زر "تشغيل ملف الصوت" واستمع للصوت الناتج من برنامجك ملاحظة : بما ان التطبيق أستخدم دوال داخل ملف Microsoft.DirectX.AudioVideoPlayback فانه عند تشغيل البرنامج سيقوم المعالج بنسخ هذا الملف إلى مسار البرنامج ولن يعمل البرنامج إلا إذا كان هذا الملف إلى جانبه في نفس المجلد الواجب *ماذا لو إخترت ملفاً غير صوتياً وجربت تشغيلة بالطبع سيظهر لك خطأ ويتوقف البرنامج , ما رأيك لو تعقبت هذا الخطأ وأظهرت رسالة بالعربية تخبر المستخدم ما اللذي يجري . تلميح : ظهر الخطأ سيكون عند تعليمة كود: كود PHP:
يمكن أيضاً أن يظهر خطأ عند التعليمة : كود PHP:
*أضف زر لإنهاء البرنامج وأرسل التطبيق .. ملاحظة مهمة: ليعمل تطبيق الصوت في أنظمة لا تحتوي على DirectX SDK يجب إرفاق ملف DirectX الذي قمت بتنزيله في مجلد التطبيق بجانب ملف البرنامج بمعنى أن نضع هذا الملف بجانب ملف البرنامج exe كما في الصورة .نهاية الدرس الرابع. .. 7oma حماة النهضة ..
|
|
|
المواضيع المتشابهه | ||||
الموضوع | كاتب الموضوع | المنتدى | مشاركات | آخر مشاركة |
الدرس الثالث : الجمل الشرطيه - دورة CSharp 2005 | microtop | دورة CSharp 2005 من منتديات المشاغب | 1 | 03-16-2010 06:19 PM |
الدرس الثاني : المتغيرات - دورة CSharp 2005 | khaledbelal | دورة CSharp 2005 من منتديات المشاغب | 0 | 03-12-2010 03:56 PM |
نبذه مختصرة عن الهدف من الدورة - دورة CSharp 2005 | microtop | دورة CSharp 2005 من منتديات المشاغب | 2 | 03-10-2010 09:32 PM |
الدرس الاول : مفهوم لغات البرمجة - دورة CSharp 2005 | microtop | دورة CSharp 2005 من منتديات المشاغب | 0 | 03-09-2010 05:45 PM |
فهرس دورة البرمجه بلغة CSharp 2005 | microtop | دورة CSharp 2005 من منتديات المشاغب | 0 | 03-09-2010 05:36 PM |