قمت بتعريف متغير من نوع Int في كوتلن واسندت له القيمه 022 حيث بدأت القيمه ب 0 . وظهر لي خطأ . بينما في الجافا نفس نوع القيمه يقبلها بلا مشكلة!
لماذا ال integer في كوتلن لا يقبل البداية ب 0؟
بسبب أن Kotlin، تعامل الأرقام الصحيحة (Integer) التي تبدأ بصفر تُعامل على أنها تمثل قيمة في نظام الأرقام الثماني (Octal)، وليس في النظام العشري (Decimal)، والنظام الثماني Octal غير مدعوم حاليًا في كوتلن، وذلك يعني أنه إذا بدأت العدد الصحيح بالصفر، سيتم تفسيره على أنه في نظام الأرقام الثماني.
val octalNumber = 0123 // هذا يعني 123 في نظام الأرقام الثماني val decimalNumber = 123 // هذا هو الرقم الصحيح 123 في النظام العشري
بمعنى أنه لو بدأتي قيمة integer بالصفر، فإن كوتلن تعتبر بشكل افتراضي بأن الرقم هو نظام الثماني (octal)، وليس بنظام العشري، لذا، يجب عليك تجنب بداية القيمة بالصفر إذا كنتِ تريد تمثيلها كقيمة عشرية.
وفي جافا يتم تفسير تلك الأرقام التي تبدأ بـ 0 على أنها octals وذلك النظام مدعوم في جافا لكن من الأفضل تجنب كتابة ذلك إلا إذا كنتي على علم بما تقومين به، والبدء بكتابة الأرقام الصحيحة بدون 0 .
هذا يأتي بسبب أن هلا يمكن البدء بقيمة صفر مباشرة، في لغة Kotlin، عند تعريف integer literal (قيمة صحيحة)، لا يمكن أن نبدأ القيمة بصفر مباشرة، هذا يعني أن القيم الصحيحة في Kotlin لا يجب أن تبدأ بصفر إذا كنا نستخدم literal.
لكن هذا هو استخدام مختلف تماما عن استخدام الصفر كبادئة في لغات أخرى، حيث يستخدم الصفر بشكل رئيسي لتمثيل الأرقام الصحيحة في النظام العشري.
ففي Kotlin، إذا كنا نريد تمثيل قيمة صحيحة، يتوجب علينا أن لا نبدأ القيمة بصفر، لأن ذلك قد يتسبب في فهمها كتمثيل للنظام الثماني بدلاً من النظام العشري. على عكس Java، حيث يفهم الصفر في بادئة القيمة الصحيحة كتمثيل للنظام العشري. هذا لتحقيق السلوك النموذجي في Kotlin، يمكن استخدام بادئة "0x" لتمثيل النظام العشري، وبالتالي تجنب الالتباس الذي يمكن أن يحدث بسبب بداية القيمة بالصفر.
لا يقبل نوع Int الأعداد الصحيحة التي تبدأ بصفر. هذا لأن نوع Int يمثل عددًا صحيحًا موجبًا أو سالبًا في كوتلن
بينما في الجافا، يقبل نوع int الأعداد الصحيحة التي تبدأ بصفر.
لإصلاح هذا الخطأ، يمكنك تحويل القيمة إلى نوع Long، والذي يسمح بالأعداد الصحيحة ذات القيمة الصفرية. يمكنك القيام بذلك باستخدام الدالة toLong():
val number = "022".toLong()
سيؤدي هذا الكود إلى تعيين قيمة 22 للمتغير number.
التعليقات