الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

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

بدأه رغيد الطيب في 12 فبراير 2005 · 3 رد · 6,396 مشاهدة · في قسم الدروس والمواضيع الهامة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

في موضوعنا الثاني من هذه السلسة السريعة و ددت إلقاء نظرة مقربة أكثر على الـ 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

خاتمة :

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

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

تم تعديل هذه المشاركة بواسطة رغيد الطيب. في 12 فبراير 2005 في 19:41

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#2

بارك الله فيك

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

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

#3

السلام عليكم

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

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

:)

gaza3-3.jpg
#4

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

مواضيع مشابهة