المزايا الجديدة في لغة الفيجوال بيسك 14

25 فبراير 2016     515 مشاهدة    0 تعليق
تم النشر في #VB.NET 

اليوم سنستعرض معكم المزايا الجديدة في الفيجوال بيسك 14, طبعاً جميع هذه المزايا يمكنك إستخدامها في الفيجوال ستديو 2015 , و اريد أن أنوه أنها ليست محصوره على آخر إصدار للغة, لذلك يمكنك إستخدامها في إصدارات بيئة الدوت نت السابقة, لكن يستوجب عليك إستخدام إصدار الفيجوال ستديو المذكور أعلاه.

Read-only auto-properties

كما هو معروف أن لغة الفيجوال بيسك تدعم الخواص القابلة للقراءة فقط, وكذلك الخواص التلقائية والتي لا تحتاج من المبرمج إستخدام متغير خاص. لذا أتت هذه الميزة لتمكن المبرمجين من إنشاء خواص قابلة للقراءة فقط وتعيين قيمة إفتراضية لها.

Public ReadOnly Property CookieName As String = ".AspNet.Session"

كذلك يمكن تهئية القيمة الإفتراضية للخواص في الـ Constructor.

Partial Modules & Interfaces

من المعلوم أن لغة الفيجوال بيسك تسمح بإستخدام الكلمة المحجوزة Partial على مستوى الفئات والهياكل Classes & Structures, الآن بإمكاننا إستخدامها على مستوى الوحدات والواجهات.

Partial Module StringExtensions

End Module

Partial Interface IPrintable

End Interface

TypeOf ... IsNot ...

من المعروف أن المعامل IsNot موجود سابقاً في اللغة, لكن عملية فحص الأنواع كان مزعجاً, لنلقي نظرة على التالي:

If Not TypeOf sender Is Button Then

فهنا يتم فحص ما إذا كان الكائن sender ليس من نوع Button. ولكن الصياغة غريبة نوعاً ما, أما الآن فيمكننا كتابة نفس الشفرة كالتالي:

If TypeOf sender IsNot Button Then

والتي تعتبر أكثر وضوحاً وقراءة من الصيغى السابقة.

Multiline string literals

في السابق كان مبرمجي لغة الفيجوال بيسك يعانوا من صعوبة في حال توليد نص متعدد الأسطر, فمنهم من يستخدم تجميع النصوص على النحو التالي:

Dim greeting = "Hello," & vbCrLf & "World"

أو إستخدام حيلة نص الـ XML

Dim greeting = <xml><![CDATA[Hello
World]]></xml>.Value

أما الآن أصبح بإمكاننا وبسهولة إستخدام النصوص متعددة الأسطر على النحو التالي:

Dim greeting = "Hello,
World!"

Year-first Date literals

أحد الأمور التي يمكن أن تلخبط المبرمجين في الفيجوال بيسك هي صيغة التواريخ فعلا سبيل المثال 4/2/2016 هل المقصود به 4 فبراير أم 2 إبريل؟!! لذا قدمت اللغة طريقة جديدة للبدء بالسنة في التاريخ وذلك لإبعاد التضارب.

Dim d = #2016-2-4#

Comments before implicit line continuation

عملية كتابة التعليقات في الجمل متعددة الأسطر كان مستحيلاً في لغة الفيجوال بيسك ولكن ليس بعد اليوم.

Dim categoryNames = From c In categories     	' go through categories
Where c.Name.StartWith("B") ' look up for categories begin with the letter 'B'
Select c.Name ' retrieve category name

Null-conditional operators

هذا المعامل الجديد ماهو إلا إختصار لعملية فحص الـ null. فبدل إستخدام الجمل الشرطية كما هو متعارف عليه سابقاً يمكنننا ببساطه إستخدام هذا المعامل الجديد.

If person?.Age > 15 Then ...

Console.WriteLine(person?.ToString())

فنلاحظ أنه سيتم إستدعاء الخاصية Age والدالة ToString() فقط لو كان الكائن person ليس Nothing.

Dim people As List(Of Person)
Dim person = people?(1)

ونفس الشيء هنا سيتم الحصول على الكائن الثاني من الكائن people إذا كان ليس Nothing.

String Interpolation

عملية توليد النصوص التي تحتوي عبارات برمجية أصبحت أسهل مما كان عليه في السابق, فكان الخيار الأنسب سابقاً للمبرمجين هو إستخدام الدالة String.Format().

فيمكننا الآن إستخدام

Dim greeting = $"Hello, {person.FirstName} {person.LastName}."

بدلاً من

Dim greeting = String.Format("Hello, {0} {1}.",person.FirstName,person.LastName)

فالآن يمكننا وضع العبارات البرمجية نفسها ضمن النص بيسر وسهولة.

NameOf Operator

المعامل NameOf هو من أفضل طرق تضمين الكائنات البرمجية كنصوص في الشفرة المصدرية. لنلقي نظرة على المثال التالي:

If name Is Nothing Then
Throw New ArgumentNullException("name")
End If

سنلاحظ عند حصول الإستثناء سيتم تمرير النص "name" كدلالة على المتغير الذي أحدث هذا النوع من الإستثناء, لكن لو تمعنا لبرهة من الزمن, ماذا سيحصل لو تم تغير المتغير name؟!! لن يتم تغيير النص في الإستثناء, مما سيحدث تضارب في المعلومات, فما هو الحال لو كان معنا مئات أو الآف من الأسطر البرمجية بالتأكيد الأمر مشكلة لا محالة, لذا بإستخدام المعامل الجديد يمكننا إعادة صياغة الشفرة المصدرية كالتالي:

If name Is Nothing Then
Throw New ArgumentNullException(NameOf(name))
End If

طبعاً تغيير بسيط ولكن يعني الكثير, فبإستخدام هذا المعامل سيتم تغيير المتغير name إلى النص "name" فلو تم تغيير المتغير سيطلع لنا خطأ قبل تشغيل البرنامج, لذا لن تحصل المشكله السابقه مجدداً.

#Disable Warnning and #Enable Warning directives

أخيراً سمحة لغة الفيجوال بيسك مبرمجيها بتعطيل وتفعيل التحذيرات, وكانت أحد المزايا التي كنت أطالب بها شخصياً.

#Disable Warning BC42356
Async Function TestAsync() As Task
Console.WriteLine("testing")
End Function
#Enable Warning BC42356

فلو نلاحظ في المثال السابق أنه تم تعطيل التحذير في الدالة TestAsync وذلك لعدم إحتواءها على الكلمة المحجوزة Await.

وهنالك بعض المميزات والإصلاحات الصغيره أذكر البعض منها:

  • تحسين الـ XML Comments
  • إستخدام CObj في الـ Attributes
  • إستخدام الـ #Region داخل الدوال
  • إمكانية تطبيق خواص القراءة فقط في الواجهات كخواص تقبل القراءة والكتابة

تويتر فيسبوك قوقل + لينكد إن


اكتب تعليقك