تفسير قصير: لماذا لا تعود sumBy في Kotlin بقيمة Long؟
عند استخدام الدالة sumBy
في لغة البرمجة Kotlin، يتم إرجاع قيمة من نوع Int
. هذا يعني أن الدالة تقوم بإجراء جمع للقيم باستخدام دالة تحديد المفتاح (selector) وترجع نتيجة من نوع البيانات الصحيح Int
. وفيما يتعلق بالسؤال حول سبب عدم إمكانية إرجاع Long
، يمكننا أن ننظر إلى الاعتبارات التصميمية والأداء.
غالبًا ما تمثل القيم من نوع Int
نطاق قيم معقول لمعظم الحالات الاستخدام، وتكون كافية لتغطية القيم الناتجة عن الجمع. إذا كان هناك حاجة فعلية لاستخدام Long
في حالات خاصة حيث تكون القيم كبيرة للغاية، يمكن للمطور أن يقوم بتحويل القيم يدويًا إلى Long
بعد استرداد الناتج.
-
تحديث القوالب في لارافيل07/04/2024
-
تحسين استقرار Parallel.ForEach25/03/2024
وبالنسبة لحالات الحاجة الخاصة، يمكن استخدام الدالة sumBy
بشكل عام ومن ثم تحويل الناتج إلى Long
بواسطة البرمجة اليدوية، على النحو التالي:
kotlinval sum: Int = myList.sumBy { it.someProperty }
val sumAsLong: Long = sum.toLong()
هذا يسمح بالاستفادة من وظائف الجمع القوية المقدمة بواسطة sumBy
وفي الوقت نفسه يوفر مرونة في التعامل مع أنواع البيانات المختلفة.
المزيد من المعلومات
عند النظر إلى وظيفة sumBy
في لغة البرمجة Kotlin، يُلاحظ أنها تُستخدم لحساب المجموع باستخدام دالة تحديد القيمة selector
التي تعيد قيمة من نوع Int
. هذه الوظيفة تعتبر جزءًا من مكتبة Kotlin القياسية المخصصة لمجموعات البيانات.
عندما تقوم بتحديد دالة selector
لتقديم قيم من نوع Int
، يكون الناتج الكلي لدالة sumBy
من نوع Int
أيضًا. وهنا يكمن السبب في أن الدالة لا تعيد قيمة من نوع Long
.
تكون الحاجة إلى Long
غالبًا عند التعامل مع مجموعات كبيرة من البيانات، حيث يمكن أن يؤدي تجميع قيم من نوع Int
إلى تجاوز نطاق القيم الممكنة لهذا النوع. ومع ذلك، يبدو أن Kotlin اختارت البقاء على sumBy
محدودة بنوع Int
لأسباب أداء.
للتغلب على هذا القيد، يمكنك استخدام sumByLong
في حال كان لديك حاجة إلى ناتج من نوع Long
. هذه الوظيفة تعمل بنفس الطريقة كـ sumBy
ولكن تعيد قيمة من نوع Long
.
في الختام، يجدر بك أن تتأكد من احتياجات التطبيق الخاص بك والبيانات التي تعمل عليها لاختيار الوظيفة المناسبة لتجنب أية مشاكل محتملة في الأداء أو تجاوز الحدود المفروضة على أنواع البيانات.