الرئيسية > Visual Basic .Net > Collections Initializers في Visual Basic 2010

Collections Initializers في Visual Basic 2010

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

من التطويرات الجديدة في النسخة القادمة من Visual Basic والتي تحمل الرقم 10 هي ما يدعى بمنشئات المجموعات Collection Initializers . في هذه المقالة سنتعرف على الـ Collections Initializers .

ظهر في الاصدار التاسع من visual basic ما يعرف بمنشئات الكائنات Objects Initializers حيث اصبح بإمكانك انشاء نسخه جديدة من فئة معينه واسناد قيم ابتدائيه لبعض خصائصها في نفس السطر بدون ان تستخدم منشيء الفئة New . لنفترض ان لدينا الفئة التالية :

Class Student
   
Private _Age As Byte
   
Public Property Age() As Byte
       
Get
           
Return _Age
       
End Get
       
Set(ByVal value As Byte)
           
_Age = value
       
End Set
   
End Property

    Private _Name As String
   
Public Property Age() As String
       
Get
           
Return _Age
       
End Get
       
Set(ByVal value As String)
           
_Age = value
       
End Set
   
End Property

End Class

حيث اسمها Student وتحتوي على خاصيتين وهما Age و Name ، الىن افرض انك تود انشاء عدة كائنات جديدة من هذه الفئة واسناد قيم للخاصيتين Age و Name معا بسطر واحد وبشكل مختصر تماما في الكود ، سيكون شكل الكود بالطريقة التالية حيث نستخدم الكلمة المحجوزة With :

        ‘you can write it in this way
        Dim Ahmed As New Student
       
Ahmed.Age = 20
       
Ahmed.Name = "Ahmed"

        Dim Naser As New Student
       
Naser.Age = 22
       
Naser.Name = "Student"

        ‘or this way
        Dim Mohammed As New Student With {.Age = 20, .Name = "Ahmed"}
       
Dim Salim As New Student With {.Age = 22, .Name = "Salim"}

طبعا قد يعترض احدهم ويقول : لماذا لا نقوم بإضافة مشيد للفئة Student من خلاله نقوم بإسناد القيم مباشرة إلى الخصائص المراده ؟ سأحترم رأيك وهو ذاته الذي تكون لدي في البداية ، لكن في بعض الحالات لا اعتقد انك تود كتابة مشيد للفئة من اجل اسناد قيم مجموعة كبيرة من الخصائص ، فافرض ان لدينا حوالي 10 خصائص وتود اسناد القيم لها ، فما الداعي ان تكتب 10 سطور في مشيد معين للفئة لتقوم بإسناد تلك الخصائص ، فضلا عن انك قد تحتاج لكتابة اكثر من مشيد واحد للفئة حسب الحاجه ، فهذه الطريقة تختصر عليك الكثير من الوقت والجهد .

الطريقة ذاتها مدعومة بشكل واضح في LINQ ، فلو افترضنا انه لدينا List بالـ students بالإسم ClassStudents كما وتود الاستعلام عن احدها ، فسيكون الكود بالشكل التالي :

        Dim Mohammed As New Student With {.Age = 20, .Name = "Ahmed"}
       
Dim Salim As New Student With {.Age = 22, .Name = "Salim"}

        Dim ClassStudents As New List(Of Student)
       
ClassStudents.Add(Mohammed)
       
ClassStudents.Add(Salim)

        Dim sStudent = From student In ClassStudents _
                      
Select New Student _
                      
With {.Name = "Ahmed", .Age = 20}

لكنك تلاحظ من الكود السابق ان عملية انشاء List واضافة عناصر اليها في نفس السطر غير ممكنة حتى الاصدار التاسع لذلك في الكود السابق قمنا بإنشاء كائنين جديدين من الفئة Student ثم قمنا بإضافتهما الى القائمة List المحددة . البعض قد يقترح انشاء Array حيث ذلك ممكن ، لكننا هنا نرغب بعمل List وليس مصفوفة ، اضف الى ان عملية التحويل ستكون مستهلكه لسطور من الاكواد – ستحتاج الى انشاء مصفوفة اولا وتضيف لها العناصر ثم تقوم بانشاء القائمة List وتسند لها المصفوفة ! – وبالتالي دعنا على الحالة الراهنة افضل من اللف والدوران ووجع الرأس !

