व्यंजना - प्रवाह नियंत्रण

प्रोग्राम का निष्पादन प्रवाह उस क्रम को संदर्भित करता है जिसमें प्रोग्राम स्टेटमेंट निष्पादित होते हैं। डिफ़ॉल्ट रूप से बयान एक के बाद एक निष्पादित हो जाते हैं।

तथापि; कार्य को पूरा करने के लिए कई बार निष्पादन के आदेश को डिफ़ॉल्ट क्रम से बदलना पड़ता है।

यूफोरिया में कई प्रवाह नियंत्रण वक्तव्य हैं जिनका उपयोग आप बयानों के निष्पादन आदेश को व्यवस्थित करने के लिए कर सकते हैं।

बाहर निकलने के बयान

एक लूप से बाहर आना कीवर्ड के साथ किया जाता है exit। यह प्रवाह को वर्तमान लूप को छोड़ने का कारण बनता है और लूप की समाप्ति के बाद पहले बयान के साथ सिफारिश करता है।

वाक्य - विन्यास

एक निकास बयान का वाक्य विन्यास इस प्रकार है -

exit [ "Label Name" ] [Number]

exit जब तक कोई वैकल्पिक लेबल नाम या संख्या निर्दिष्ट नहीं होती है तब तक कथन नवीनतम और सबसे कठिन लूप को समाप्त कर देता है।

का एक विशेष रूप exit N है exit 0। यह लूप के सभी स्तरों को छोड़ देता है, गहराई की परवाह किए बिना। नियंत्रण सबसे बाहरी लूप ब्लॉक के बाद जारी है। इसी तरह, बाहर निकलें -1 दूसरे सबसे बाहरी लूप से बाहर निकलता है, और इसी तरह।

उदाहरण

#!/home/euphoria-4.0b2/bin/eui

integer b

for a = 1 to 16 do
   printf(1, "value of a %d\n", a)
   
   if a = 10 then
      b = a
      exit
   end if
end for

printf(1, "value of b %d\n", b)

यह निम्न परिणाम उत्पन्न करता है -

value of a 1
value of a 2
value of a 3
value of a 4
value of a 5
value of a 6
value of a 7
value of a 8
value of a 9
value of a 10
value of b 10

ब्रेक के बयान

break कथन ठीक इसी तरह काम करता है exit बयान, लेकिन किसी भी प्रकार के लूप स्टेटमेंट्स के बजाय स्टेटमेंट्स या स्टेटमेंट्स को स्विच करने के लिए लागू होता है।

वाक्य - विन्यास

ब्रेक स्टेटमेंट का सिंटैक्स इस प्रकार है -

break [ "Label Name" ] [Number]

break यदि कोई वैकल्पिक लेबल नाम या नंबर निर्दिष्ट किया गया है तो स्टेटमेंट नवीनतम और अंतरतम को समाप्त करता है या ब्लॉक करता है।

का एक विशेष रूप break N है break 0। यह बाहरी सबसे छोड़ देता है अगर गहराई की परवाह किए बिना ब्लॉक या स्विच करें। सबसे बाहरी ब्लॉक के बाद नियंत्रण जारी है। इसी तरह, ब्रेक -1 दूसरे सबसे बाहरी को तोड़ता है अगर या स्विच को ब्लॉक करता है, और इसी तरह।

उदाहरण

#!/home/euphoria-4.0b2/bin/eui

integer a, b
sequence s = {'E','u', 'p'}

if s[1] = 'E' then
   a = 3
   
   if s[2] = 'u' then
      b = 1
      if s[3] = 'p' then
         break 0 -- leave topmost if block
      end if
      a = 2
   else
      b = 4
   end if
else
   a = 0
   b = 0
end if

printf(1, "value of a %d\n", a)
printf(1, "value of b %d\n", b)

यह निम्न परिणाम उत्पन्न करता है -

value of a 3
value of b 1

जारी रखने के बयान

continue स्टेटमेंट अगले लूप पर जाकर लागू होने वाले लूप के निष्पादन को जारी रखता है और बाकी इटररेशन को स्किप करता है।

अगले पुनरावृत्ति पर जाने का अर्थ है एक स्थिति चर सूचकांक का परीक्षण करना और यह जांचना कि क्या यह अभी भी सीमा के भीतर है।

वाक्य - विन्यास

जारी बयान का वाक्य विन्यास इस प्रकार है -

