تحويل اﻷنواع (Type Casting)
مقدمة
تحويل اﻷنواع عملية مهمة يجب عليك فهمها، أثناء كتابتك للكود ستواجهك الكثير من المشاكل البرمجية التي سيكون من السهل عليك حلّها إن فهمت تحويل اﻷنواع وكيف يتم، أيضاً ستتجنب الوقوع في بعض اﻷخطاء، ركز في المشكلة التالية:
تخيل أننا نطلب من المُستخدم أن يقوم بإدخال رقم في حقلٍ ما، ونقوم بتخزين ما يقوم المستخدم بإدخاله في متغير اسمه num
لكن دائما هذه القيمة تكون نص (String) وليست عدد، الحقل نفسه يرسلها إلى المتغير num
في صورة نصّ يعني "20"
مثلاً بدلاً من 20
، لكن المشكلة هنا أننا نريد طباعة ناتج جمع هذا العدد مع 10 num + 10
وهذا لن يتم إن كان نوع المتغير نصّ (string)، لاحظ المثال التالي:
var num = "2";
console.log(num + 10)
كان المتوقع أن يكون الناتج 12 لكن ظهر الناتج 210 فما السبب؟
السبب أننا نجمع متغير نوعه نص (string) مع آخر نوعه عدد (integer) وهذا غير ممكن! فيقوم المفسر بتحويل المتغير الذي نوعه عدد إلى نص، ويتعامل مع العملية على أنها دمج نصوص وليست جمع عددين، كأنك كتبت "2" + "12"
وبالتالي يكون الناتج هو دمج النصين وليس جمعهم كأعداد! إذن ما الحل؟ تابع....
تحويل اﻷعداد
تحويل النصّ (string) إلى عدد (integer)
حل المشكلة السابقة هي أن نقوم أولاً بتحويل المتغير num إلى عدد بدلاً من نصّ، بالتالي عندما نقوم بعملية الجمع يتعامل المفسر معهم على أنهم عددين، فيقوم بعملية جمع عددين... ويمكننا استخدام دالة تأتي مدمجة مع اللغة (مدمجة يعني جزء من اللغة، كدالة الطباعة مثلاً) ويختلف إسم هذه الدالة من لغة ﻷخرى، لكن تؤدي نفس الشيء...
parseInt()
الدالة يدخل لهذه الدالة مُدخل، وتقوم بإرجاع عدد من نوع integer
var num = parseInt("2");
console.log(num + 10)
في المثال السابق إفترضنا أننا لدينا القيمة "2"
مكتوبة كنصّ ولا يمكننا كتابتها كعدد 2
حتى نتمكن من شرح المشكلة، لكن في اﻹستخدامات الحقيقية لن يكون اﻷمر هكذا، سيكون مثلاً هناك دالة تستدعيها لتحصل على ما أدخله المستخدم، وهذه الدالة تقوم بإرجاع ما ادخله المستخدم في نوع نصّ (string) وليس لك التحكم فيما تقوم بإرجاعه، وبالتالي ستكون مجبراً على تحويل ما تقوم بإرجاعه هذه الدالة.
تحويل العدد (integer) إلى نص (string)
في بعض اﻷحيان ستحتاج لتحويل العدد إلى نص، خصوصاً في لغات البرمجة الأخرى، هناك لغات برمجة لا تسمح لك مثلاً بدمج عدد مع نص، إما عدد مع عدد أو نص مع نص، بالتالي ستضطر وقتها لتحويل العدد إلى نص حتى تتمكن من دمجه مع أي نص.
.toString()
الدالة var num = 2;
var numStr = num.toString();
console.log(num + 10);
console.log(numStr + 10);
210
في السطر الثاني استخدمنا الدالة
.toString()
وهي طريقة كتابتها مختلفة قليلاً، فنكتب اسم المتغير الذي يحمل العدد ثم.
ثم اسم الدالةtoString()
ناتج الطباعة اﻷول كان
12
ﻷننا قمنا بطباعة ناتج جمع المتغيرnum
مع10
والمتغيرnum
هو عبارة عن عدد (integer) أما ناتج الطباعة الثاني كان210
ﻷننا طبعنا ناتج جمع المتغيرnumStr
وهو عبارة عن قيمة المتغيرnum
بعد تحويلها إلى نصّ (string) بالتالي يكون ناتج الطباعة هو ناتج دمج نصوص وليس جمع أعداد.
تحويل النصّ (string) إلى عدد عشري (float)
كما درسنا في درس أنواع البيانات أن اﻷعداد لها نوعين من أنواع البيانات:
- Integer: العدد الصحيح (
1
,2
,3
,4
...) - Float: العدد العشري (
1.5
,0.75
,2.5
...)
واﻵن لنفرض في المشكلة التي ناقشناها باﻷعلى أننا لدينا نصّ "2.5"
مثلاً ونريد تحويله إلى عدد، ولكن النصّ في هذه المرة يحتوي على عدد عشري! لاحظ ناتج المثال:
var num = parseInt("2.5");
console.log(num);
في المثال السابق سيقوم المفسّر بتحويل العدد العشري إلى عدد صحيح، سيتجاهل العلامة العشرية وسيعتبر أن "2.5"
هي العدد 2
ﻻ تستخدم parseInt()
أبداً إذا كان العدد عشري!
يجب استخدام parseFloat()
مع اﻷعداد العشرية (float)
parseFloat()
الدالة هذه الدالة تقوم بنفس عمل الدالة parseInt()
ولكن تُستخدم مع اﻷعداد العشرية (float) وتقوم دائماً بإرجاع عدد عشري!
var num = parseFloat("2.5");
console.log(num);
console.log(num + 1);
3.5
يمكن أن تُستخدم الدالة .toString()
أيضاً في تحويل العدد العشري إلى نصّ.
تحويل عدد عشري (float) إلى عدد (integer)
يمكن هنا استخدام الدالة parseInt()
أيضاً للتحويل من عدد عشري إلى عدد صحيح
var num = 7.25;
console.log(parseInt(num));
التحويل المنطقي
التحويل المنطقي هي عملية تحويل القيم بكل أنواعها إلى القيم المنطقية (true
or false
) فمثلاً ربما قد سمعت سابقاً أن الحاسوب يعتبر أن 0 يعني false وأن 1 يعني true فهذا بالضبط ما سنتعلمه في التحويل المنطقي، وهذه العملية هامة جداً خصوصا في الشروط (if statements)، وتحتاج إلى تركيز وممارسة لفهمها والتعوّد عليها، لذلك سنتناولها في الدرس القادم!
سنستكمل تحويل اﻷنواع في الدرس القادم ونتحدث عن التحويل المنطقي...
المساهمين
وجدت خطأ أو تريد المساهمة في محتوى الدرس؟ عدل الصفحة على Github