إني ذكرتك والذكرى مؤرقة 1/4

الناقل : elmasry | الكاتب الأصلى : تركي العسيري | المصدر : www.al-asiri.com

سلسلة من المقالات، احاول فيها تحفيز مبرمجي Visual Basic x.0 العرب الى مواكبة التيار والهجرة بلا عودة الى احد لغات اطار عمل NET Framework.

تمر على الانسان لحظات الاشتياق الى الماضي والابحار بالنفس الجياشة الى عكس اتجاه المجاديف، والحنين الى شواطئ الطفولة حيث تبنى فيها قلاع الطين، مع الاستماع الى الحان القواقع.

ان كان الاغلب منا ينظر الى الورد في ماضيه، فانا افضل رؤية الشوك مع لغات البرمجة، ومن منطلق خصالي البرمجية فأفضل ان اكون خائنا لها واحاول اظهار الوجه الآخر عندما اهاجرها. (لقد هاجرت الكثير منها في حياتي، فلم يعد القلب يخفق لاحد)

وبما اني هجرت الى Visual Basic .NET، فسأحاول ما بوسعي توزيع الجوازات والتأشيرات الى اخواني اعضاء وزوار vb4arab.com حتى يسيروا مع الركب وينطلقوا الى ماهو الافضل لهم ولأعمالهم، حيث ان استمرار نشاط المنتدى تحت راية Visual Basic 6 الذي يطغى على نشاط منتدى –احم احم- اقصد قسم Visual Basic .NET امر لا ارى فيه مصلحة –لا للمنتدى ولا لزواره.

من هنا سنحاول (بعد اذن ادارة المنتدى) شن حملة ضد Visual Basic 6 واظهار عيوبه لتكون حافز الى المبرمجين العرب للانتقال الى Visual Basic .NET، ومن بعد ما كنت من اشد عشاق Visual Basic، سأريكم الوجه الاخر لاصبح عدوه اللدود. فالاخوان الذين لا يزالون يرفضون الانتقال الى Visual Basic .NET، لابد من محاولة تغيير قناعاتهم. اعلم انه يعز عليكم فراق الحبيبة Visual Basic، ولكن لما لا تحاولوا اضافة الحروف NET. عليها؟

هذا مقال من ملايين المقالات في الانترنت التي تظهر قصور وغباء لغة البرمجة Visual Basic، قمت بترجمته بتصرف، والقادم في الطريق.

ملاحظة: لا اعتقد بانه سيفهم محتويات هذا المقال الا مبرمجي Visual Basic المتمرسين.


=== نص المقال: ترجمة خاصة بتصرف ==================

شاركت المبرمجة "فيرتي ستوب" في احد المشاريع بلغة Visual Basic. ومن أجل الفئات والأجيال القادمة من مبرمجي Visual Basic، قررت كتابة ملخص لتجربتها –الغير سارة- كفائدة لهم.

1. استدعاء الإجراءات والدوال Procedure and function calls:
مع بدايات ظهور لغة الـ BASIC، واجهنا الكلمة المحجوزة GOSUB لاستدعاء جزء معين من الشيفرة (يرمز له برقم او اسم)، ولكن مع Visual Basic فقد اظهر لنا نوعين من الاجراءات هما الـ Subs (والتي لا تعود بقيمة)، والـ Functions (التي تعود بقيمة):


' 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. الفائدة في النهاية لك يا بيل جيتس
وأحاول بقصارى جهدي لايقاف ارباحه، رغم أني متأكد بأني أساعده ايضا!!