تعلم البرمجة للمبتدئين التحقق من أنواع القيم

أهمية التشييك على نوع القيمة

التشييك على أنواع القيم التي يدخلها المستخدم أمر مهم جداً لضمان عدم حدوث أي أخطاء منطقية أو برمجية أثناء تشغيل البرنامج لأننا لا نعلم و لا نضمن ما الذي قد يقوم المستخدم بإدخاله من الكيبورد فمثلاً في حال طلبنا منه إدخال عدد ما فنحن لا نضمن قيامه بالإلتزام بتعاليمنا و إدخال رقم, فقد يقوم بكل بساطة بإدخال نص ليرى هل سيحدث شيء خاطئ إن فعل ذلك.

ليس هذا فحسب, ففي المشاريع الحقيقية نقوم بالتشييك على مدخلات المستخدم لضمان أن لا يكون بينهم مخترق يريد إرسال كود بدل معلومة التي طلبناها منه و الذي من شأنه إلحاق ضرر بالغ في قاعدة البيانات الخاصة بالمشروع أو تضمين أوامر خبيثة في محتوى المشروع لكي يوقع باقي المستخدمين ضحايا له.

في دروس لاحقة سنقوم بإجبار المستخدم على إدخال قيم ضمن شروط محددة و عندها سنقوم بالتشييك على أنواع القيم التي يدخلها المستخدم كما سنتعلم في هذا الدرس.

طريقة التشييك على نوع القيمة المدخلة

طريقة التشييك على نوع القيمة التي يدخلها المستخدم تختلف من لغة برمجة للغة لأخرى و هناك لغات تجبرك من البداية على تحديد أنواع القيم التي تقوم بتخزينها في المتغيرات و هناك لغات لا تفعل ذلك.

مهما كانت اللغة البرمجية التي ستتعامل معها مستقبلاً, كن على يقين أنها توفر لك العديد من الأوامر و الطرق السهلة التي يمكنك استخدامها للتشييك على الأنواع. لهذا لا تظن أنك في المستقبل ستواجه أي صعوبة بسبب هذا الأمر بالعكس هذا أمر تافه جداً.

الآن في حال أردت التشييك على نوع القيمة التي يدخلها المستخدم في محرر الكود لمعرفة ما إن كانت هذه القيمة هي قيمة عددية أم قيمة نصية فهنا عندك طرق كثيرة يمكنك فيها تحقيق ذلك و سنركز فقط على الطريقتين التاليتين لأنها الأكثر بساطة و تؤدي المطلوب:

  • التشيك على القيمة باستخدام العامل typeof.
  • التشيك على القيمة باستخدام الدالة isNaN().

طريقة استخدام العامل typeof

في المثال التالي طلبنا من المستخدم إدخال قيمة و من بعدها قمنا بالتشييك على نوع القيمة التي قام بإدخالها و على أساس نوعها قمنا بطباعة جملة تناسب النوع.

مثال

write("Enter a value: ");
var x = read();

if (typeof(x) == "number")
{
    write("X contains a number."); 
}
else if (typeof(x) == "string")
{
    write("X contains a string."); 
}
else
{
    write("X contains a " + typeof(x)); 
}
        

عند التشغيل في حال قمت بإدخال رقم مثل 3 فستكون النتجية كالتالي.

Enter a number: 3
X contains a number.

عند التشغيل في حال قمت بإدخال نص مثل abc فستكون النتجية كالتالي.

Enter a number: abc
X contains a string.

جرب الكود


ملاحظة

في المثال السابق لم يكن هناك أي داعي لوضع الجملة else لأن الدالة read() ترجع ما يدخله المستخدم إما كنص أو كرقم و لا يوجد أي إحتمال آخر.

سبب قيامنا بوضع else هي تعليمك كيف تعرف نوع قيمة المتغير بشكل عام.

طريقة استخدام الدالة isNaN()

محرر هرمش يوفر لك هذه الدالة بشكل أساسي حتى تكتب كود أقل عن فحص مدخلات المستخدم.


معلومة تقنية

إسم هذه الدالة مشتق من جملة is Not a Number و التي تعني: هل القيمة غير عددية؟

في عالم البرمجة القيمة يمكن أن تكون عددية, نصية, مصفوفة, كائن إلخ..
يكفي لك الآن التركيز فقط على أن تكون القيمة عددية أو غير عددية.


لاستخدام الدالة isNaN() يجب تمرير إسم المتغير الذي تريد فحص قيمته بين أقواسها و هي سترجع القيمة:

  • true إذا كانت قيمته غير عددية.
  • false إذا كانت قيمته عددية.

في المثال التالي طلبنا من المستخدم إدخال عدد, و من بعدها قمنا بالتشييك على نوع القيمة التي قام بإدخالها لمعرفة ما إن كان قد أدخل عدد فعلاً أم لا.

مثال

write("Enter a number: ");
var x = read();

if (isNaN(x))
{
    write("X is not a number."); 
}
else
{
    write("X is number."); 
}
        

عند التشغيل في حال قمت بإدخال نص مثل Mhamad فستكون النتجية كالتالي.

Enter a number: Mhamad
X is not a number.

عند التشغيل في حال قمت بإدخال رقم مثل 3.5 فستكون النتجية كالتالي.

Enter a number: 3.5
X is number.

جرب الكود

الدورات

أدوات مساعدة

أقسام الموقع

دورات
مقالات كتب مشاريع أسئلة