progress-4gl
बार-बार दोहराना
खोज…
परिचय
प्रगति ABL में पुनरावृति (लूपिंग) के कई तरीके हैं।
जबकि ऐसा
जब तक WHILE
-part पूरा नहीं होता है, तब तक DO WHILE
लूप लूप जारी रहेगा। यह हमेशा के लिए चलाने और एक सीपीयू कोर से हर समय खाने के लिए आसान बनाता है।
क्या अभिव्यक्ति है :
समाप्त।
अभिव्यक्ति बूलियन तर्क, तुलना, चर, क्षेत्र आदि का कोई संयोजन है जो एक सच्चे मूल्य का मूल्यांकन करता है।
/* This is a well defined DO WHILE loop that will run as long as i is lower than 10*/
DEFINE VARIABLE i AS INTEGER NO-UNDO.
DO WHILE i < 10:
i = i + 1.
END.
DISPLAY i. // Will display 10
आप WHILE
-part में कितने भी चेक का उपयोग कर सकते हैं:
DEFINE VARIABLE i AS INTEGER NO-UNDO.
DO WHILE TODAY = DATE("2017-02-06") AND RANDOM(1,100) < 99:
i = i + 1.
END.
MESSAGE i "iterations done" VIEW-AS ALERT-BOX.
हालाँकि, संकलक आपको यह जाँचने में मदद नहीं करेगा कि WHILE
-part आखिरकार मिला कैसे:
/* Oops. Didnt increase i. This will run forever... */
DEFINE VARIABLE i AS INTEGER NO-UNDO.
DO WHILE i < 10:
i = 1.
END.
DO var = स्टार्ट टू फिनिश [BY स्टेप]
यह पुनरावृत्ति एक प्रारंभिक बिंदु से अंत तक एक मूल्य को बदलता है, वैकल्पिक रूप से प्रत्येक चरण के लिए एक निर्दिष्ट मूल्य से। डिफ़ॉल्ट परिवर्तन 1 है।
DEFINE VARIABLE i AS INTEGER NO-UNDO.
DO i = 10 TO 15:
DISPLAY i WITH FRAME x1 6 DOWN .
DOWN WITH FRAME x1.
END.
परिणाम:
---------------i
10
11
12
13
14
15
आप तिथियों पर भी पुनरावृति कर सकते हैं:
DEFINE VARIABLE dat AS INTEGER NO-UNDO.
DO dat = TODAY TO TODAY + 3:
END.
और डेसीमल पर। लेकिन फिर आप सबसे अधिक संभावना का उपयोग करना चाहते BY
- अन्यथा एक INTEGER
ठीक के रूप में किया होता ...
DEFINE VARIABLE de AS DECIMAL NO-UNDO.
DO de = 1.8 TO 2.6 BY 0.2:
DISPLAY "Value" de.
END.
का उपयोग करना BY
एक ऋणात्मक संख्या भी कम मूल्य के लिए एक उच्च से जा सकते हैं:
DEFINE VARIABLE i AS INTEGER NO-UNDO.
DO i = 5 TO 1 BY -1:
END.
अभिव्यक्ति का परीक्षण तब तक किया जाएगा जब तक कि वह अब पूरी न हो। यह लूप समाप्त होने के बाद काउंटर को उच्चतर बनाता है (यदि ऊपर की ओर बढ़ रहा है) या नीचे (यदि नीचे की ओर बढ़ रहा है)
DEFINE VARIABLE i AS INTEGER NO-UNDO.
DO i = 5 TO 1 BY -1:
END.
MESSAGE i. // Will message 0
एक और उदाहरण:
DEFINE VARIABLE da AS DATE NO-UNDO.
DISPLAY TODAY. //17/02/06
DO da = TODAY TO TODAY + 10:
END.
DISPLAY da. //17/02/17 (TODAY + 11)
दोहराएं
जब तक आप स्पष्ट रूप से लूप से बाहर नहीं निकल जाते, तब तक दोहराएंगे:
//Runs forever
REPEAT:
// Do stuff
END.
लूप से बाहर निकलने के लिए आप LEAVE
कीवर्ड का उपयोग कर सकते हैं। लेबल के साथ या उसके बिना। एक लेबल के बिना LEAVE
हमेशा वर्तमान लूप को प्रभावित करेगा। एक नाम के साथ आप क्या पाश करने के लिए निर्दिष्ट कर सकते हैं LEAVE
।
/* Without a label */
REPEAT:
//Do stuff
IF TRUE THEN LEAVE.
END.
/* With a label */
loopLabel:
REPEAT:
//Do stuff
IF <somecondition> THEN LEAVE loopLabel.
END.
/* Two nested REPEATS */
DEFINE VARIABLE i AS INTEGER NO-UNDO.
loopLabelOne:
REPEAT:
loopLabelTwo:
REPEAT:
i = i + 1.
IF RANDOM(1,100) = 1 THEN LEAVE loopLabelTwo.
IF RANDOM(1,100) = 1 THEN LEAVE loopLabelOne.
END.
IF RANDOM(1,100) = 1 THEN LEAVE loopLabelOne.
END.
DISPLAY i.