رغيد الطيب

أفكار و تلميحات[ المعنى الحقيقي لل True و False ]

4 ردود في هذا الموضوع

بسم الله الرحمن الرحيم ..

السلام عليكم ورحمة الله و بركاته ...

في موضوعنا الثاني من هذه السلسة السريعة و ددت إلقاء نظرة مقربة أكثر على الـ 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 Command1_Click()
   If txt.Visible = True Then
       txt.Visible = False
   Else
       txt.Visible = True
   End If
End Sub

او ربما يكتب :

Private Sub Command1_Click()
   If txt.Visible = True Then txt.Visible = False Else txt.Visible = True
End Sub

و لعلك تستخدم IIF كالتالي :

Private Sub Command1_Click()
   txt.Visible = True = IIf(txt.Visible = True, False, True)
End Sub

واذا خطرت ببالك الدالة Switch فلست ابداً مخطئاً :

Private Sub Command1_Click()
   txt.Visible = Switch(txt.Visible = True, False, txt.Visible = False, True)
End Sub

و ان فكرت في Choose فهي فكرة جميلة ولا ريب :

Private Sub Command1_Click()
   txt.Visible = Choose(Abs(txt.Visible) + 1, True, False)
End Sub

او ربما تكون اكثر منطقية فتقول :

Private Sub Command1_Click()
   txt.Visible = Not txt.Visible
End Sub

و الطرق التي قد ننتهجها لن يكون لها نهاية و لا تقتصر على ما سبق و لا على ماهو آت ... و لكني و بعد هذه المناقشة البسيطة اطمع في ان لا تستغرب ابداً اذا وجدت اكواد مثل :

Private Sub Command1_Click()
   txt.Visible = 1 + txt.Visible
End Sub

او كالتالي :

Private Sub Command1_Click()
   txt.Visible = 2 + txt.Visible * 2
End Sub

ولعلك تستخدم :

Private Sub Command1_Click()
   txt.Visible = txt.Visible - True
End Sub

او تكتب :

Private Sub Command1_Click()
   txt.Visible = True * txt.Visible - 1
End Sub

بل يمكنك ببساطة اعادة صياغة السطر السابق كالتالي :

Private Sub Command1_Click()
   txt.Visible = True * txt.Visible + True
End Sub

و يمكنك بالتأكيد :

Private Sub Command1_Click()
   txt.Visible = Abs(txt.Visible) - 1
End Sub

وليس غريب ان تكتب :

Private Sub Command1_Click()
   txt.Visible = -txt.Visible - 1
End Sub

او هكذا :

Private Sub Command1_Click()
   txt.Visible = Abs(txt.Visible) + True
End Sub

خاتمة :

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

السلام عليكم ورحمة الله و بركاته ...

تم تعديل بواسطه رغيد الطيب.
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

بارك الله فيك

أتذكر أن هذا الموضوع قد نشرته في vb4arab ولكني قد نسيت بعض المعلومات فيه ولكني عندما قرأته الآن تثبت المعلومات في دماغي

فجزاك الله كل خير

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

اهلا بك اخي الحبيب و استاذنا الجليل رغيد الطيب

بارك الله فيك علي هذه المعلومات القيمة و اتمني ان لا يقف هذ الفيض :D

:)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اتمنا لك التوفيق اخي رغيد وسيرقى هذا المنتدى بوجود عضو مثلك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .