खोज…


परिचय

प्रगति 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.


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow