Option Explicit, Option Strict, Option Compare, Option Infer في الفيجوال بيسك

21 فبراير 2017     372 مشاهدة    0 تعليق
تم النشر في #VB.NET 

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

1. Option Explicit
يسمح لنا هذا الخيار بإجبارنا على تعريف المتغيرات المستخدمه ضمن ملف معين عن طريق الكلمات المحجوزة Dim أو ReDim, طبعاً القيمة الإفتراضيه هي On وهي الإجبار على تعريف المتغيرات قبل استخدامها, إلا انه يمكننا من تغييره إلى Off .وفي هذه الحاله يمكننا من إستخدام المتغيرات دون الحاجه إلى تعريفها

Option Explicit On

Module Module1
  Sub Main()
    Dim number1 As Integer = 2
    number2 = 4 ' Compiler Error
  End Sub
End Module
Option Explicit Off

Module Module1
  Sub Main()
    Dim number1 As Integer = 2
    number2 = 4 ' No Compiler Error
  End Sub
End Module

2. Option Strict
يسمح انا هذا الخيارات بالتحويلات الضمنيه لأنواع البيانات في حالة التوسع Widening, كما لا يسمح لنا بالـ Late Binding والتحويلات الضمنية التي نتيجتها من النوع Object.
قد يسأل البعض ماهي التحويلات الضمنيه؟! ببساطه هي التحويل من نوع بيانات إلى آخر دون إستخدام دوال التحويل Casting. وهي نوعين Narrowing وهي التي يتم فيها التحويل من نوع بيانات كبير إلى أصغر أما الـ Widening فهي العكس.

Option Strict On

Module Module1
  Sub Main()
    Dim number1 As Long = 2
    Dim number2 As Integer = number1 ' Compiler Error (Implicit Conversion "Narrowing")
    
    Dim grid As New Object ' Compiler Error (Late Binding)
    grid.Rows = 3

    Dim shape ' Compiler Error (Implicit Type, shape is Object)
  End Sub
End Module
Option Strict Off

Module Module1
  Sub Main()
    Dim number1 As Integer = 2
    Dim number2 As Long = number1 ' Implicit Conversion "Widening"
    
    Dim grid As New Object ' No Compiler Error (Late Binding)
    grid.Rows = 3

    Dim shape ' shape = Nothing
  End Sub
End Module

3. Option Compare
يسمح لنا هذا الخيار بتحديد نوع المقارنة اللإتراضي في حالة المقارنة بين النصوص. القيمة الإفتراضيه هي Binary حيث يتم مقارنة النصين إعتماداً على قيمتهما في نظام العد الثنائى, أما الخيار الآخر هو Text حيث يتم مقارنة النصين إعتماداً على الترتيب النصي, طبعاً هنا حالة النص لاتؤخذ في عين الإعتبار.

Option Compare Binary

Module Module1
  Sub Main()
    Dim result = "A" < "a" ' True
  End Sub
End Module
Option Compare Text

Module Module1
  Sub Main()
    Dim result = "A" = "a" ' True
  End Sub
End Module

4. Option Infer
يسمح لنا هذا الخيار من إستنباط أو إستنتاج نوع البيان للمتغير من القيمة المسنده إليه, فلاحظ أنني استخدمت كلمة إستنتاج وليس تحويل. فالقيمة الإفتراضيه لها هي On وهي القيام بإستنتاج نوع البيانات من القيمة المسندة, أما عند إستخدام القيمة Off فيكون نوع البيان للمتغير Object.

Option Infer On

Module Module1
  Sub Main()
    Dim number = 2 ' number is Integer
  End Sub
End Module
Option Infer Of

Module Module1
  Sub Main()
    Dim number = 2 ' number is Object
  End Sub
End Module

في الختام أريد التذكير أن الخيارات قد تعني لك الكثير بعد الآن, لذا عليك التركيز أثناء إستخدامها.

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


اكتب تعليقك