' Sub لاستدعاء إجراء
Subname Param1, Param2
' Function لاستدعاء دالة
Result = FuncName(Param1, Param2)
لاحظوا الفرق الجبار في كلا الاستدعائين، فاستدعاء الاجراءات من النوع Sub لا يمكنك استخدام الاقواس معها:
' ستظهر رسالة خطا
Subname(Param1, Param2)
ولكنك تستطيع استخدام الاقواس مع الاجراءات من النوع Function –حتى لو لم تستفد من القيمة التي تعود بها الدالة:
FuncName(Param1, Param2)
ان قمت باستدعاء دالة بالطريقة السابقة ( باضافة الاقواس ودون الاستفادة من القيمة التي تعود بها)، فسيتم التعامل مع الوسيطات المرسلة Param1 و Param2 كما لو انها ارسلت بالقيمة ByVal حتى لو تم تعريفها على انها بالمرجع ByRef!
ولكن عند استخدام الكلمة المحجوزة Call (لم ارى أي مبرمج Visual Basic يستخدمها في حياتي) فسيتم ارسال الوسيطات بالمرجع ByRef:
Call FuncName(Param1, Param2)
2. التصريح عن المتغيرات Variable Declaration
يمكنك ان تصرح عن متغير –كما هو معلوم- باستخدام الكلمة المحجوزة Dim:
Dim I As Integer
المبرمجون المتمرسون يفضلون تعريف الانواع المتشابهة في سطر واحد:
Dim I, J, K, L As Integer
ههههه (نلت منك هذه المرة!)، فجميع المتغيرات السابقة من النوع Variant ما عدا الأخير L فهو الوحيد من النوع Integer.
3. استدعاء دالة او استخدام مصفوفة Call a function or access an array؟
في اغلب لغات البرمجة، يمكنك التفريق بين عملية استدعاء الدالة F التي ترسل لها القيمة 3، وبين الوصول الى المصفوفة F برقم الفهرس 3، فالأولى قد تكتب (3)F والثانية [3]F، ولكن مع Visual Basic فكلا الحالتين تكتب (3)F!!
" ملاحظة: حتى Visual Basic .NET لم يغير هذه العادة "
4. شيء آخر حول المصفوفات Another thing about arrays؟
يبدأ ترقيم عناصر المصفوفة بـ 0 دائما، ولكن عند نقل الشيفرة المصدرية الى جهاز او ملف اخر يستخدم الموجه Option Base 1، فسيكون 1 .
5. ولكن توجد هناك المجموعات ايضا But there are also collections
التصميم الكائني التوجه OOP لايخلو من المجموعات والتي يبدأ ترقيمها في العادة من 1، رغم انه في حالات قد تبدأ ترقيم عناصرها بـ 0 ايضا، وذلك يعتمد على المكان التي عرفت في المجموعة. تحتاج الى ضربة الحظ هذه المرة!
6. هل لمحت الى البرمجة كائنية التوجه Did I mention OOP؟
ههههههههههههههههههههههههههه، لا تخدع نفسك! فأنت مبرمج Visual Basic طيب القلب (على النية).
7. اسناد القيم لحظة التصريح Initialization
في العصور الوسطى للغة الـ BASIC، حاول مصمموها ايجاد حل لمشكلة اسناد القيم لحظة التصريح ( Dim x As Integer = 10)، وكان كل ما استطاعوا فعله اسلوب غبي يعتمد على الكلمات المحجوزة DATA و READ، الا ان مصممي Visual Basic اخترعوا اسلوب اكثر حداثة والذي يكون شيئا مثل:
Dim A(20) As Double
A(0) = 4.5 ' قد يبدأ الترقيم بواحد !
A(1) = 4.71
A(2) = 4.82
A(3) = 4.92
...
ونعم التطور!!!!
8. مصفوفة الثوابت Arrays of constants
لايوجد شئ في Visual Basic اسمه مصفوفة الثوابت. على اية حال، ماذا ستفعل بها حتى لو كانت موجودة؟ --- مبرمج Visual Basic تفكيرك محدود!!
9. النوع Integer حجمه 16 بت The type Integer declares a 16-bit integer
قد تكون العبارة السابقة مقبولة بكل رحابة، ولكن عند الحديث عن نظم 32 بت (والتي بدأها نظام التشغيل Windows 95) فلغات البرمجة الاخرى قد لاحظت التغيير!
10. المنطق Logic
هذا الجزء الهام من اللغة الذي يفترض ان يكون سهل وبديهي، هذا اختبار سريع لك: افترض ان Check1 اداة من النوع CheckBox على نافذة النموذج، وقمت بتنفيذ هذه الشيفرة:
Dim b As Boolean, c As Boolean
b = Check1.Value
c = Not Check1.Value
فالمتغير b السابق ستكون قيمته True اذا قام المستخدم بتحديد الاداة (Value = Checked)، والقيمة False ان قام بالغاء التحديد (Value = Unchecked). ماذا تعتقد ستكون قيمة المتغير c؟ الاجابة المفاجئة: دائما True !!!!!! (مساعدة: تحويل القيم في فلسفة السيد Visual Basic تحتاج الى كتاب كامل !!!!)
11. كلمات محجوزة نفس المعاني مختلفة الاغراض
- Nothing تعني لا شيء
- Null تعني لا شيء
- أما Empty فتعني لا شيء
لتوضيح الفرق بينهم، تحتاج الى وقت!
12. محرر الشيفرة الغبي The stupid code editor
يظهر لك (بشكل افتراضي) الرسالة المزعجة عند ظهور خطأ نحوي وقت التصميم Design time syntax error. وقد تظهر عندما تترك السطر بعد كتابة كلمة وحدة بشكل مؤقت لتنسخ جزء من شيفرة مصدرية في سطر اخر.
13. المترجم الغبي The stupid compiler
والذي قد يجري عملية ترجمة Compiling رغم وجود بعض الاخطاء نحوية، ليظهر خطأ كتابة العبارة If دون End If كخطأ وقت التنفيذ Run time error !!!
14. عودة الى الاجراءات من النوع Sub
الاجراءات من النوع Sub يمكن ان تصرح بالكلمة المحجوزة Public، Private، او Static. أعطيك 100 دولار ان وجدت حالة حقيقية تستحق فعلا الاستفادة من تعريف الاجراء باستخدام Static!!
15. الفائدة في النهاية لك يا بيل جيتس
وأحاول بقصارى جهدي لايقاف ارباحه، رغم أني متأكد بأني أساعده ايضا!!