السلام
مزحبا بك في منتدانا . يمكنك التسجيل والمشاركة. ننتظرك


salam
 
الرئيسيةالبوابةاليوميةمكتبة الصورس .و .جبحـثالأعضاءالمجموعاتالتسجيلدخول

شاطر | 
 

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

اذهب الى الأسفل 
كاتب الموضوعرسالة
Admin
Admin


عدد المساهمات : 234
تاريخ التسجيل : 30/10/2012

مُساهمةموضوع: التطويرات في الفيجوال بيسك 10   الجمعة نوفمبر 02, 2012 1:29 am

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

موضوعنا اليوم حول التطويرات او الاضافات في لغة الفيجوال بيسك 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
لنلقي نظره على المثال التالي
الكود:
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://salam.forum-canada.com
 
التطويرات في الفيجوال بيسك 10
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
السلام :: منتدى لغات برمجة :: منتدى Microsoft Visual Basic-
انتقل الى: