الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Collections Initializers في Visual Basic 2010

بدأه النبهاني في 19 يونيو 2009 · 1 رد · 566 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

من التطويرات الجديدة في النسخة القادمة من 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 :

 

'بدلا من كتابتها بالشكل التالي

		Dim Ahmed As New Student

		Ahmed.Age = 20

		Ahmed.Name = "Ahmed"



		Dim Naser As New Student

		Naser.Age = 22

		Naser.Name = "Student"



		'تصبح اسهل هكذا

		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

تحياتي

تم تعديل هذه المشاركة بواسطة النبهاني في 19 يونيو 2009 في 16:36

#2

هذه الميزة موجودة فى إصدار 2008

كيف حالك أخ نبهانى وأيه أخبار الجامعة؟ :wink:

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

مواضيع مشابهة