أفكار و تلميحات برمجية [ المعنى الحقيقي للـ False & Ture ]
بسم الله الرحمن الرحيم ..
السلام عليكم ورحمة الله و بركاته ...
كتبت المقالة السابقة في قسم الفيجوال بيسك السابق ونضعها هنا بصيغة الـ VisualBasic .NET لعموم الفائدة :
و ددت إلقاء نظرة مقربة أكثر على الـ True و الـ False !
فقد استغرب بعض الاخوة عبارات وسطور برمجية معينة وجدوها في بعض برامجي تتعلق بإستخدامي للمتغيرات من النوع Boolean مما لفت انتباهي الى البعض يجهل حقيقة القيم False & True ... وهذا ما حدا بي الى جعل موضوعنا هذا في هذه السلسة لتوضيح هذا المفهوم البسيط بإذن الله تعالى ..
و الموضوع بالدرجة الاولى يهم المبتدئين فإذا سألت احدنا ما معنى ان يكون المتغير من النوع Boolean :
Dim A As Boolean
فسوف تكون الاجابة الطبيعية هي ان المتغير A إما ان يحتوي على القيمة True او القيمة False ..... و اذا استدركت قائلاً و ما معنى False & True ؟
ربما سيكون الأمر مربكاً للكثيرين ! ... و الحقيقة أن الامر لايدعو للإرتباك ابداً فهاتان القيمتان تمثلان قيم عددية صحيحة .. حيث أن :
كل قيمة عدا الصفر تعني True و اما الصفر فمعناه False !
و لانه ينبغي للـ True أن يمثل قيمة محددة فقد ثم اختيار القيمة سالب واحد ( -1 ) لتمثله ....
ملاحظة :
وددت ان اللفت انتباهاك عزيزي الى ان معظم لغات البرمجة الاخرى إن لم تكن جميعها تعتمد القيمة 1 لتمثل الـ True وتعتمد القيمة 0 لتمثيل الـ False .. بينما يمثل الـ True بالفجيوال بيسك بالرقم سالب واحد اما الـ False فبالصفر يمثل .
مجرد اثبات :
سيحتاج البعض الى أن اثبت ذلك عملياً حيث انك اذا كتبت :
MsgBox(True)
فإن الذي سيظهر في مربع الحوار هو True دون ادنى شك ... فما الذي يثبت انه يمثل في الاصل القيمة سالب واحد ..
و لكي نثبت هذه الحقيقة يمكننا الاستعانة بالرياضيات البسيطة فليس فينا من لا يعلم ان ضرب اي عدد كان بالواحد ينتج عنه نفس الرقم المضروب بالواحد ... خذ هذه الامثلة :
120 * 1 = 120 23 * 1 = 23 -50 * 1 = -50
والتي يتضح منها جلياً انه مهما كان الرقم سالباً ام موجبا فهو نفسه الذي ينتج بمرجد ضربه في العدد واحد ... وهو بالضبط ما سنستخدمه كفكرة بسيطة للإثبات بإذن الله تعالى .. فاليك هذه السطور :
True * 1 = -1 False * 1 = 0
ومنها يظهر ان الـ True يمثل سالب و احد كما ان الـ False يساوي صفر ... وذلك كالتالي :
-1 * 1 = -1 0 * 1 = 0
و لكي ترى ذلك رأي العيان استخدم التالي:
MsgBox True * 1 او استخدم MsgBox(False * 1)
و يمكنك ببساطة ان تتصفح الكود التالي وستنتج الذي سيظهر لك في مربع الحوار الناتج :
Dim N As Integer N = True MsgBox(N)
لا اظنك ابداً ستجد صعوبة بإذن الله تعالى في استنتاج الناتج في مربع الحوار الناتج .
وكذلك الحال اذا جربت المثال التالي :
Dim B As Boolean Dim I As Integer B = 123 I = B MsgBox(B) MsgBox(I)
في الشفرة السابقة يسهل استنتاج قيمة مربع الحوار الاول والتي ستكون بإذن الله تعالى True ( وذلك لانه وكما اسلفنا ان اي قيمة سوى الصفر تمثل الـ True ) غير انه قد يظن البعض ان الناتج في مربع الحوار الثاني سيكون قيمة المتغير I و التي ينبغي ان تكون 123 ... غير ان الناتج مخالف لذلك فعلى الرغم من ان قيمة المتغير B هي 123 و لكنها مباشرة ستعود الى قيمة الـ True الاساسية ( سالب واحد ) بمجرد مساوتها بالمتغير B الذي هو من النوع Boolean و بالتالي فأن القيمة التي ستخزن في المتغير I هي القيمة سالب واحد و ليس كما قد يظن البعض 123 ...
مثال آخير :
اذا طلبت ان نصمم برنامج بسيط فيه مربع نص TextBox اسمه مثلاً txt و زر امر Command1 و نريد ان نجعل الضغط على الزر يقوم بإخفاء مربع النص ثم اذا نقرنا على الزر مرة اخرى يعود مربع النص للظهور و اذا ضغطنا الزر اخرى اختفى مربع النص مرة اخرى وهكذا دواليك .... اي ان الضغط المستمر على الزر يقوم باخفاء و اظهار مربع النص بالترتيب ؟!
لتنفيذ البرنامج السابق سيكتب كلاً منا شفرته الخاصة مثل :
Private Sub Button1_Click( . . . ) Handles Button1.Click If txt.Visible = True Then txt.Visible = False Else txt.Visible = True End If End Sub
او ربما يكتب :
Private Sub Button1_Click( . . . ) Handles Button1.Click If txt.Visible = True Then txt.Visible = False Else txt.Visible = True End Sub
و لعلك تستخدم IIF كالتالي :
Private Sub Button1_Click( . . . ) Handles Button1.Click txt.Visible = IIf(txt.Visible = True, False, True) End Sub
واذا خطر ببالك الفيجوال بيسك الاسبق 6.0 وتذكرت دواله السابقة فيمكنك ان تستوردها الى برنامجك عن طريق :
Imports Microsoft.VisualBasic
وبعدها اذا تذكرت الدالة Switch فلست ابداً مخطئاً :
Private Sub Button1_Click( . . . ) Handles Button1.Click txt.Visible = Switch(txt.Visible = True, False, txt.Visible = False, True) End Sub
و ان فكرت في شقيقتها الدالة ( Choose ) فهي ايضاً فكرة جميلة ولا ريب :
Private Sub Button1_Click( . . . ) Handles Button1.Click txt.Visible = Choose(Abs(txt.Visible) + 1, True, False) End Sub
او ربما تكون اكثر منطقية فتقول :
Private Sub Button1_Click( . . . ) Handles Button1.Click txt.Visible = Not txt.Visible End Sub
و الطرق التي قد ننتهجها لن يكون لها نهاية و لا تقتصر على ما سبق و لا على ماهو آت ... و لكني و بعد هذه المناقشة البسيطة اطمع في ان لا تستغرب ابداً اذا وجدت اكواد مثل :
Private Sub Button1_Click( . . . ) Handles Button1.Click txt.Visible = txt.Visible + 1 End Sub
او كالتالي :
Private Sub Button1_Click( . . . ) Handles Button1.Click txt.Visible = 2 + txt.Visible * 2 End Sub
ولعلك تستخدم :
Private Sub Button1_Click( . . . ) Handles Button1.Click txt.Visible = txt.Visible - True End Sub
او تكتب :
Private Sub Button1_Click( . . . ) Handles Button1.Click txt.Visible = True * txt.Visible - 1 End Sub
بل يمكنك ببساطة اعادة صياغة السطر السابق كالتالي :
Private Sub Button1_Click( . . . ) Handles Button1.Click txt.Visible = True * txt.Visible + True End Sub
و يمكنك بالتأكيد :
Private Sub Button1_Click( . . . ) Handles Button1.Click txt.Visible = Math.Abs(CInt(txt.Visible)) - 1 End Sub
وليس غريب ان تكتب :
Private Sub Button1_Click( . . . ) Handles Button1.Click txt.Visible = -txt.Visible - 1 End Sub
او هكذا :
Private Sub Button1_Click( . . . ) Handles Button1.Click txt.Visible = Math.Abs(CInt(txt.Visible)) + True End Sub
يبدو اني اذا استمريت بالشكل الحالي فلن انتهي ! ... غير ان العبرة بالكيف لا بالكم لهذا نكتفي بما سبق بإذن الله
خاتمة :
من هذه المناقشة اتمنى ان تصل الجميع حقيقة القيمتين التي طالما استخدمناهما طويلاً في برامجنا ... و لعل الله ان ينفعنا بما علمنا انه هو السميع العليم !
السلام عليكم ورحمة الله و بركاته ...