في Visual Basic 10 اصبح هذا الامر ممكنا بفضل الكلمة المحجوزة From كما بالكود التالي :

Dim studentList As New List(Of Student) From
   
{New Student With {.Age = 10, .Name = "Mohammed"},
    
New Student With {.Age = 11, .Name = "Salim"},
    
New Student With {.Age = 12, .Name = "Nasser"},
    
New Student With {.Age = 13, .Name = "Khalid"}}

اعتقد ان الكثيرين ممنا سيقرأون الكود السابق سيصيبهم الدوار والحول وسيقولون هذا ليس كود Visual Basic فأين الشرطة المنخفضة _ او المعروفة بـ Underscore نهاية كل سطر ؟ وماذا دهى الألوان والخط حتى ! مهلا مهلا يا جماعة الخير هل نسيتم اننا نستخدم تقنية من شركة مايكروسوفت وبالتالي كل شيء يتغير في يوم وليلة ؟ في فيجوال بيسك 10 لسنا بحاجه الى كتابة underscore نهاية كل سطر ، فضلا عن تغيير تلوين الكلمات شيئا ما – اصبح مثل اكواد C# الى حد كبير جدا .

طيب ما رأيك بتسهيل الكود السابق اكثر اذا علمنا ان الطرق الموسعة Extension Methods مدعومة في هذه القضية ! شاهد معي الكود التالي :

<Runtime.CompilerServices.Extension()>
Sub Add(ByVal list As List(Of Student),
       
ByVal age As Integer,
       
ByVal name As String)

    list.Add(New Student With {.Age = age, .Name = name})
End Sub

بعد كتابة تلكم السطيرات – تعبير جديد ! – اصبح بإمكاننا كتابة الكود التالي :

Dim studentList As New List(Of Student) From
   
{{10, "Ahmed"}, {11, "Salim"}, {12, "Nasser"}}

ما رأيك بالعملية السابقة ؟

آخر ما تبقى عرضه هو امكانيه اضافة العناصر بشكل مباشر دون استخدام الكلمة From كما بالشكل التالي :

Dim nums As New List(Of Integer)({1, 2, 3, 4, 5})

نترقب الاصدار 2010 بفارغ الصبر !

مقتبس ومترجم بتصرف مع بعض الرتوش البسيطة من :

http://blogs.msdn.com/bethmassi/archive/2009/06/05/collection-initializers-in-visual-basic-10.aspx

تحياتي

التصنيفات :Visual Basic .Net الوسوم:, , ,
  1. عبدالعزيز العنزي
    سبتمبر 2, 2009 الساعة 11:54 ص

    السلام عليكم ورحمة الله، مشكور أخي على هذه المقالة الرائعة، فقط أردت التنويه أنه يوجد خطأ مطبعي في المثال الأول حيث أن البروبرتي الثانية ألا يجب أن تكون

    Private _Name As String
    Public Property Name() As String
    Get
    Return _Name
    End Get
    Set(ByVal value As String)
    _Name = value
    End Set
    End Property

    End Class

    بدلاً من _Age

  2. سبتمبر 4, 2009 الساعة 1:02 ص

    بارك الله فيك اخي وليد ، بالفعل يوجد خطأ ، سأحاول تعديله في اقرب فرصه

    تحياتي

  3. يونيو 23, 2010 الساعة 3:35 م

    مشكور على التدوينة المفيدة

    متابع لك بكل حماااس

  1. No trackbacks yet.

أضف تعليقاً

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s

%d مدونون معجبون بهذه: