العشوائية ليست فوضى: كيف يحل Kotlin مشكلة من Stack Overflow
\n\nكل مطور كتب كوداً لتوليد رقم عشوائي مرة واحدة على الأقل في حياته. قد يبدو الأمر بسيطاً؟ ولكن عندما يُطرح هذا السؤال على Stack Overflow (والسؤال "How can I get a random number in Kotlin?" يجمع آلاف المشاهدات)، يتضح أن هناك عقبات أكثر مما يبدو. خاصة إذا كنت تنتقل من Java أو Python.
\n\nفي هذه المقالة، سنشرح توليد الأرقام العشوائية في Kotlin من التقنيات البسيطة إلى المتقدمة. ستتعلم كيفية الحصول على عدد صحيح عشوائي، عدد كسري، كيفية تحديد نطاق، وحتى كيفية توليد random آمن للتشفير للأمان. هيا بنا!
\n\nالأساسيات: Random في Kotlin
\n\nليس لدى Kotlin فئة منفصلة خاصة به للـ random - فهو يستخدم java.util.Random القوي من Java، ولكن مع بناء جملة أكثر ملاءمة. بفضل دوال الامتداد، يمكن كتابة كود Kotlin random حرفياً في سطر واحد.
أبسط طريقة: Random.nextInt()
\n\nإذا كنت تحتاج فقط إلى عدد صحيح عشوائي (من 0 إلى أقصى قيمة Int)، استخدم:
\n\nimport kotlin.random.Random\n\nfun main() {\n val randomNumber = Random.nextInt()\n println("الرقم العشوائي: $randomNumber")\n}\n\nكل تشغيل سيعطي قيمة جديدة. ولكن في أغلب الأحيان نحتاج إلى تحديد نطاق. لهذا يوجد إصدار محمّل:
\n\nval fromZeroToTen = Random.nextInt(10) // 0..9\nval fromFiveToFifteen = Random.nextInt(5, 15) // 5..14\n\nهام: في Kotlin، كما في Java، الحد الأعلى غير مضمن. Random.nextInt(10) سيعيد رقمًا من 0 إلى 9.\n\nالأعداد الكسرية: Random.nextDouble() و Random.nextFloat()
\n\nلتوليد float عشوائي في Kotlin أو double استخدم:
\n\nval randomDouble = Random.nextDouble() // 0.0..1.0\nval randomFloat = Random.nextFloat() // 0.0..1.0\n\n// مع نطاق:\nval doubleInRange = Random.nextDouble(10.0, 20.0) // 10.0..20.0\n\nلاحظ: nextFloat() لا يدعم النطاق - فقط nextDouble(). إذا كنت بحاجة إلى float في نطاق، قم بالتحويل:
val customFloat = Random.nextDouble(1.5, 5.5).toFloat()\n\nتوليد أرقام عشوائية في نطاق: أمثلة عملية
\n\nفي أغلب الأحيان في المشاريع الحقيقية، نحتاج إلى رقم عشوائي في نطاق محدد Kotlin. دعنا نستعرض السيناريوهات الأكثر شيوعاً.
\n\nعدد صحيح عشوائي من 1 إلى 100 (شاملاً)
\n\nلتضمين الحد الأعلى، أضف 1 ببساطة:
\n\nval diceRoll = Random.nextInt(1, 7) // 1..6 (مثل نرد اللعب)\nval lottery = Random.nextInt(1, 101) // 1..100\n\nفهرس عشوائي لمصفوفة أو قائمة
\n\nمن أكثر المهام شيوعاً - الحصول على عنصر عشوائي من مجموعة:
\n\nval colors = listOf("أحمر", "أزرق", "أخضر", "أصفر")\nval randomColor = colors[Random.nextInt(colors.size)]\nprintln("اللون العشوائي: $randomColor")\n\nولكن في Kotlin هناك طريقة أكثر أناقة - دالة random():
val randomColor = colors.random()\nprintln("اللون العشوائي: $randomColor")\n\nتحت الغطاء، تفعل نفس الشيء، لكن الكود يصبح أنظف.
\n\nرقم عشوائي بخطوة
\n\nأحياناً نحتاج إلى توليد أرقام مضاعفة لقيمة معينة. مثلاً، الأرقام الزوجية من 0 إلى 100:
\n\nfun randomEven(max: Int): Int {\n val half = max / 2\n return Random.nextInt(0, half + 1) * 2\n}\n\nprintln(randomEven(100)) // 0, 2, 4, ..., 100\n\nتقنيات متقدمة: المتتاليات والأمان التشفيري
\n\nمتتالية عشوائية من الأرقام
\n\nإذا كنت بحاجة إلى توليد قائمة من الأرقام العشوائية، استخدم generate