![]() |
|
الدرس السابع : الدوال والطرق - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : الأقسام التعليمية - المنتدى القديم (http://vb4arb.com/vb/forumdisplay.php?fid=90) +--- قسم : قسم دورات المنتدى (http://vb4arb.com/vb/forumdisplay.php?fid=113) +---- قسم : دورة .net 2008 . لنبدأ سوياً (http://vb4arb.com/vb/forumdisplay.php?fid=138) +---- الموضوع : الدرس السابع : الدوال والطرق (/showthread.php?tid=5301) |
الدرس السابع : الدوال والطرق - oneyemenweb2 - 06-10-12 منقول من المنتدى القديم الكاتب احمد جمال المشرف العام 23-02-08 بسم الله الرحمن الرحيم . السلام عليكم ورحمة الله وبركاته . في الجزء الأول من درسنا لهذا الاسبوع تعرفنا على كيفية تشتغيل Visual Studio .net 2008 ، كان آخر خطواتنا في الدرس السابق ان قمنا بكتابة جملة Hello world وطبعناها على الشاشة ، ضمن باقي دروس هذا الاسبوع سنفهم كيف قمنا بكتابة هذه الجملة وما هو الكلاس .. الدول والتعامل معها وخلافه . بسم الله نبدا ... الدرس السابع : الدوال والطرق - oneyemenweb2 - 06-10-12 منقول من المنتدى القديم الكاتب احمد جمال المشرف العام لنفهم برنامجنا الأول : لو لاحظنا برنامجنا الأول لطباعة جملة Helow World والذي كان بالشكل التالي : كود : using System;كود : Imports System اول ما سنجده هو استيراد المكتبات التي سنستخدمها لكتابة اكوادنا باستخدام using أو Imports في الفيجوال بيسك ، قمنا بشرح هذه الخطوة في دروس سابقة . الجزء الثاني هو تعريف ال name space الخاص ببرنامجنا وهو الاسم الذي توضع تحته كل مكونات البرنامج ، ومن ثم ال Class الاساسي لدينا باسم Main ... كما تعلمنا في اي مبادئ للبرمجة كائنية التوجه فإن أي برنامج يتكون من واحد او اكثر من ال Classes ، الدالة الرئيسية في ال Class المسمى Main هي الدالة main والتي يتم تنفيذها اول شيء في البرنامج . تستقبل الدالة Main مجموعة من الباميتير تحت اسم args ، معنى هذا ان البرنامج يستقبل مع تشغيله مصفوفة من args[0] إلى args[n] ، يمكن ارسال كل ما تريد إلى البرنامج من خلالها ، وهو ما يسمى Command Line Parameters . لكي لا نبعد عن مسارنا في الشرح ، ال Command Line Args هي مجموعة من المتغيرات التي يمكن تمريرها للبرنامج وقت تشغيله لتتحكم في بعض النقاط ، مثلاً لو قمنا بكتابة الامر التالي : كود : Explorer "http://www.vb4arb.com"تستطيع تجربة ذلك على برنامجك من خلال قراءة المتغيرات الممرة له عن طريق For Loop : C#: كود : for (int i = 0; i < args.Length; i++)Vb.net: كود : For i As Integer = 0 To args.Length - 1 الآن قم بالذهاب إلى Run ، قم بكتابة مسار برنامجك ومن ثم مسافة ومن ثم كتابة البارميترات التي ترغب في تمريرها ، في جهازي كتبت الامر التالي في Run : كود : C:\Users\Ahmed\Documents\Visual Studio 2008\Projects\ConsoleApplication4\ConsoleApplication4\bin\Debug\consoleapplication4.exe ahmed aliالناتج الذي ظهر لي كان بالشكل التالي : [ATTACH=CONFIG]774[/ATTACH] كتطبيق سريع ، سنقوم بقراءة المتغير الأول وفي حالة وجود 0 مثلاً يتم تلوين خلفية الكلام بالازرق ، وفيما عدا ذلك يتم تلوين خليفة الكلام بالأحمر ، هذا هو الكود الخاص بذلك : C#: كود : if (args[0] == "0")VB.net: كود : If args(0) = "0" Then تواجهنا هنا مشكلة ، ماذا لو لم نقم بتمرير اي متغيرات .. ستظهر لك رسالة خطا ، إذن نحن بحاجة للتأكد من وجود بارمتيرس قبل قراءتها ، سنقوم بذلك عن طريق التأكد من وجود متغيرات ، إذا كان هناك فيتم التأكد من كونها صفر ، إذا اختل اي من الشرطين نلجأ للون الثاني : C#: كود : if (args.Length > 0)VB.net: كود : If args.Length > 0 Then هناك حل آخر ، ماذا لو احببنا ان نجعل التأكد في سطر واحد بالشكل التالي : C#: كود : if (args.Length >0 && args[0] == "0")VB.net: كود : If args.Length > 0 AndAlso args(0) = "0" Thenهذا يعني انه سيتأكد من وجود بارميترس ، إذا وجدها سينتقل للشرط الثاني وإذا لم يجدها فإنه يخرج مباشرة دون قراءة الشرط الثاني ... الجدير بالذكر ان المعامل And لن يمكن تطبيقه في VB.net ، بل ستضطر لاستخدام AndAlso ، تجد عنها شرحاً هنا بقلم الأخ احمد بدر : http://vb4arb.com/vb/showthread.php?1324-%E3%DA%E1%E6%E3%C9-AndAlso-Operator&p=3920#post3920 والله الموفق ... والسلام عليكم ورحمة الله وبركاته . الدرس السابع : الدوال والطرق - oneyemenweb2 - 06-10-12 منقول من المنتدى القديم الكاتب احمد جمال المشرف العام الدوال Function : كما شاهدنا في دالة Main ، يمكننا انشاء اي عدد من الدوال بأي عدد من المتغيرات ، كل ما نحتاج إليه هو معرفة البارمتيرات التي نريد لها ان تصل للدالة ، وايضاً الناتج الخارج منها ، لنفترض مثلاً اننا نصمم دالة لعملية الجمع ، تستقبل رقمين int وتخرج ناتج int ، ستكون الدالة بالشكل التالي : C#: كود : static int sum(int number1, int number2)VB.net: كود : Private Shared Function sum(ByVal number1 As Integer, ByVal number2 As Integer) As Integer ومن ثم ، سنحاول من خلال Main استدعائها بالشكل التالي مثلاً : C#: كود : int result = sum(5, 8);Vb.net: كود : Dim result As Integer = sum(5, 8) لماذا تم تعريف sum على انها Static أو Shared ؟؟ السبب انه لا يمكن استدعاء دالة غير Static من خلال دالة static ، وبما ان دالة Main هي من نوع static فلا بد من ان تكون اي دالة اخرى يتم استدعائها من خلال ال main هي static ايضاً ، سنتعرف على بعض التفاصيل الاضافية لاحقاً ، ما ينطبق على static في C# ينطبق على VB.net ايضاً مع Shared . المتغيرات Variables : في اي جزء من البرنامج داخل ال Class يمكننا تعريف المتغيرات حسب النوع int , string مثلاً ، ويتم تحديد مدى الوصول عبر المكان الموجود فيه التعريف . لتوضيح هذه النقطة نعود لمثال الجمع السابق ، في المثال السابق نجد المتغير total في الدالة sum ، هذا المتغير لن يستطيع أحد الوصول إليه إلا خلال الدالة ، أما لو قمنا بتعريف متغير خارج الدالة ( داخل الكلاس مباشرة ) فيمكن لاي دالة الوصول إليه مباشرة ، في هذه الحالة يسمى Member . - سنتعرف على بعض التفاصيل الاضافية لاحقاً . لدينا نوعين من المتغيرات ، النوع الأول وهو البسيط مثل int و Long وخلافه حيث يتم يشير اسم المتغير لمكانه من الذاكرة أما المركب مثل Array و Struct فيشير المتغير إلى مكان تستطيع منه الاشارة إلى المتغير في الذاكرة . الطرق mehtods : الطرق هي الدالة التي لا تعيد ناتج ، مثل دالة عرض كتابة رسالة بالشكل التالي : C#: كود : void printmsg(string msg)في الفجيوال بيسك 6 ، كان يتم تعريف الطريقة باسم Sub ، وهو المستمر ايضاً مع VB.net ليكون بالشكل التالي : VB.net: كود : Private Sub printmsg(ByVal msg As String) الدرس السابع : الدوال والطرق - oneyemenweb2 - 06-10-12 منقول من المنتدى القديم الكاتب احمد جمال المشرف العام الوظيفة Out : كما تعلمنا في المثال السابق فإننا نقوم بارجاع النتيجة من خلال return ، ماذا لو اردنا اعادة نتيجة من دالة void ، يتم ذلك باستخدام الدالة Out بالشكل التالي : C#: كود : static void sum(int number1, int number2, out int total)VB.net: كود : Private Shared Sub sum(ByVal number1 As Integer, ByVal number2 As Integer, ByRef total As Integer) وعند استدعاء الدالة يتم تمرير المتغير الذي نحتاج إليه لعرض النتيجة ايضاً : C#: كود : int result;VB.net: كود : Dim result As Integer ولكن ما هو السبب الذي قد يدفعني لاستخدام هذه الطريقة بدلاً من استخدام return ؟ الاجابة الابسط ، هي انني لو اردت اعادة اكثر من نتيجة مثل ناتج الضرب والجمع والقسمة ، فليس امامي حل سوى اعادة مصفوفة بالارقام وقراءتها هناك ، الحل الابسط هو باستخدام out . الارسال بالمرجع byref والارسال بالقيمة byval : لنفترض المثال الخاص بعملية الطرح بالشكل التالي : C#: كود : int x=5;VB.net: كود : Dim x As Integer = 5 والدالة : C#: كود : static void sub(int number1, int number2)كود : Private Shared Sub [sub](ByVal number1 As Integer, ByVal number2 As Integer) في الدالة السابقة قمنا بتغيير قيمة number1 ، ولكن هل سيغير هذا من قيمة x التي ارسلناها ، الإجابة هي بلا ، هذا ما يعرف بارسال القيمة حيث نقوم في هذه الحالة بارسال قيمة x إلى الدالة وليست قيمة X . الارسال بالمرجع ByRef هي الحالة الثانية ، في هذه الحالة يتم ارسال عنوان المتغير X في الذاكرة إلى الدالة ، هذا ما يعني ان اي تغيير في number1 سيؤثر بالضرورة على المتغير x . لكتابة الكود السابق بطريقة ByRef نكتب الكود التالي : C#: كود : static void sub(ref int number1, ref int number2)Vb.net: كود : Private Shared Sub [sub](ByRef number1 As Integer, ByRef number2 As Integer) الارسال بالقيمة يمكن تطبيقه فقط مع المتغيرات البسيطة ، اما المتغيرات المركبة مثل Struct فيتم التعامل معه ByRef افتراضياً ... والله الموفق ... والسلام عليكم ورحمة الله وبركاته . |