تحويل String إلى Long في Kotlin: 5 أخطاء قاتلة وكيفية تجنبها

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

كيفية تحويل String إلى Long في Kotlin دون جنون: تحليل الأخطاء النموذجية

\n\n

يواجه كل مطور في Kotlin عاجلاً أم آجلاً مهمة: أخذ سلسلة نصية أدخلها المستخدم، أو وردت كاستجابة من API، أو تمت قراءتها من ملف، وتحويلها إلى رقم من نوع Long. قد يبدو الأمر بسيطاً؟ ولكن هنا، من العدم، يرتكب المبتدئون (وحتى المبرمجون ذوو الخبرة) أخطاء تؤدي إلى تعطل التطبيق، وشاشات فارغة، وليالي بلا نوم من التصحيح.

\n\n

في هذه المقالة، سنحلل خمسة من أكثر الأخطاء شيوعاً عند تحويل String إلى Long في Kotlin. ستتعلم ليس فقط كيفية إصلاحها، ولكن أيضاً كيفية كتابة كود لا ينهار عند أول إدخال غير صالح. هيا بنا!

\n\n

الخطأ رقم 1: الاستخدام الساذج لـ toLong() دون معالجة الاستثناءات

\n\n

الطريقة الأكثر مباشرة هي استدعاء الدالة toLong() على السلسلة النصية. نعم، هذا يعمل، ولكن فقط إذا كانت السلسلة تحتوي على رقم صحيح. وإلا، فمرحباً بك في NumberFormatException!

\n\n
val userInput = "123abc"\nval number: Long = userInput.toLong() // سيؤدي إلى NumberFormatException!
\n\n

لماذا هذا سيء؟ الاستثناء في وقت التشغيل هو دائماً خطر. إذا لم يعالج تطبيقك هذا الاستثناء، سيرى المستخدم تعطلاً.

\n\n

كيفية الإصلاح؟ استخدم try-catch أو، الأفضل من ذلك، البديل الآمن toLongOrNull().

\n\n
val userInput = "123abc"\nval number: Long? = userInput.toLongOrNull() // سيعيد null، لا استثناء على الإطلاق\nprintln(number) // null
\n\n

الدالة toLongOrNull() هي منقذك. إذا تعذر تحويل السلسلة النصية، فإنها ببساطة تعيد null، ويمكنك معالجة هذه الحالة بهدوء.

\n\n

الخطأ رقم 2: تجاهل القيم null والسلاسل الفارغة

\n\n

في Kotlin، تنقسم الأنواع بوضوح إلى nullable و non-null. إذا حاولت استدعاء toLong() على سلسلة نصية قد تكون null، فلن يسمح لك المترجم. ولكن هناك خدعة: السلسلة الفارغة ("") ليست null، وهي أيضاً تسبب استثناءً.

\n\n
val nullableString: String? = null\n// nullableString.toLong() // خطأ في الترجمة: فقط الاستدعاءات الآمنة (?.) أو المؤكدة غير nullable (!!.)\n\nval emptyString = ""\nemptyString.toLongOrNull() // null، كل شيء على ما يرام
\n\n

نصيحة عملية: تحقق دائماً من السلسلة النصية للتأكد من أنها ليست فارغة، أو استخدم toLongOrNull() مع عامل الإيلفيس ?:.

\n\n
fun parseUserAge(input: String?): Long {\n    return input?.toLongOrNull() ?: 0L // إذا كانت null أو ليست رقماً، سنعيد 0\n}
\n\n

هذا الأسلوب يجعل الكود اصطلاحياً وآمناً.

\n\n

الخطأ رقم 3: نسيان المسافات والأحرف غير المرئية

\n\n

المستخدمون كائنات غير متوقعة. قد يضعون مسافة قبل الرقم أو في نهايته عن طريق الخطأ. قد تحتوي السلسلة النصية من ملف على أحرف سطر جديد \\n. الدالة toLongOrNull() لا تستطيع قص السلسلة النصية - فهي تتوقع أن تتكون السلسلة فقط من أرقام (وربما علامة ناقص).

\n\n
val dirtyString = "  42  "\ndirtyString.toLongOrNull() // null، لأن هناك مسافات
\n\n

الحل: استدع دائماً trim() قبل التحويل.

\n\n
val cleanString = dirtyString.trim()\nval number: Long? = cleanString.toLongOrNull()\nprintln(number) // 42
\n\n

هذه واحدة من أبسط الطرق وأكثرها فعالية لتجنب الأخطاء. تذكر القاعدة: قم بقص السلسلة قبل التحويل.

\n\n

الخطأ رقم 4: مشاكل التوطين والفواصل

\n\n

في بلدان مختلفة، تُكتب الأرقام بطرق مختلفة. في الولايات المتحدة وروسيا، تُستخدم الفاصلة (1,234) أو المسافة (1 234) لفصل الآلاف، وتُفصل الكسور العشرية بنقطة. في أوروبا، العكس صحيح: الفاصلة هي الفاصل العشري. Kotlin بشكل افتراضي تتوقع سلسلة "نظيفة"

المدونات

توصيات الكتب