![]() |
|
الفصل(8): الدوال والاجراءات - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : الأقسام التعليمية - المنتدى القديم (http://vb4arb.com/vb/forumdisplay.php?fid=90) +--- قسم : قسم دورات المنتدى (http://vb4arb.com/vb/forumdisplay.php?fid=113) +---- قسم : دورة تعليم البرمجة باستخدام VB.net, (http://vb4arb.com/vb/forumdisplay.php?fid=129) +---- الموضوع : الفصل(8): الدوال والاجراءات (/showthread.php?tid=4374) |
الفصل(8): الدوال والاجراءات - B3dak Hbebe - 23-09-12 السلام عليكم ورحمة الله وبركاته
بسم الله الرحمن الرحيم اليوم سوف نتطرق لموضوع بالغ الأهمية في فيجوال بيسك دوت نت وهو الاجراءات و الدوال. أفضل شرح هذا الدرس باستخدام مشروع Widows Appllication أولا:الدوال Functions الدالة Function : هي عبارة عن برنامج صغير يستقبل وسيطات(Parameters) ويطبق بعض العمليات عليها ثم يخرج لنا ناتج الدالة...وتكون بالشكل التالي: كود : Function FunctionName ( Parameters) أي أننا نقوم بتعريف دالة جديدة باستخدام الكلمة المحجوزة Function ونضع بعدها اسم الدالة FuncionName ثم بين قوسين نضع الوسيطيات(Parameters)
القسم الأول: الدوال الموجودة في فيجوال بيسك دوت نت بداية الدوال الموجودة في فيجوال بيسك دوت نت كثيرة جدا وسنشرح القليل منها ان شاء الله هناك دوالة رياضية و هناك دوال لها وظائف تقنية كالتحويل وبعض الوظائف الأخرى.. هناك تركيبة(Structure-راجع فصل التركيبات) خاصة باللغة تسمى بMath وتحتوي الكثير من الدوال ويمكن استخدامها بسهولة.. مثال: حساب القيمة المطلقة لقيمة عددية(نعرف القيمة المطلقة بانها القيمة الموجبة للمقدار سواء كان موجبا أو سالبا) أنشيء نموذج جديد وضع فيه أداة نص TextBox وأداة تسمية Label وأداة زر Button واضبط الخصائص ليظهر بالشكل التالي: وفي اجراء Click للزر Button أدخل الكود التالي: كود : Label1.Text = Math.Abs(Integer.Parse(TextBox1.Text)) ببساطة: استدعينا الدالة Abs من التركيبة Math والتي تقوم بحساب القيمة المطلقة ولاحظ أننا استخدمنا الدالة Integer.Parse لتحويل محتوى النص من صورته النصية إلى عددية
مثال آخر: Label1.Text = Math.Pow( 2 , 3 ) وضعت هذا المثال لتوضيح أن الدالة لا تقتصر على وسيط واحد بل أكثر حسب المراد وتقوم الدالة Pow بحساب القوة الثالثة للأساس 2 ويمكنك تغيير القيم حسب رغبتك.
وبتطرق بسيط إلى الدوال التي تقوم بوظائف تقنية كالتحويل بنستعرض بعض الأمثلة: مثال: تحويل القيمة النصية إلى قيمة عددية كما رأينا في مثال حساب القيمة المطلقة فاننا قمنا بعملية تحويل من نص(مدخل صندوق النص) إلى قيمة عددية لان الدالة Abs لا تتعامل مع نصوص بل أعداد وجرب إزالة التحويل وسيظهر الخطأ. اذن ان اردنا التحويل من قيمة نصية لعددية يمكننا استخدام الدالة Integer.Parse(String) وتقوم بتحويل النص الوسيط إلى قيمة عددية مثال آخر:تحويل القيمة العددية لنصية: هناك بعض الدوال التي لا تستطيع التعامل مع القيمة على صورتها العددية بل تحتاج وسيط نصي فنقوم بتحويل الصورة العددية إلى صورتها النصية باستخدام الدالة كود : [align=left] Str(Number) فهذه الدالة تستقبل وسيط عددي ويكون ناتجها صورة نصية
بهذا نكون انتهينا من الدوال الموجودة في فيجوال بيسك دوت نت الآن ماذا اذا أردت صنع دالة خاصة مثلا تقوم بحساب مساحة دائرة...؟ يمكنك بناء دالة باستخدام الكلمة المحجوزة Function كما وضحنا في بداية الدرس بداية الصورة الافتراضية للدالةو بما أن للدالة ناتج و قيمة فالافضل تحديد نوع الدالة: كود : [align=left] Function Fun_Name (Parameters) As Type الآن سوف نسمي الدالة باسم CircleArea وعلينا تحديد الوسيطات اللازمة لعلمية حساب المساحة وكما هو معروف لا يلزمنا سوى نصف قطر الدائرة وبالنسبة للقيمة ط (PI) يمكننا استخدامها من خلال الثابت Math.PI
تمعن في الكود التالي: كود : [align=left] Function CircleArea(ByVal Radius As Integer) As Double الآن انظر معي:
قمنا بصنع دالة سميناها CircleArea والتي تقوم بحساب مساحة الدائرة حسب نصف قطرها المدخل وبعدها قمنا بتحديد الوسطيات وهي Radius نصف القطر والآن كما قلنا فان للدالة ناتج لها يمكن استخراجه من عمليات الدالة الداخلية لكن كيف يمكن اعطاء هذه الدالة تلك القيمة بعد انتاجها داخل الدالة.... يمكن ذلك باحدى طريقتين:
توضيح:
في المثال الاخير أردنا أن يكون ناتج الدالة هو المتغير Area ويمكن إعطاء قيمته للدالة كالتالي: الاولى: استخدمنا الأمر Return واستخدمناه كالتالي: كود : Return Area ويقوم باعطاء قيمة Area لناتج الدالة
الثانية: يمكننا استبدال الأمر Return بالاسناد المباشر للقيمة كمثال: كود : CicleArea=Area
أما بالنسبة لByVal و ByRef فيتم شرحهما بعد قليل
لكن ماذا ان اردت الخروج من الدالة عند الوصول لنتيجة معينة يمكن ذلك بسهولة باستخدام الأمر Exit Funtion مثال: كود : [align=left] [align=right] [align=left] [align=right] [align=left] Function Fun_Name (Parameters) As String ويمكنك استخدام الدالة في أي مكان حسبما تحديدك لمحدوديتها كما وضحنا في الفصول السابقة عن المحدودية ومجال الاستخدام
وبهذا يمكنك استنتاج أن من أهم فوائد الدوال توفير الوقت وتقليل حجم الكود. ثانيا:الاجراءات الفرعية Subs تختلف هذه عن سابقتها بانها لا تخرج لنا نواتج وانما تقوم بتنفيذ تعليمات وفقا للوسيطات بداية أيضا هناك اجراءات موجودة اصلا في فيجوال بيسك دوت نت وأخرى تصنعها انت صياغة الاجراء الفرعي مشابهة لصياغة الدالة باختلاف أن الدالة يمكنك تحديد نوع ناتجها بينما الاجراء الفرعي تستطيع تحديد مقبض الإجراء أولا : الدوال الموجودة في فيجوال بيسك دوت نت سوف نستعرض مثالا من الاجراءات الموجود في فيجوال بيسك دوت نت ونوضح أجزاءه مثال: كود : [align=left] Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click الشرح:
الآن اصنع الاجراء الخاص بك بنفسك:
بداية الصيغة العامة للاجراء الفرعي هي Sub
كود : Sub_Name (Parameters) والآن لنقوم بتصميم اجراء فرعي يقوم باغلاق النموذج الذي نمرره للاجراء
كود : Sub CloseForm(frm As Form) لكن كيف يمكن استدعاء هذا الحدث وتمرير الوسيطات له
ضع زر Button جديد واضغط عليه ضغطا مزدوجا وقم يكتابة الكود التالي: رمز برمجي:
CloseForm(Me) هنا قمنا باستدعاء الاجراء CloseForm ومررنا له النموذج الحالي(Me)
ويمكن أيضا استدعاء الاجراء بالطريقة التاليه باستخدام الكلمة المحجوزة Call مثال: رمز برمجي:
Call CloseForm(Me)
الآن انتهينا من الدوال والاجراءات وبقت علينا قضية تتعلق بتمرير الوسيطات
الارسال بالقيمة او الارسال بالمرجع أولا: الارسال بالقيمة باستخدام الكلمة المحجوزة ByVal هنا يتم تمرير المتغيرات دون تغيير القيمة الاصلية للمتغير وبالتالي يتم ارسال نسخة جديدة من البيانات المرسلة في كل مرة تستدعي فيها الاجراء لذا فهي تستهلك مزيدا من الوقت لكنها لا تؤثر على باقي أجزاء البرنامج لانها تقوم بارسال نسخة جديدة من البيانات المرسلة. ثانيا:الارسال بالمرجع باستخدام الكلمة المحجوزة ByRef هنا يتم ارسال مؤشر للمتغير مما يمكنك بتغيير قيمة المتغير الاصلية وهنا لا يتم انشاء نسخة جديدة من البيانات بل فقط يتم ارسال البيانات الاصلية وهنا تكون العملية اسرع من الارسال بالقيمة بهذا نكون قد انتهينا ان شاء الله من الشرح لهذا الفصل وسوف اعرض مثالا يجمع الكثير مما تم دراسته في الفصول السابقة. أولا :قم بفتح مشروع جديد من نوع Windows Appllication وأضف نموذج غير الاصلي وأيضا قم باضافة وحدة نمطية (Module) ويمكن استخدام الModule في صناعة الاجراءات واستخدامها في كامل اجزاء المشروع ثانيا:سمي النموذج الاول بـ MainForm والثاني بـMsgForm واضف الأدوات الظاهرة بالشكل واضبط خصائصها كما هو واضح: في داخل الموديول أضف الكود التالي: كود : Const PI As Double = 3.14 في هذا الكود قمنا بتعريف ثابت اسميناه PI واسندنا اليه القيمة 3.14
وقمنا ببناء تركيبة من نوع Structure واسميناها Circle ووضعنا فيها دالتين واحدة تقوم بحساب محيط الدائرة والثانية تقوم بحساب مساحة الدائرة كما قمنا بصنع اجراء يقوم بعرض النموذج MsgForm من خلال الامر ShowDialog الذي يقوم باظهار النموذج على شكل مربع حوار مثل مربعات الرسائل أما في نموذج MainForm فتمعن في الأكواد التالية داخل النموذج وكذلك نموذج الMsgForm كود : Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click وقد وضعت لكم المثال كاملا بالمرفقات
أو من الرابط التالي http://www.4shared.com/rar/zxklLlvC/Example.html نتمنى ان تكونوا قد استمعتم معنا أبلغكم تحياتنا Lo2i و Mohammed Asaad انتظروا الدرس القادم الفصل(8): الدوال والاجراءات - abdoojh - 20-02-13 جزاكم الله خيرا الدرس يحتاج للتركيز فهمت 75% من محتوى هذا الدرس واشكركم على المجهودات الطيبة الفصل(8): الدوال والاجراءات - خليل اسماعيل - 27-04-13 يارك الله فيك RE: الفصل(8): الدوال والاجراءات - nagoma - 15-08-18 (23-09-12, 12:41 PM)B3dak Hbebe كتب : السلام عليكم شكرا على الشرح أخي الكريم هل أستطيع أن اطلب منك أن تساعدني في مشروعي لأني مشروعي باستخدام البروسيجر و أجهل بعض الاشياء |