التحويلات بين أنواع المُتغيرات


قد تكون هذه التدوينة من التدوينات المُتقدمة بالنسبة لشخص مُبتدئ فى البرمجة ، فأنا أريدك أن تتعرف على هذا القسم وتدرسه جيدًا وحتى وإن لم تفهم ما أهميته أو ما الفرض منه لأننا سنتطرق إلى ذلك فى الفصول المُتقدمة ؛ لكى يكون التطبيق العملى عليها ومعرفة أهميتها حينئذٍ.
كما هو واضح من اسم التدوينة فإن تحويل المُتغيرات ، يعنى التحويل بين أنواع المُتغيرات المُختلفة ، وكما ذكرت آنفًا سيتم التعرف على فائدتها وأهميتها فى الفصول المُتقدمة عند التطبيق عليها.
يوجد نوعان من التحويل لأنواع المُتغيرات المُختلفة:
1-                                                         Widening Conversions
وهو التحويل من الأنواع الصغيرة إلى الأنواع الكبيرة ؛ لذلك لا يتم خسارة أى شيء من البيانات من خلالها.
مثال على ذلك: التحويل كم Short إلى Integer أو التحويل من Integer إلى Decimal.
2-                                                         Narrowing Conversions
وهو التحويل المُباشر الذى يُمكن فيه خسارة بعض البيانات ، وهذا النوع يقوم بالتحويل من الكبير إلى الصغير أو العكس ، بمعنى أنه عند التحويل من الصغير إلى الكبير لا يتم فقد بيانات مثل ما فى النوع Widening ، وفى حالة التحويل من الكبير إلى الصغير ، يتم فقد البيانات إذا كان حجم بيانات الكبير لا يستوعبه النوع الصغير ، فيُخزن فى الصغير أكبر كمية يستطيع إدخالها من البيانات من الكبير ، أما إذا كان حجم البيانات المُدخلة فى الكبير يستطيع أن يستوعبه الصغير كاملاً فلا يحدث فقد للبيانات.
( راجع الفقرة السابقة جيدًا مرة أخرة ، وكرر قراءتها أكثر من مرة )
فى الفقرة السابقة تكلمنا عن تعريف الفرق بين النوعين widening  ، و Narrowing ، أما هنا فسوف نتكلم عن كيفية التحويل باستخدام أنواع التحويل السابقة.


