العودة   منتدى رياض الجنة - Riad Al-Ganah > الرياض التقنية > روضة الكورسات والدورات التقنية والعلمية > روضة دورات تقنية الـ .NET بلغاتها المختلفة > دورة .NET 2008 من منتدى فيجوال بيسك للعرب

دورة .NET 2008 من منتدى فيجوال بيسك للعرب مقدم الدورة : أحمد جمال ، نوع الدورة : كتابية مصحوبة بصور ، حالة الدورة : انتهت ، عدد الدروس : 80 درس . مستوى الدورة : من البداية للاحتراف .

إضافة رد

  #1  
قديم 02-17-2010, 04:42 PM
الصورة الرمزية khaledbelal
khaledbelal khaledbelal غير متواجد حالياً
مبرمج المنتدى
الادارة تكليف لا تشريف
 
تاريخ التسجيل: Oct 2009
العمر: 34
المشاركات: 3,606
افتراضي الدرس السابع : الدوال والطرق .net 2008

بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .

في الجزء الأول من درسنا لهذا الاسبوع تعرفنا على كيفية تشتغيل Visual Studio .net 2008 ، كان آخر خطواتنا في الدرس السابق ان قمنا بكتابة جملة Hello world وطبعناها على الشاشة ، ضمن باقي دروس هذا الاسبوع سنفهم كيف قمنا بكتابة هذه الجملة وما هو الكلاس .. الدول والتعامل معها وخلافه .

بسم الله نبدا ...

لنفهم برنامجنا الأول :

لو لاحظنا برنامجنا الأول لطباعة جملة Helow World والذي كان بالشكل التالي :

C#:

