Swift में यादृच्छिक संख्याओं का जनन: random() से GameplayKit तक

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Swift और यादृच्छिक संख्याएँ: जादू जो पूर्वानुमानित रूप से काम करता है

\n\n

प्रत्येक डेवलपर को देर-सबेर इस कार्य का सामना करना पड़ता है: "यादृच्छिक संख्या कैसे उत्पन्न करें?"। लगता है, इससे आसान क्या हो सकता है? लेकिन Swift की दुनिया में, यह विषय एक लंबे विकास पथ से गुज़रा है — प्राचीन C-फ़ंक्शन से लेकर सुरुचिपूर्ण अंतर्निहित API तक। इस लेख में, हम Swift में यादृच्छिक संख्याएँ उत्पन्न करने के सभी तरीकों पर चर्चा करेंगे, सरल से लेकर औद्योगिक स्तर तक, जीवंत उदाहरणों और महत्वपूर्ण बारीकियों के साथ।

\n\n

यदि आपने कभी सोचा है कि आपका arc4random() अजीब संख्याएँ क्यों लौटाता है या किसी सरणी से वास्तविक यादृच्छिक चयन कैसे करें — तो आप सही जगह पर आए हैं। चलिए शुरू करते हैं!

\n\n

संक्षिप्त इतिहास: हम यहाँ तक कैसे पहुँचे

\n\n

Swift 4.2 (2018) से पहले, डेवलपर्स arc4random(), drand48() और rand() % 100 जैसी पैचवर्क विधियों के बीच चयन करने में संघर्ष करते थे। वैसे, अंतिम विधि खतरनाक थी — यदि सीमा RAND_MAX से पूर्णतः विभाज्य नहीं है, तो वितरण में पूर्वाग्रह (bias) निश्चित था। Swift 4.2 के आगमन के साथ, Apple ने हमें RandomNumberGenerator प्रोटोकॉल और अंतर्निहित विधियाँ दीं। अब यादृच्छिक संख्या जनन सुरक्षित, पठनीय और एकसमान हो गया है।

\n\n

आधुनिक तरीका: RandomNumberGenerator और प्रकारों की विधियाँ

\n\n

Swift 4.2 से शुरू करते हुए, सबसे सही और सरल तरीका प्रकारों पर स्थैतिक विधियों का उपयोग करना है:

\n\n
// 1 से 100 तक यादृच्छिक पूर्णांक\nlet randomInt = Int.random(in: 1...100)\n\n// 0.0 से 1.0 तक यादृच्छिक दशमलव संख्या\nlet randomDouble = Double.random(in: 0.0...1.0)\n\n// यादृच्छिक Float संख्या\nlet randomFloat = Float.random(in: 0.0...1.0)\n\n// यादृच्छिक Bool\nlet randomBool = Bool.random()\n
\n\n

यह API सिस्टम जनरेटर SystemRandomNumberGenerator का उपयोग करता है, जो क्रिप्टोग्राफिक रूप से सुरक्षित है (लेकिन इसके बारे में बाद में)। महत्वपूर्ण: सीमा को बंद रेंज (...) या आधे-खुले रेंज (..<) के माध्यम से निर्दिष्ट किया जाता है।

\n\n

यह क्यों अच्छा है?

\n
    \n
  • प्रकार सुरक्षा — कंपाइलर आपको Double उत्पन्न करके Int को असाइन नहीं करने देगा।
  • \n
  • कोई पूर्वाग्रह नहीं — Swift स्वयं वितरण की एकरूपता का ध्यान रखता है।
  • \n
  • बहुमुखी प्रतिभा — सभी संख्यात्मक प्रकारों के लिए काम करता है: Int, UInt, Int8, Float, Double, CGFloat और यहाँ तक कि Bool।
  • \n
\n\n

एक सीमा से यादृच्छिक संख्या उत्पन्न करना: संभावित समस्याएँ

\n\n

लगता है, इसमें क्या गलत हो सकता है? एक उदाहरण देखें:

\n\n
let diceRoll = Int.random(in: 1...6)  // पासा: 1,2,3,4,5,6\nlet coinFlip = Int.random(in: 0..<2)  // सिक्का: 0 या 1\n
\n\n

सब कुछ सही है। लेकिन यदि आप बिना ऊपरी सीमा के एक यादृच्छिक संख्या उत्पन्न करना चाहते हैं (उदाहरण के लिए, 0 से अनंत तक) — तो यह संभव नहीं है। Swift को सीमा के स्पष्ट उल्लेख की आवश्यकता है। यह जानबूझकर किया गया है ताकि ओवरफ़्लो त्रुटियों से बचा जा सके।

\n\n

यदि आपको 0 से max (जहाँ max एक चर है) तक एक यादृच्छिक संख्या चाहिए, तो बस उपयोग करें:

\n\n
let maxValue = 500\nlet randomUpTo = Int.random(in: 0...maxValue)\n
\n\n

संग्रह (Array, Set, Dictionary) से यादृच्छिक तत्व

\n\n

यादृच्छिक संख्या जनन की अक्सर अपने आप में नहीं, बल्कि एक यादृच्छिक तत्व चुनने के लिए आवश्यकता होती है। Swift एक सुरुचिपूर्ण समाधान प्रदान करता है:

\n\n
let fruits = ["सेब", "केला", "चेरी", "खरबूजा"]\nif let randomFruit = fruits.randomElement() {\n    print("आज हम \\(randomFruit) खा रहे हैं")\n} else {\n    print("टोकरी खाली है!")\n}\n
\n\n

विधि randomElement() एक वैकल्पिक मान लौटाती है — यह महत्वपूर्ण है क्योंकि संग्रह खाली हो सकता है। पूरे सरणी को फेरबदल करने के लिए shuffled() का उपयोग करें:

\n\n
let shuffledFruits = fruits.shuffled()\nprint(shuffledFruits) // उदाहरण के लिए: ["केला", "खरबूजा", "सेब", "चेरी"]\n
\n\n

क्रिप्टोग्राफिक रूप से सुरक्षित जनन: जब सुरक्षा सर्वोपरि हो

\n\n

मानक I

ब्लॉग

पुस्तक अनुशंसाएँ