• 0
VB Helper

التطويرات في الفيجوال بيسك 10

سؤال

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

موضوعنا اليوم حول التطويرات او الاضافات في لغة الفيجوال بيسك 10 ضمن الاصدار الرابع للدوت نت, سنحاول التطرق للاضافات في ستة نقاط اساسيه

1- Implicit line continuation

لفترة طويلة من الزمن كانت الفيجوال بيسك تستخدم الرمز _ لتكملة السطر

Dim names() As String = {"John", "Peter", _
"Dave", "Steve", "Mike", "Sue"}

Dim sName = From name In names _
Where name.StartsWith("S") _
Select name

في المثال اعلاه تم ربط السطرين الاوليين الذين يضمان عناصر المصفوفه النصيه بالرمز _ ونفس الحال في جملة الاستعلام بالـ LINQ ,السبب الذي ادى ان مبرمجي السي شارب يقولوا لماذا الفيجوال بيسك لغة مزعجه!!

ولكن الان يمكنك كتابة نفس الكود السابق بالصورة التاليه

Dim names() As String = {"John", "Peter",
"Dave", "Steve", "Mike", "Sue"}

Dim sName = From name In names
Where name.StartsWith("S")
Select name

سنلاحظ ان اكمال السطر يتم تلقائيا من قبل اللغة. واذكر ان هناك مجموعة من الاماكن المحددة التي يمكن استخدام التكملة الضمنية

2- Auto-Implemented Properties

كما هو معلوم لنا اذا اردنا القيام بعمل خاصية ما نقوم بكتابة كود مثل

Property Name As String
Get
Return _name
End Get
Set(value As String)
_name = value
End Set
End Property

اما الان يمكننا تعريف الخواص على النحو التالي


Property Name As String

وللعلم قد تم تطبيق الاكمال التلقائي للخواص في السي شارب في الاصدار 3.0

3- Collection Initializers

لنلقي نظرة على المثال التالي


Dim names() As String = {"John", "Peter",
"Dave", "Steve", "Mike", "Sue"}

وهو ليس بغريب علينا تم تهئية عناصر المصفوفة باستخدام الاكمال الضمني للسطر, ولكن تخيل ان الكائن names ليس مصفوفة, يعني Collection فانه يمكننا تهئيتها على النحو التالي

    	Dim names As New List(Of String)
names.Add("John")
names.Add("Peter")
names.Add("Dave")
names.Add("Steve")
names.Add("Mike")

السي شارب في الاصدار 3.0 قامت بتقديم صيغة جديدة لتهئية المجاميع وذلك بفصل عناصرها بـ , ووضعها ضمن الاقواس {} ,فقامت الفيجوال بأخذ نفس الفكره ولكن باضافة الكلمة From قبلها

Dim names As New List(Of String) From {"John", "Peter", "Dave", "Steve", "Mike", "Sue"}

Multi Lambda Expression- 4

كنا في الفيجوال بيسك 8 نقوم بكتابة الـ Lambda Expression على النحو التالي

Delegate Function AddOperation(ByVal a As Integer, ByVal b As Integer) As Integer

Sub Main()
Dim op1 As Integer = 12
Dim op2 As Integer = 25
Dim operation As AddOperation = AddressOf Add
Dim result As Integer = operation(op1, op2)
End Sub

Function Add(ByVal a As Integer, ByVal b As Integer) As Integer
Return a + b
End Function

وفي الفيجوال بيسك 9 اصبحت كتابة الـ Lambda Expression اقصر

Delegate Function AddOperation(ByVal a As Integer, ByVal b As Integer) As Integer

Sub Main()
Dim op1 As Integer = 12
Dim op2 As Integer = 25
Dim operation As AddOperation = Function(a As Integer, b As Integer) a + b
Dim result As Integer = operation(op1, op2)
End Sub

رغم هذا الا انه يشترط ان تكون Function وليس Sub وان تكون دالة ذات سطر واحد فقط, ولكن في الفيجوال بيسك 10 تم الغاء القيود جميعها فيمكننا استخدامها ببساطه


Dim op1 As Integer = 12
Dim op2 As Integer = 25
Dim operation = Function(a As Integer, b As Integer)
Dim c As Integer
c = a + b
Return c
End Function
Dim result As Integer = operation(op1, op2)

كما يمكننا استخدام الاجراءات ايضا بنفس الصوره

5- Working with dynamic objects