كود PHP:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 
ConsoleApplication4
{
 class 
Program
 
{
     static 
void Main(string[] args)
     {
         
Console.Write("Hello World");
         
Console.ReadKey();
     }
 }

Vb.net:

كود PHP:
Imports System 
Imports System
.Collections.Generic 
Imports System
.Linq 
Imports System
.Text 
Namespace ConsoleApplication4 
    
    
    
Class Program 
        
        
        
Private Shared Sub Main(ByVal args As String()) 
        
            
            
Console.Write("Hello World"
            
            
Console.ReadKey() 
            
        
End Sub 
        
    End 
Class 
    
End Namespace 
اول ما سنجده هو استيراد المكتبات التي سنستخدمها لكتابة اكوادنا باستخدام using أو Imports في الفيجوال بيسك ، قمنا بشرح هذه الخطوة في دروس سابقة .

الجزء الثاني هو تعريف ال name space الخاص ببرنامجنا وهو الاسم الذي توضع تحته كل مكونات البرنامج ، ومن ثم ال Class الاساسي لدينا باسم Main ... كما تعلمنا في اي مبادئ للبرمجة كائنية التوجه فإن أي برنامج يتكون من واحد او اكثر من ال Classes ، الدالة الرئيسية في ال Class المسمى Main هي الدالة main والتي يتم تنفيذها اول شيء في البرنامج .

تستقبل الدالة Main مجموعة من الباميتير تحت اسم args ، معنى هذا ان البرنامج يستقبل مع تشغيله مصفوفة من args[0] إلى args[n] ، يمكن ارسال كل ما تريد إلى البرنامج من خلالها ، وهو ما يسمى Command Line Parameters .

لكي لا نبعد عن مسارنا في الشرح ، ال Command Line Args هي مجموعة من المتغيرات التي يمكن تمريرها للبرنامج وقت تشغيله لتتحكم في بعض النقاط ، مثلاً لو قمنا بكتابة الامر التالي :

كود PHP:
Explorer "http://www.vb4arab.com" 
اول ما يتم فتح برنامج Expolorer ، يقوم بقراءة النص الممرر له ، إذا كان موقع انترنت يقوم بفتحه بالشكل المعهود لمتصفح الانترنت ، اما لو كان مسار مثلاً C:/ فسيقوم بفتح متصفح المجلدات مع انهم نفس البرنامج في النهاية .

تستطيع تجربة ذلك على برنامجك من خلال قراءة المتغيرات الممرة له عن طريق For Loop :

C#:

كود PHP:
  for (int i 0args.Lengthi++)
             
Console.WriteLine(args[i]); 
Vb.net:

كود PHP:
For As Integer 0 To args.Length 
    Console
.WriteLine(args(i)) 
Next 
الآن قم بالذهاب إلى Run ، قم بكتابة مسار برنامجك ومن ثم مسافة ومن ثم كتابة البارميترات التي ترغب في تمريرها ، في جهازي كتبت الامر التالي في Run :

كود PHP:
C:\Users\Ahmed\********s\Visual Studio 2008\Projects\ConsoleApplication4\ConsoleApplication4\bin\Debug\consoleapplication4.exe ahmed ali 
الناتج الذي ظهر لي كان بالشكل التالي :



كتطبيق سريع ، سنقوم بقراءة المتغير الأول وفي حالة وجود 0 مثلاً يتم تلوين خلفية الكلام بالازرق ، وفيما عدا ذلك يتم تلوين خليفة الكلام بالأحمر ، هذا هو الكود الخاص بذلك :

C#:

كود PHP:
if (args[0] == "0")
         {
             
Console.BackgroundColor ConsoleColor.Blue;
             
Console.WriteLine("0 enterd");
         }
         else
         {
             
Console.BackgroundColor ConsoleColor.Red;
             
Console.WriteLine("Empty");
         }
         
Console.ReadKey(); 
VB.net:

كود PHP:
If args(0) = "0" Then 
    
    
    Console
.BackgroundColor ConsoleColor.Blue 
    
        
    Console
.WriteLine("0 enterd"
Else 
    
    
    
    
Console.BackgroundColor ConsoleColor.Red 
    
        
    Console
.WriteLine("Empty"
End If 
Console.ReadKey() 
تواجهنا هنا مشكلة ، ماذا لو لم نقم بتمرير اي متغيرات .. ستظهر لك رسالة خطا ، إذن نحن بحاجة للتأكد من وجود بارمتيرس قبل قراءتها ، سنقوم بذلك عن طريق التأكد من وجود متغيرات ، إذا كان هناك فيتم التأكد من كونها صفر ، إذا اختل اي من الشرطين نلجأ للون الثاني :

C#:

كود PHP:
if (args.Length 0)
         {
             if (
args[0] == "0")
             {
                 
Console.BackgroundColor ConsoleColor.Blue;
                 
Console.WriteLine("0 enterd");
             }
         }
         else
         {
             
Console.BackgroundColor ConsoleColor.Red;
             
Console.WriteLine("Empty");
         }
         
Console.ReadKey(); 
VB.net:

كود PHP:
If args.Length 0 Then 
    
    
    
If args(0) = "0" Then 
        
        
        Console
.BackgroundColor ConsoleColor.Blue 
        
            
        Console
.WriteLine("0 enterd"
        
    
End If 
Else 
    
    
    
    
Console.BackgroundColor ConsoleColor.Red 
    
        
    Console
.WriteLine("Empty"
End If 
Console.ReadKey() 
هناك حل آخر ، ماذا لو احببنا ان نجعل التأكد في سطر واحد بالشكل التالي :

C#:

كود PHP:
if (args.Length >&& args[0] == "0"
VB.net:

كود PHP:
If args.Length 0 AndAlso args(0) = "0" Then 
هذا يعني انه سيتأكد من وجود بارميترس ، إذا وجدها سينتقل للشرط الثاني وإذا لم يجدها فإنه يخرج مباشرة دون قراءة الشرط الثاني ...
الجدير بالذكر ان المعامل And لن يمكن تطبيقه في VB.net ، بل ستضطر لاستخدام AndAlso ، تجد عنها شرحاً هنا بقلم الأخ احمد بدر :
http://vb4arab.com/vb/showthread.php?t=541

الدوال Function :

كما شاهدنا في دالة Main ، يمكننا انشاء اي عدد من الدوال بأي عدد من المتغيرات ، كل ما نحتاج إليه هو معرفة البارمتيرات التي نريد لها ان تصل للدالة ، وايضاً الناتج الخارج منها ، لنفترض مثلاً اننا نصمم دالة لعملية الجمع ، تستقبل رقمين int وتخرج ناتج int ، ستكون الدالة بالشكل التالي :


C#:

كود PHP:
static int sum(int number1int number2)
      {
           
int total number1 number2;
          return 
total;
      } 
VB.net:

كود PHP:
Private Shared Function sum(ByVal number1 As IntegerByVal number2 As Integer) As Integer 
    
    Dim total 
As Integer number1 number2 
    
    
Return total 
    
End 
Function 
ومن ثم ، سنحاول من خلال Main استدعائها بالشكل التالي مثلاً :


C#:

كود PHP:
nt result sum(58);
          
Console.Write(result);
          
Console.ReadKey(); 
Vb.net:

كود PHP:
Dim result As Integer sum(58
Console.Write(result
Console.ReadKey() 
لماذا تم تعريف 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#:لماذا تم تعريف 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#:

كود PHP:
void printmsg(string msg)
      {
          
Console.WriteLine(msg);
      } 
في الفجيوال بيسك 6 ، كان يتم تعريف الطريقة باسم Sub ، وهو المستمر ايضاً مع VB.net ليكون بالشكل التالي :

VB.net:

كود PHP:
Private Sub printmsg(ByVal msg As String
    
    
Console.WriteLine(msg
    
End Sub 
الوظيفة Out :

كما تعلمنا في المثال السابق فإننا نقوم بارجاع النتيجة من خلال return ، ماذا لو اردنا اعادة نتيجة من دالة void ، يتم ذلك باستخدام الدالة Out بالشكل التالي :

C#:

كود PHP:
static void sum(int number1int number2out int total)
      {
            
total number1 number2;
 
      } 
VB.net:

كود PHP:
Private Shared Sub sum(ByVal number1 As IntegerByVal number2 As IntegerByRef total As Integer)     
    
total number1 number2 
End Sub 
وعند استدعاء الدالة يتم تمرير المتغير الذي نحتاج إليه لعرض النتيجة ايضاً :

C#:

كود PHP:
int result;
          
sum(58,out result);
          
Console.Write(result);
          
Console.ReadKey(); 
VB.net:

كود PHP:
Dim result As Integer 
sum
(58result
Console.Write(result
Console.ReadKey() 
ولكن ما هو السبب الذي قد يدفعني لاستخدام هذه الطريقة بدلاً من استخدام return ؟

الاجابة الابسط ، هي انني لو اردت اعادة اكثر من نتيجة مثل ناتج الضرب والجمع والقسمة ، فليس امامي حل سوى اعادة مصفوفة بالارقام وقراءتها هناك ، الحل الابسط هو باستخدام out .

الارسال بالمرجع byref والارسال بالقيمة byval :

لنفترض المثال الخاص بعملية الطرح بالشكل التالي :
C#:

كود PHP:
int x=5;
int y=10;
sub(x,y); 
VB.net:

كود PHP:
Dim x As Integer 
Dim y 
As Integer 10 
sub
(xy
والدالة :

C#:

كود PHP:
      static void sub(int number1int number2)
      {
            
number1 number1 number2;
            return 
number1;
 
      } 
VB.net:

كود PHP:
Private Shared Sub [sub](ByVal number1 As IntegerByVal number2 As Integer
    
    
number1 number1 number2 
    
    
Return number1 
    
    
    
End Sub 
في الدالة السابقة قمنا بتغيير قيمة number1 ، ولكن هل سيغير هذا من قيمة x التي ارسلناها ، الإجابة هي بلا ، هذا ما يعرف بارسال القيمة حيث نقوم في هذه الحالة بارسال قيمة x إلى الدالة وليست قيمة X .

الارسال بالمرجع ByRef هي الحالة الثانية ، في هذه الحالة يتم ارسال عنوان المتغير X في الذاكرة إلى الدالة ، هذا ما يعني ان اي تغيير في number1 سيؤثر بالضرورة على المتغير x .

لكتابة الكود السابق بطريقة ByRef نكتب الكود التالي :

C#:

كود PHP:
  static void sub(ref int number1ref int number2)
      {
            
int result number1 number2;
            return 
result;
 
      } 
Vb.net:

كود PHP:
Private Shared Sub [sub](ByRef number1 As IntegerByRef number2 As Integer
 
    
Dim result As Integer number1 number2 
    
    
Return result 
End Sub 
الارسال بالقيمة يمكن تطبيقه فقط مع المتغيرات البسيطة ، اما المتغيرات المركبة مثل Struct فيتم التعامل معه ByRef افتراضياً ...


والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .


توقيع : khaledbelal



(أَفَأَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا بَيَاتاً وَهُمْ نَآئِمُونَ {97} أَوَ أَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا ضُحًى وَهُمْ يَلْعَبُونَ {98}
أَفَأَمِنُواْ مَكْرَ اللّهِ فَلاَ يَأْمَنُ مَكْرَ اللّهِ إِلاَّ الْقَوْمُ الْخَاسِرُونَ {99}).
سورة الأعراف.

رد مع اقتباس
إضافة رد

أدوات الموضوع
انواع عرض الموضوع

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

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

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
الدرس الأول : تحميل .net 2008 ومميزات استخدامه khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 5 03-11-2012 03:42 PM
الدرس السابع( تتمت اداب المسلم) ابو تسنيم روضة العقيدة 2 03-19-2010 08:13 PM
الدرس السابع عشر : مقدمة إلى مبادئ Oop دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 02-19-2010 08:16 PM
الدرس الخامس : الأنواع والدوال الرئيسية .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 02-16-2010 03:24 AM
الدرس الثاني : تقنيات جديدة مع .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 02-15-2010 03:37 AM

استضافة الحياة

الساعة الآن 09:19 AM.


Powered by vBulletin® v3.8.4, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. , TranZ By Almuhajir
النسخة الفضية
Ads Management Version 3.0.1 by Saeed Al-Atwi

SlamDesignzslamDesignzEdited by Riad Al-Ganah Team - جميع الحقوق محفوظة لشبكة رياض الجنة

Privacy Policy Valid XHTML 1.0 Transitional By SlamDesignz Valid CSS Transitional By SlamDesignz