Widening Conversions
التحويل عن طريق هذا النوع يكون بإستخدام الدالة Power() وبين القوسين نضع المُتغير المُراد تحويله.
مُقتبس (________________________________________
مثال:
Dim x As Short = 5
Power(x)
والآن سُنظهر الكود الخاص بالدالة Power أىّ الكود الذى تنفذه الدالة على المُتغيرات ، وبمعنى آخر سنستعرض الكود الأساسى لوظيفة الدالة Power.




Private Function power(ByVal number As Integer) As Integer
    Return number Xor 2
End Function
لو لاحظت أن الدالة تستقبل بيانات من النوع Integer فيما أرسلنا لها بيانات من النوع Short ، فى هذه الحالة لن تكون هناك مُشكلة لأن مدى Integer أكبر من مدى Short (أىّ مدى كمية استيعاب البيانات) ، لذا فإن أى مدى Short   يقع تحت مدى Integer.
___________________________________________ (
كان النص الماضى من كتاب "خطوة بخطوة مع البرمجة من خلال Visual Studio 2008 بإستخدام VB.net & C#" للمبرمج المعروف أحمد جمال خليفة.
Narrowing Conversion
هذه العمليات من تحويل أنواع البيانات تُسمى الـCast ، وطريقة التحويل بها سهل جدًا.
Ctype(variable)
فى المثال السابق نقوم بكتابة حرف C ثُم نبدل type بنوع المُتغير الذى نود التحويل إليه ، وبدلاً من variable نقوم بكتابة اسم المُتغير الذى نريد أن يتم تحويله.
مثال:
Cstr(name)
فى المثال السابق قُمت بتحويل المُتغير name إلى النوع String بإضافة C ثم النوع الذى أود تحويل المُتغير name إليه ، ألا وهو النوع String. وعند تجربتك ستجد أن معظم الأنواع التى تريد التحويل إليها تكتب أول ثلاثة أحرف فيها. وهذه ليست قاعدة عامة ولكن فى المعظم.
وأنت تستطيع أن تقوم بالتجربة.
يوجد أيضًا التحويل باستخدام convert وطريقة استخدامها كالآتى
كتابة convert ثم نقطة "." وستعرض لك جميع أنواع المُتغيرات ، ولكن تسبقها TO ، فمثلاً أريد تحويل المُتغير name إلى النوع Decimal باستخدام Convert فيكون الكود كالتالى:
Convert.ToDecimal(name)
هكذا نكون قد إنتهينا من كُل ما يخص التحويل بين أنواع المُتغيرات.

الثوابت


قد يُصادفك أنك تريد أن تقوم مُتغير وإسناد قيمة ثابتة فيه لا تتغير طوال عمل البرنامج ؛ لذلك أنت تحتاج إلى الثوابت.
الثوابت
هو مُتغير تقوم بإسناد قيمة له ثابتة لا يُمكن تغييرها أبدًا.
تعريف الثوابت
تعريف الثوابت تكون باستخدام الكلمة المحجوزة Const وهى اختصار كلمة Constant أىّ ثابت.
كما يتم تحديد نوع البيانات المختزنة بالثابت عن طريق الكلمة المحجوزة AS.
Const name As Datatype = value
وتستبدل name باسم الثابت ، و Value بقيمة المتغير.
والطريقة الأفضل لكي تستطيع استخدام الثابت في جميع إجراءات البرنامج
هى تعريف الثابت كالتالى
Public const name As Datatype = value

المُتغيرات الجزء الخامس


العمليّات على الأرقام:
إن لم يكن هناك عمليات رياضية مُختلفة على مُتغيرات الأرقام فلن تكون لها أهمية ؛ لذلك توفر لك vb.net مجموعة من المعاملات التى يُمكنك منها تنفيذ عمليات رياضية على المتغيرات التى تحتوى على الأرقام أو حتى على الأرقام مباشرة بدون وضعها فى متغيرات والتى يوضحها لك الجدول التالى:
+
علامة الجمع.
-
علامة الطرح.
*
علامة الضرب.
/
علامة القسمة.. ويمكن أن يكون الناتج عددا صحيحا أو به أرقام عشريّة.. فمثلا:
X = 7 / 2
ستعطي الناتج 3.5.
\
علامة القسمة أيضا، ولكنّ الناتج هو العدد الصحيح فقط.. فمثلا:
X  = 7 \ 2
ستعطي الناتج 3.
ويمكن أداء نفس العمليّة باستخدام الدالة Int، لو شئت ألا ترتبك بين علامتي القسمة المتشابهتين، وذلك كالتالي:
X = Int (7/2)
Mod
إحدى علامات القسمة أيضا، ولكنّها تعطي الباقي من القسمة فحسب.. فمثلا:
X = 7 Mod 2
سيعطي الناتج 1، الذي هو عبارة عن باقي القسمة.
^
الأسّ.. فمثلا 2 × 2 × 2 تُكتب رياضيّا بالصيغة 2 3، وتكتب في البرمجة كالتالي:
2 ^ 3
ولو أردت أن تعبّر عن الجذر التكعيبيّ مثلا، فارفع العدد للأسّ (1 ÷ 3) كالتالي:
2 ^ (1/3)

هل تتذكر عندما كُنت بالمدرسة .. أو حتى وأنت الآن فى المدرسة ، فى مادة الرياضيات ستجد درس "ترتيب العمليات الرياضية" يجب أن تراعيه لكى يظهر ناتج العملية الرياضية بشكل سليم ، فعلى سبيل المثال:
هذه العملية:
x/n – (j + k)
هنا سوف يقوم البرنامج بحساب هذه العملية هكذا
1-           حساب قيمة جمع المتغيرين الرقميين j+k ؛ لأنه بين قوسين.
2-   طبعًا حسب ترتيب العمليات الرياضية البرنامج يقوم بحساب قسمة المتغيرين الرقميين x/n
3-           ثم بعد ذلك يقوم بطرح ناتج j+k من ناتج قسمة x/n
فلنفترض مثلاً أننا سوف نقوم بعمل المثال التالى:
10+20/2
فإذا قُمنا بجمع 10 + 20 = 30 ثم نقوم بعملية القسمة 30 / 2 = 15 ، وهذا حل خاطئ ، وسوف يخرج لك البرنامج حل آخر ألا وهو 20.
كيف؟؟
ترتيب العمليات الرياضية فإن الأولوية فى العمليات هى القسمة والضرب ثم الجمع والطرح ، ففى المثال السابق يتم حله كالآتى: 2/20 = 10 ثم 10 + 10 = 20.
فراعى جيدًا عند كتابة العملية الرياضية على ترتيبها الرياضى ؛ لكى تظهر النتيجة بصورة صحيحة.
المتغيرات التى يُمكن استخدامها فى أى إجراء:
هى مُتغيرات يتم تعريفها بداخل الفئة Class ويُمكن أن تستخدمها فى أى إجراء فى برنامجك وتعريفها يكون بإستخدام الكلمة Public.
مثال:
Public number As integer = 10
القيم للقراءة فقط:
المُتغيرات التى تُدخل للقراءة فقط ، ولا تُدرج لها قيمة ، وتعرّف داخل الفئة Class.
Public ReadOnly name As DataType
حيث يتم تغيير كلمة Dim إلى Public ويتم إضافة ReadOnly أىّ للقراءة فقط.
التطبيق
والآن سنقوم بالتطبيق العملى على المُتغيرات.
سنقوم بعمل برنامج بسيط به أداتان textbox وأداة Button.
وظيفته هى أنه عندما يُدخل المُستخدم رقم صحيح integer بداخل textbox1 و textbox2 ستظهر رسالة للمستخدم تخبره بناتج عملية جمع الرقم الذى أدخله فى textbox1 و textbox2 .
إفتح فيجوال بيسك دوت نت ، أعمل مشروع جديد ، قم برمى أداتان textbox وقم برمى أداة Button عليها.
قم بالضغط ضغطًا مزدوجًا على الأداة Button وتأكد من أنه تم إختيار الإجراء Click .
والآن بداخل هذا الإجراء سنقوم بحجز متغيرين للنصوص textbox1 و textbox2 ولعمل ذلك سنستخدم خاصية text للأدوات Textbox1  و Textbox2
هكذا:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim number1 As Integer = TextBox1.Text
        Dim number2 As Integer = TextBox2.Text
        MsgBox(number1 + number2)
    End Sub
ولكى نضيف نص فى msgbox يكون الكود كالتالى:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim number1 As Integer = TextBox1.Text
        Dim number2 As Integer = TextBox2.Text
        MsgBox( “الناتج هو” & number1 + number2)
    End Sub
قُمنا بإضافة المُعامل & لإضافة النصوص إلى بعضها.
قم بتشغيل البرنامج عن طريق F1 ثم قم بإدخال عدد صحيح إلى خانة textbox1 ثم رقم صحيح إلى textbox2 ثم اضغط على الزر Button2 وجرب النتيجة.

المُتغيرات الجزء الرابع


بعض الاختلافات عن VB6 في التعامل مع المتغيرات:
1- لم يعد مسموحا باستخدام الدوال التي تبدأ بالمقطع Def، مثل DefInt و DefDbl، لتحديد نوع المتغير الذي يبدأ بحروف معيّنة.
2- يمكنك الآن أن تعرّف أكثر من متغيّر من نفس النوع، بدون تكرار اسم النوع بعد كل متغيّر.. ففي الجملة:
Dim Width, Depth, Height As Integer, Area, Volume As Double
تمّ تعريف ثلاثة متغيرات من نوع العدد الصحيح Integer، ومتغيّرين من نوع العدد المزدوج Double.
2      يمكنك الآن أن تضع قيما ابتدائية للمتغيرات، مباشرةً في جملة التعريف.. مثال:
Dim Width As Integer = 9
Dim Distance As Integer = 100, Time As Single = 9.09
فإذا لم تضع هذه القيم، فإنّ VB يعطي المتغيّرات قيما ابتدائيّة افتراضيّة، كالصفر للمتغيرات الرقميّة، و False للمتغيّرات المنطقيّة.. ولكنّ ذلك ليس هو الوضع مع النصوص والحروف، فإذا لم تستخدم معها كلمة New أو إذا لم تضع بها أيّ قيمة، فإنّ قيمتها تكون Nothing.




الشروط الواجب توافرها عند تعريف المتغيرات:
2  ألا يكون كلمة من كلمات اللغة الأساسيّة (تلك التي تراها باللون الأزرق).. مثل Sub وFor و If وغيرها.. إنّ الجملة التالية غير مقبولة:
Dim Sub As Integer
ولكن لو كنت مصرّا على مثل هذا الأمر، فيمكنك أن تضع الاسم بين قوسين مضلعين [].. هذه الجملة مقبولة:
Dim [Sub] As Integer
لكن عليك في كلّ موضع تستخدم فيه المتغيّر أن تحيطه بالقوسين المضلعين:
[Sub] = 5
- ألا يزيد عن 255 حرفًا، وهو رقم كبير بالفعل بما يكفي.
- أن يتكون من كلمة واحدة لا تتخللها المسافات.. ويمكن استخدام الشرطة المنخفضة "_" للفصل بين مقاطع الكلمة بدلا من المسافات.
- لا يبدأ بأرقام، وإن كان من الممكن أن تتوسطه أرقام، أو ينتهيَ بها.
- لا يحتوي على أيٍ من: علامات التنصيص أو الأقواس أو النقطة "."، ولا علامات العمليات الحسابية أو علامات المقارنة الحسابية أو المنطقية، فكل هذه العلامات محجوزة لوظائف أخرى.
- غير مسموح بتكرار اسم المتغيّر داخل نفس النطاق، فلا يمكن تعريف متغيّرين متماثلين في الاسم داخل نفس الإجراء، وإن كان من الممكن تكرار نفس اسم المتغيّر لكن في إجراءات مختلفة.
والمتغيرات في لغة البيسك تتجاهل حالة الأحرف Case-insensitive، فالأسماء myAge و myage و MYAGE، كلّها متكافئة، وتشير لنفس المتغيّر.. معنى هذا أنّك لا تستطيع استخدام هذه الكلمات لتعريف ثلاثة متغيرات مختلفة، فكلّها تُعتبر اسما واحدا.