continue [ "Label Name" ] [Number]

continue जब तक कोई वैकल्पिक लेबल नाम या संख्या निर्दिष्ट न हो, तब तक नवीनतम और आंतरिक सबसे लूप को फिर से पुनरावृति करेगा।

का एक विशेष रूप continue N है continue 0। यह बाहरी सबसे अधिक लूप को पुन: पुनरावृत्त करता है, गहराई की परवाह किए बिना। इसी तरह, दूसरे बाहरी लूप से शुरू करना जारी रखें, और इसी तरह।

उदाहरण

#!/home/euphoria-4.0b2/bin/eui

for a = 3 to 6 do
   printf(1, "value of a %d\n", a)

   if a = 4 then
      puts(1,"(2)\n")
      continue
   end if

   printf(1, "value of a %d\n", a*a)
end for
This would produce following result:

value of a 3
value of a 9
value of a 4
(2)
value of a 5
value of a 25
value of a 6
value of a 36

पुन: प्रयास करें बयान

retry स्टेटमेंट अगले लूप पर जाकर लागू होने वाले लूप के निष्पादन को जारी रखता है और बाकी इटररेशन को स्किप करता है।

वाक्य - विन्यास

रिट्री स्टेटमेंट का सिंटैक्स इस प्रकार है -

retry [ "Label Name" ] [Number]

retryयह जिस पर लागू होता है लूप की वर्तमान पुनरावृत्ति को निष्पादित करने वाला विवरण। स्टेटमेंट लूप के पहले स्टेटमेंट के लिए लूप इंडेक्स के लिए न तो कुछ टेस्ट करता है और न ही इंक्रीमेंट करता है।

का एक विशेष रूप retry N है retry 0। यह गहराई की परवाह किए बिना बाहरी सबसे लूप को निष्पादित करता है। इसी तरह, पुन: प्रयास करें -1 दूसरे बाहरी लूप को पीछे हटाता है, और इसी तरह।

आम तौर पर, एक उप-ब्लॉक जिसमें एक रिट्री स्टेटमेंट होता है, जिसमें एक और फ्लो कंट्रोल कीवर्ड होता है जैसे कि बाहर निकलना, जारी रहना या तोड़ना। अन्यथा, पुनरावृति को निष्‍पक्ष रूप से निष्पादित किया जाएगा।

उदाहरण

#!/home/euphoria-4.0b2/bin/eui

integer errors = 0
integer files_to_open = 10

for i = 1 to length(files_to_open) do
   fh = open(files_to_open[i], "rb")
   
   if fh = -1 then
      if errors > 5 then
         exit
      else
         errors += 1
         retry
      end if
   end if
   file_handles[i] = fh
end for

चूँकि पुनः प्रयास करने से i का मान नहीं बदलता है और पुनः उसी फ़ाइल को खोलने का प्रयास करता है, इसलिए लूप से टूटने का एक तरीका है, जो बाहर निकलने का विवरण प्रदान करता है।

गोटो बयान

goto स्टेटमेंट कंप्यूटर को एक लेबल जगह पर कोड निष्पादन को फिर से शुरू करने का निर्देश देता है।

निष्पादन को फिर से शुरू करने के स्थान को बयान का लक्ष्य कहा जाता है। वर्तमान दिनचर्या में झूठ बोलना प्रतिबंधित है, या किसी भी दिनचर्या के बाहर वर्तमान फ़ाइल।

वाक्य - विन्यास

गोटो स्टेटमेंट का सिंटैक्स इस प्रकार है -

goto "Label Name"

गोटो स्टेटमेंट का लक्ष्य किसी भी सुलभ हो सकता है label कथन -

label "Label Name"

लेबल नामों को लगातार उद्धृत दोहरे उद्धरण होना चाहिए। यूफोरिया पहचानकर्ता में अवैध वर्ण एक लेबल नाम में दिखाई दे सकते हैं, क्योंकि यह एक नियमित स्ट्रिंग है।

उदाहरण

#!/home/euphoria-4.0b2/bin/eui

integer a = 0

label "FIRST"
printf(1, "value of a %d\n", a)
a += 10

if a < 50 then
   goto "FIRST"
end if 
printf(1, "Final value of a %d\n", a)

यह निम्न परिणाम उत्पन्न करता है -

value of a 0
value of a 10
value of a 20
value of a 30
value of a 40
Final value of a 50