ماذا لو كان الرقم “100” في برنامجك ليس رقماً على الإطلاق؟ ماذا لو كان مجرد حبر على ورق، مجرد سلسلة من الحروف ‘1’, ‘0’, ‘0’ لا يمكنك إجراء أي عملية حسابية عليها؟ هذا هو الواقع الذي يواجهه المبرمجون كل يوم عند التعامل مع مدخلات المستخدم. يرى المبتدئون تحويل أنواع البيانات كإجراء تقني ممل، لكن المحترفين يرونه كفن “الكيمياء الرقمية”. اليوم، لن تتعلم مجرد أوامر؛ بل ستتعلم كيف تكون كيميائياً رقمياً، يحول المواد من شكل إلى آخر، ويبني جسوراً بين عوالم البيانات المختلفة دون أن يفقد قطرة واحدة من المعلومات القيمة.
ماذا ستتقن في هذا الدرس؟
فهم لماذا نحتاج إلى تحويل أنواع البيانات في المقام الأول.
التمييز بين التحويل الضمني (الآمن) والتحويل الصريح (الخطر).
إتقان استخدام (type) لإجراء التحويل الصريح بين الأنواع الأساسية المتوافقة.
تعلم “التعويذة” الخاصة لتحويل النصوص (String) إلى أرقام باستخدام دوال التحليل (.parseInt()).
الفصل الأول: معضلة الكيميائي
1
عندما لا تكون المادة في الحالة الصحيحة
تخيل أنك في مختبر. لديك وصفة (برنامج) تتطلب خلط سائلين، لكن أحد المكونات وصل إليك على شكل مسحوق صلب. لا يمكنك خلط مسحوق مع سائل مباشرة. يجب عليك أولاً أن تحول المسحوق إلى حالته السائلة.
هذه هي بالضبط معضلة المبرمج. غالباً ما تحصل على البيانات في شكل غير مناسب للمهمة:
المستخدم يدخل عمره في مربع نص. برنامجك يستلمه كنص (String) مثل “25”.
أنت تريد إجراء عملية حسابية عليه (مثلاً age + 1)، لكن لا يمكنك “جمع” رقم مع نص.
يجب عليك أولاً تحويل النص “25” إلى رقم صحيح 25.
تحويل أنواع البيانات (Type Casting / Conversion)
هي عملية تغيير متغير من نوع بيانات إلى نوع آخر. إنها مهارة أساسية للتعامل مع البيانات من مصادر مختلفة (مثل المستخدمين أو الملفات) ولإجراء عمليات حسابية دقيقة.
الفصل الثاني: التحويل بين السوائل (الأنواع الأساسية)
2
التحويل الآمن والتحويل الخطر
عندما نتعامل مع الأنواع الرقمية الأساسية، هناك نوعان من التحويل:
1. التحويل الضمني / التوسيعي (Widening Casting):
هذا هو التحويل الآمن. يحدث تلقائياً عندما تضع قيمة من حاوية صغيرة في حاوية أكبر.
تخيل صب كوب ماء صغير (int) في دلو كبير (double). لن تفقد أي ماء.
2. التحويل الصريح / التضييقي (Narrowing Casting):
هذا هو التحويل الخطر. يحدث عندما تحاول وضع قيمة من حاوية كبيرة في حاوية أصغر.
تخيل صب دلو ماء كبير (double) في كوب صغير (int). من المحتمل جداً أن ينسكب بعض الماء وتفقد جزءاً منه (الجزء العشري).
جافا لن تسمح لك بهذا تلقائياً. يجب أن تخبرها صراحة أنك موافق على المخاطرة باستخدام (type). هذا بمثابة قولك: “أنا أعرف ما أفعل وأتحمل مسؤولية فقدان البيانات”.
شاهد الفرق بين التحويل الآمن والخطر.
اضغط على "تشغيل" لعرض النتيجة هنا.
رسائل النظام ستظهر هنا.
جاهز
السطر 1, العمود 1
الفصل الثالث: تحويل الحبر إلى ذهب (من نص إلى رقم)
3
تعويذة التحليل (Parsing)
ماذا عن مشكلتنا الأصلية؟ تحويل النص “25” إلى رقم. هنا، التحويل الصريح (int) لن يعمل! لماذا؟ لأن String و int هما مادتان مختلفتان تماماً. String هو “حبر على ورق”، بينما int هو “جوهر رقمي”.
لتحويل الحبر إلى ذهب، نحتاج إلى “تعويذة” خاصة. هذه التعويذة تأتي على شكل دوال مساعدة تسمى دوال التحليل (Parse Methods).
Integer.parseInt(someString): تحلل النص وتستخرج منه القيمة الصحيحة int.
Double.parseDouble(someString): تحلل النص وتستخرج منه القيمة العشرية double.
اضغط على "تشغيل" لعرض النتيجة هنا.
رسائل النظام ستظهر هنا.
جاهز
السطر 1, العمود 1
خطر الانفجار!
ماذا يحدث لو حاولت تحليل نص لا يحتوي على رقم صالح، مثل Integer.parseInt(“Hello”)؟ سيحدث “انفجار” في برنامجك! (خطأ يسمى NumberFormatException). سنتعلم كيفية التعامل مع هذه الأخطاء بأمان في دروس لاحقة عن معالجة الاستثناءات (Exception Handling).
الفصل الرابع: التعويذة العكسية (من رقم إلى نص)
4
تحويل الذهب إلى حبر
أحياناً تحتاج إلى العكس: تحويل رقم إلى نص لعرضه أو دمجه مع نصوص أخرى. هذه هي أسهل عملية تحويل على الإطلاق.
لديك طريقتان:
String.valueOf(someNumber): الطريقة الرسمية والأكثر وضوحاً.
خدعة الدمج الفارغ: ببساطة، ادمج الرقم مع نص فارغ “”. ستقوم جافا تلقائياً بتحويل الرقم إلى نص لإكمال عملية الدمج. هذه هي الطريقة الأسرع والأكثر شيوعاً.
اضغط على "تشغيل" لعرض النتيجة هنا.
رسائل النظام ستظهر هنا.
جاهز
السطر 1, العمود 1
ما هي نتيجة تشغيل السطر التالي: int result = (int) 7.8;؟
التفسير:
هذا تحويل صريح (تضييقي) من double إلى int. جافا لا تقوم بالتقريب، بل تقوم بالبتر (truncation)، أي أنها تتجاهل تماماً كل ما بعد الفاصلة العشرية. لذلك، ستكون النتيجة 7.
خلاصة رحلة اليوم
لقد أصبحت اليوم كيميائياً رقمياً. أنت لم تعد ترى أنواع البيانات كعوالم منفصلة، بل كمواد يمكنك تحويلها بمهارة. تعلمت كيف تصب بأمان من الحاويات الصغيرة إلى الكبيرة، وكيف تتحمل مسؤولية الفقدان عند الصب في الحاويات الصغيرة، والأهم من ذلك، تعلمت التعويذات السحرية لتحويل “الحبر على الورق” (String) إلى “جوهر رقمي” (int, double) يمكنك استخدامه في معادلاتك.
التحكم في مسار البرنامج
لقد أتقنت التعامل مع البيانات وتخزينها وتحويلها. ولكن كل برامجنا حتى الآن تسير في خط مستقيم واحد. كيف نجعل برامجنا تتخذ قرارات؟ كيف نجعلها تتصرف بشكل مختلف بناءً على الشروط؟ في القسم التالي من الدورة، سندخل إلى عالم التحكم في المسار، وسنبدأ باللبنة الأساسية لاتخاذ القرار: القيم المنطقية (Booleans) ومعاملات المقارنة.