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

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

مغلق
بدأه رغيد الطيب في 12 فبراير 2005 · 13 رد · 3,595 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أفكار و تلميحات برمجية [ المعنى الحقيقي للـ False & Ture ]

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

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

كتبت المقالة السابقة في قسم الفيجوال بيسك السابق ونضعها هنا بصيغة الـ VisualBasic .NET لعموم الفائدة :

/index.ph...f=1&t=56842&st=

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

يبدو اني اذا استمريت بالشكل الحالي فلن انتهي ! ... غير ان العبرة بالكيف لا بالكم لهذا نكتفي بما سبق بإذن الله

خاتمة :

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

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

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

1

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

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

• إستغلال خدمة الـ 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

جميل جدا أخي رغييد

لكن لدي إستفسار........... ماذا يحدث لو وضعنا في متغير Boolean غير -1 و صفر.....

هل تعتبر بذلك أن هذا المتغير True

أم ان القيمه الوحيده هي -1 ليكون المتغير True

#3

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

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

بالفعل عزيزي كلامك سليم و استنتاجك صائب و بالرجوع الى المقال تجدني اشرت لذلك بقولي :

كل قيمة عدا الصفر تعني True و اما الصفر فمعناه False !

ومن المثال التالي نستنتج ذلك :

Dim A, B, C As Boolean

A = 12
B = -50
C = 0

MsgBox(A)
MsgBox(B)
MsgBox(C)

حيث ان الرسائل التي ستظهر كلها True ماعدا الاخيرة لأننا نسبنا القيمة صفر للمتغير C ..

و ما يجدر الاشارة إليه انه بمجرد مساواتك لمتغير من النوع Boolean لقيمة غير الصفر فانه يصبح True و يتجاهل القيمة التي اعطيته اياها ( وتيبح قيمته هي الافتراضية للـ True أي سالب واحد )

اتمنى ان يجيب هذا على تساؤلك عزيزي

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

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

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

• إستغلال خدمة الـ 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)

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

#5

جزاك الله خيرا استاذنا رغيد الطيب على هذا الشرح الممتع :rolleyes:

#7

مشكور اخي رغيد على المواضيع الجميله ...

#8

مشكوووووور على الموضوع الرائع

ووانا اووووول مشاركه لي

وإن شاء الله نستفيد ونفيد

"

#9

رائع يا اخي رغيد الطيب مشكوووووووووووووووووووووووووووووووووووووووووووور

تعلم:كيف تشغل برنامجك (قبل) ما يشتغل ال explorer, مثل ال check desk في الوندوز 98 و me

اللهم عطر يومنا بالايمان وانر قلبنا بالقرآن ورزقنا من حيث لانحتسب واجعل لنا سكينة تطمئن بها روحنا واحفظنا من كل سوء اللهم بارك لنا في رجب وشعبان وبلغنا رمضان آمين يارب العالمين

ranneh.com

#10

بارك الله فيك يا استاذنا العزيز

ولكن لى استفسار

ما هو سبب ان القيمة True قيمتها -1 فى Visual Basic فقط وقيمتها واحد فى اللغات الأخرى؟

bartkr7.png
#11

من قال هذا؟ في الاسمبلي

push -1; FFFFFFFF
push control_id
call EnableWindow

تقوم بتفعيل الاداة الموجود الـ ID الخاص بها في control_id

لو وضعت 1 ايضا اقوم بتفعيلها, 0 فقط تعني انها disabled

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#12

جزاك الله خيرا أستاذنا الكبير

#13

عندي سؤال بسيط اخواني

كيف احصل على عكس القيمة الثنائية Boolean

يعني لدي متغير اخزن فيه قيمة ثنائية

واريد اسناد عكسها للخاصية Enabled

يعني اذا كانت True تصبح قيمة الخاصية Enabled = False

اذا كانت Flase تصبح قيمة الخاصية Enabled = True ؟؟

وشكرا لكم

#14
newhotta كتب:
بارك الله فيك يا استاذنا العزيز

ولكن لى استفسار

ما هو سبب ان القيمة True قيمتها -1 فى Visual Basic فقط وقيمتها واحد فى اللغات الأخرى؟

الأخ ... رغيد الطيب، شكراً جزيلاً على هذا الدرس الرائع، واسمح لى الرد على هذه الجزئية،،،

الأخ الفاضل ...

كما ذكر الأخ الفاضل Xacker، ليست فى الـ Visual Basic فقط، ولكن فى لغات أخرى.

أولاً (True or False) يتم تمثيلها ببت (Bit) واحد فقط، فـ(True) أحياناً يتم التعبير عنها ب (1) وأحياناً بـ(-1)، وبإختصار ذلك يرجع بالأساس إلى التكوين الداخلى للكمبيوتر فى التفرقة بين السالب والموجب، فذلك يعتمد على الـ(بت Bit) الأخير إذا كان (0) فالرقم موجب وإذا كان (1) فالرقم سالب، وعند النظر إلى حالة (صح أم خطأ) فهى مكونة من بت واحد فقط (كما ذكرت سابقاً)، وبالتالى البت الأول هو البت الأخير، لذلك فى حالة هذا البت (1) البعض يعتبر الناتج الرياضى (1) "أى يعتبر هذا البت الوحيد هو البت الأول" والبعض يعتبره (-1) "أى يعتبر هذا البت الوحيد هو البت الأخير"، أما فى حابة تمثيلها بأكثر من بت (Byte, Word, Double Word, ... etc)، فيتم وضع جميع الـ(Bits) بـ(1) للتعبير عن True والمحصلة هى (-1)، لذا أفضل طريقة للمقارنة هى: إذا كان المتغير لا يساوى صفر فهو True، بغض النظر عن قيمته الفعلية.

شكراً

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

هذا الموضوع مغلق.

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