كيفية تحويل String إلى Long في Kotlin دون جنون: تحليل الأخطاء النموذجية
\n\nيواجه كل مطور في Kotlin عاجلاً أم آجلاً مهمة: أخذ سلسلة نصية أدخلها المستخدم، أو وردت كاستجابة من API، أو تمت قراءتها من ملف، وتحويلها إلى رقم من نوع Long. قد يبدو الأمر بسيطاً؟ ولكن هنا، من العدم، يرتكب المبتدئون (وحتى المبرمجون ذوو الخبرة) أخطاء تؤدي إلى تعطل التطبيق، وشاشات فارغة، وليالي بلا نوم من التصحيح.
في هذه المقالة، سنحلل خمسة من أكثر الأخطاء شيوعاً عند تحويل String إلى Long في Kotlin. ستتعلم ليس فقط كيفية إصلاحها، ولكن أيضاً كيفية كتابة كود لا ينهار عند أول إدخال غير صالح. هيا بنا!
الخطأ رقم 1: الاستخدام الساذج لـ toLong() دون معالجة الاستثناءات
\n\nالطريقة الأكثر مباشرة هي استدعاء الدالة toLong() على السلسلة النصية. نعم، هذا يعمل، ولكن فقط إذا كانت السلسلة تحتوي على رقم صحيح. وإلا، فمرحباً بك في NumberFormatException!
val userInput = "123abc"\nval number: Long = userInput.toLong() // سيؤدي إلى NumberFormatException!\n\nلماذا هذا سيء؟ الاستثناء في وقت التشغيل هو دائماً خطر. إذا لم يعالج تطبيقك هذا الاستثناء، سيرى المستخدم تعطلاً.
\n\nكيفية الإصلاح؟ استخدم try-catch أو، الأفضل من ذلك، البديل الآمن toLongOrNull().
val userInput = "123abc"\nval number: Long? = userInput.toLongOrNull() // سيعيد null، لا استثناء على الإطلاق\nprintln(number) // null\n\nالدالة toLongOrNull() هي منقذك. إذا تعذر تحويل السلسلة النصية، فإنها ببساطة تعيد null، ويمكنك معالجة هذه الحالة بهدوء.
الخطأ رقم 2: تجاهل القيم null والسلاسل الفارغة
\n\nفي Kotlin، تنقسم الأنواع بوضوح إلى nullable و non-null. إذا حاولت استدعاء toLong() على سلسلة نصية قد تكون null، فلن يسمح لك المترجم. ولكن هناك خدعة: السلسلة الفارغة ("") ليست null، وهي أيضاً تسبب استثناءً.
val nullableString: String? = null\n// nullableString.toLong() // خطأ في الترجمة: فقط الاستدعاءات الآمنة (?.) أو المؤكدة غير nullable (!!.)\n\nval emptyString = ""\nemptyString.toLongOrNull() // null، كل شيء على ما يرام\n\nنصيحة عملية: تحقق دائماً من السلسلة النصية للتأكد من أنها ليست فارغة، أو استخدم toLongOrNull() مع عامل الإيلفيس ?:.
fun parseUserAge(input: String?): Long {\n return input?.toLongOrNull() ?: 0L // إذا كانت null أو ليست رقماً، سنعيد 0\n}\n\nهذا الأسلوب يجعل الكود اصطلاحياً وآمناً.
\n\nالخطأ رقم 3: نسيان المسافات والأحرف غير المرئية
\n\nالمستخدمون كائنات غير متوقعة. قد يضعون مسافة قبل الرقم أو في نهايته عن طريق الخطأ. قد تحتوي السلسلة النصية من ملف على أحرف سطر جديد \\n. الدالة toLongOrNull() لا تستطيع قص السلسلة النصية - فهي تتوقع أن تتكون السلسلة فقط من أرقام (وربما علامة ناقص).
val dirtyString = " 42 "\ndirtyString.toLongOrNull() // null، لأن هناك مسافات\n\nالحل: استدع دائماً trim() قبل التحويل.
val cleanString = dirtyString.trim()\nval number: Long? = cleanString.toLongOrNull()\nprintln(number) // 42\n\nهذه واحدة من أبسط الطرق وأكثرها فعالية لتجنب الأخطاء. تذكر القاعدة: قم بقص السلسلة قبل التحويل.
\n\nالخطأ رقم 4: مشاكل التوطين والفواصل
\n\nفي بلدان مختلفة، تُكتب الأرقام بطرق مختلفة. في الولايات المتحدة وروسيا، تُستخدم الفاصلة (1,234) أو المسافة (1 234) لفصل الآلاف، وتُفصل الكسور العشرية بنقطة. في أوروبا، العكس صحيح: الفاصلة هي الفاصل العشري. Kotlin بشكل افتراضي تتوقع سلسلة "نظيفة"