مطوري الدوت نت معتادين على ان الانواع والعمليات يتم فحصها في وقت ترجمة البرنامج, فالمترجم يقوم بتوليد كود IL ينفذ تلك العمليات بالاستدعاء, سلوك هذا النوع من المترجمات يطلق عليه Early Binding

ولقد طبقت الفيجوال بيسك الـ Late Binding منذ زمن طويل وذلك من خلال تعريف المتغيرات من نوع Object واستخدام Option Strict off

وطور مفهوم الـ Late Binding بالـ Dynamic Language Runtime وللمزيد عن البرمجة الديناميكية ارجو قراءة الموضوع التالي http://www.arabteam2000-forum.com/index.php?showtopic=251001

لنلقي نظره على المثال التالي

Dim myConsole As Object = Console.Out
myConsole.WriteLine("My Console")

لقد قمنا بتعريف كائن يمثل المخرج ولاحظ ان نوعه Object, وفي السطر الثاني تم كتابة الاجراء WriteLine؟!! ماهذا؟ طبعا اكيد غريبه والاجراء لن يقترحه المترجم لأن الاجراء السابق تابع للفئة Console ولكن لأننا قمنا بتعريف المتغير من نوع Object يعني انه متغير ديناميكي وسيتم التعرف على نوع اثناء وقت التشغيل, لذا سيقوم المترجم حينها التأكد من وجود هذا الاجراء للمتغير, فاذا كان موجود سيقوم بطباعة MyConsole والا سيصدر خطأ, سأترك المثال للتجربة ..

فالان يمكننا التخاطب مع لغات مثل الجافاسكربت و الـ Ruby والـ Python وغيرهم بصوره ديناميكية

6- Covariance & Contravariance

تعتبر الوراثه احد مبادىء البرمجة الكائينية الاساسية, فالفيجوال بيسك فقدت الـ OOP لفتره طويلة ولكن بعد ظهور الدوت نت والتي امكنت للغة تطبيق جميع مبادىء البرمجة الكائينية. ولايخفى بظهور الاصدار الثاني من الدوت نت ظهر مفهوم الـ Generics والتي خدم كثيرا سوى من ناحية الكفاءة او اعادة استخدام الكود ولكن يمكن لهذه الانواع ان تدهشنا بعض الشيء لسبب ان بعض الاشياء ممنوعة حتى لو اعتقدنا انها مسموحه

لنلقي نظرة على المثال التالي


Public strings As IList(Of String) = New List(Of String)
Public objects As IList(Of Object) = strings

Sub Main()
strings.Add("Hello")
strings.Add("World")
For Each item In objects
Console.WriteLine(item)
Next
End Sub

عند عملية بناء البرنامج لن يظهر البرنامج لنا اي تحذير او خطأ ولكن عن وضع Option Strict On اعلى البرنامج سيظهر لنا الخطأ لايمكن تحويل IList( Of String) الى IList (Of Object)

الـ Covariance والـ Contravariance يمكننا من التحويل المرجعي الضمني للأنواع التاليه Arrays والـ Delegates

والان يمكننا حل المشكلة بالكود التالي

 Public strings As IList(Of String) = New List(Of String)
Public objects As IEnumerable(Of Object) = strings

Sub Main()
strings.Add("Hello")
strings.Add("World")
For Each item In objects
Console.WriteLine(item)
Next
End Sub

طبعا انا متأكد ان النقطة الاخيرة صعبة شوي لذا يمكن الاستعانه بالرابط التالي http://msdn.microsoft.com/en-us/magazine/ee336029.aspx

7

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

13 إجابة على هذا السؤال .

  • 0

يعطيك الف عافيه مشرفنا معلومات في الصميم بارك الله فيك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

الله يعافيك اخي عبدالله .. بالتوفيق ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشكور عالموضوع الله يبارك بيك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

لاشكر على واجب اخي .. بالتوفيق ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

جزاك الله كل خير على المجهود الرائع

ومع افضل تمنياتى

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

لا شكر على واجب ...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جزاك الله كل خير

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشكوررررررررررررررر

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أخي شكراً لك على هذا الشرح الرائع و الممتع

 

سؤالي هل هذه الميزات فقط التي تميزت بها .net2010

 

اما ان هناك ميزات أخرى  تستحق أن نتخلى عن الاصدار .net 2008 

خصوصاً ان net2008 يعتبر أكثر استقراراً

 

ارجوا الافادة بارك الله فيكم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جزاكم الله خيرا للتوضيحات الجميلة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .