From Test-Scratch-Wiki
हमेशा के लिए | |
forever
| |
Category | नियंत्रण |
Type | सी, कैप ब्लॉक |
हमेशा के लिए ब्लॉक एक नियंत्रण ब्लॉक, एक सी ब्लॉक और एक कैप ब्लॉक है। इस ब्लॉक के अंदर रखे गए ब्लॉक — में होंगे, ठीक वैसे ही जैसे दोहराएँ () ब्लॉक और दोहराएँ जब तक () ब्लॉक, सिवाय इसके कि लूप कभी खत्म नहीं होता (जब तक कि स्टॉप साइन पर क्लिक न किया जाए, या लूप के भीतर स्टॉप () कैप ब्लॉक सक्रिय न हो जाए)। इस अनंत लूप के कारण, ब्लॉक के नीचे कोई बम्प नहीं है; बम्प होना व्यर्थ होगा, क्योंकि इसके नीचे के ब्लॉक कभी सक्रिय नहीं होंगे।
इस ब्लॉक में थोड़ी देरी होती है, इसलिए निष्पादन की इष्टतम गति के लिए, सिंगल फ्रेम ब्लॉक स्टैक का उपयोग किया जाना चाहिए।
उदाहरण उपयोग
यह ब्लॉक स्क्रैच में सबसे अधिक इस्तेमाल किए जाने वाले ब्लॉक में से एक है क्योंकि ऐसे कई मामले हैं जब अनंत लूप की आवश्यकता होती है। कुछ सामान्य उपयोग हैं:
- स्प्राइट को दूसरे के स्थान पर रखना
forever go to (sprite v)
- एक संगीत लूप
forever play sound (battle theme v) until done
- एनिमेशन (जैसे हाथ हिलाना)
forever repeat (12) turn left (3) degrees end repeat (12) turn right (3) degrees
समाधान
इस ब्लॉक को तीन तरीकों से दोहराया जा सकता है: बूलियन कथन के साथ जो कभी सत्य नहीं होगा, पुनरावृत्ति के माध्यम से, या रिपोर्टर के माध्यम से जो "अनंतता" लौटाते हैं।
बूलियन विधि के साथ, बूलियन कथन के साथ दोहराएँ तक () ब्लॉक का उपयोग किया जाता है। ऐसे कई हैं जो कभी सत्य नहीं होंगे, जिनमें शामिल हैं:
<[1] = [-1]> <[a] = [b]> <(timer) = [-1]> <not <not <>>> <<> or <>>
पूर्ण समाधान:
repeat until <[1] = [-1]> . . .
एक विधि जिसमें झूठे बूलियन कथन शामिल नहीं होते हैं वह है टेल रिकर्सन। टेल रिकर्सन को स्क्रिप्ट द्वारा इसे शुरू करने के लिए आवश्यक प्रसारण को प्रसारित करके बनाया जा सकता है, इस प्रकार स्क्रिप्ट को बार-बार चलाया जा सकता है:
when I receive [recursion v] . . . broadcast (recursion v)
प्रोजेक्ट बनाने में इसके कुछ फ़ायदे हैं। उदाहरण के लिए, स्क्रिप्ट मददगार है क्योंकि इसका इस्तेमाल फ्रैक्टल बनाने के लिए किया जा सकता है।
This also works:
repeat ([10^ v] of (309)::operators) . . . end
इसके लिए एक ऑपरेटर की आवश्यकता होती है जो "अनंत" की रिपोर्ट करता है, जैसे:
([10^ v] of (309)::operators) ([e^ v] of (1000):: operators) (join [infinity] []) ((1) / (0)) ([tan v] of (90))
ये सभी अंतिम समाधान में काम करेंगे।
अंत में, कोई इसे समाधान के रूप में कर सकता है:
define foreverloop . . . foreverloop:: custom
देरी
लूप के प्रत्येक पुनरावृत्ति के बाद, अगले पुनरावृत्ति के जारी रहने से पहले 1/30 सेकंड या एक फ्रेम की देरी जोड़ी जाती है। इससे एनिमेशन को अधिक सुचारू रूप से चलाने की अनुमति मिलती है। हालाँकि, टर्बो मोड को चालू करके इस देरी को बायपास किया जा सकता है, लेकिन इसे स्क्रीन रिफ्रेश के बिना चलाने के लिए सेट किए गए कस्टम ब्लॉक के अंदर रखना अनुशंसित नहीं है, जब तक कि इसे 'इस स्क्रिप्ट' या 'सभी' को रोकने के लिए सेट किए गए stop (v)
ब्लॉक के साथ बाहर नहीं निकाला जाएगा।
![]() | स्क्रीन रिफ्रेश के बिना चलने के लिए सेट किए गए कस्टम ब्लॉक के अंदर कभी न खत्म होने वाला लूप डालने से प्रोजेक्ट काफी पिछड़ जाएगा। |
चेतावनी
- बहुत सारे फॉरएवर लूप चलने से प्रोजेक्ट पिछड़ सकता है या धीमा हो सकता है।
- प्रोजेक्ट में एस्केप या कोई विकल्प होना चाहिए ताकि वे फॉरएवर लूप में न फंसें।