progress-4gl
प्रक्रियाएं
खोज…
परिचय
प्रोग्रेस एबीएल में दो प्रकार की प्रक्रियाएं होती हैं: आंतरिक प्रक्रियाएं और प्रक्रिया प्रोटोटाइप जो कि विंडोज डीएलएस या यूनिक्स / लिनक्स साझा लाइब्रेरी प्रक्रियाओं के लिए हैं।
फ़ंक्शंस की तरह, प्रक्रियाओं को नेस्टेड नहीं किया जा सकता है। आप प्रक्रियाओं और इसके विपरीत में घोंसले के कार्य नहीं कर सकते।
RUN
स्टेटमेंट के साथ एक प्रक्रिया कहलाती है।
वाक्य - विन्यास
रुन प्रोसेरुनेम। // प्रक्रियात्मक नाम की एक प्रक्रिया चलाता है।
RUN proc1 (INPUT "हेलो")। // proc के लिए स्ट्रिंग HELLO को इनपुट करता है
RUN proc2 (INPUT var1, आउटपुट var2)। // इनपुट्स var1 और proc2 से var2 / to आउटपुट देता है
RUN proc3 (इनपुट "name = 'joe'", OUTPUT TABLE ttResult)। // इनपुट्स नाम = joe और आउटपुट एक तालिका में रिकॉर्ड
प्रक्रिया खरीद: // खरीद नामक एक प्रक्रिया की घोषणा की
अंत प्रक्रिया। // वर्तमान प्रक्रिया को समाप्त करता है
एक बुनियादी आंतरिक प्रक्रिया
कार्यों के विपरीत, आगे एक प्रक्रिया घोषित करने की कोई आवश्यकता नहीं है। यह आपके कोड में कहीं भी रखा जा सकता है, उससे पहले या बाद में आप इसे RUN
का उपयोग करके कॉल कर सकते हैं।
RUN proc.
//Procedure starts here
PROCEDURE proc:
//Procedure ends here
END PROCEDURE.
प्रक्रिया का नाम एक बृहदान्त्र संकेत द्वारा उल्लिखित है जो हमें बताता है कि यह एक ब्लॉक की शुरुआत है। ब्लॉक END PROCEDURE.
साथ समाप्त होता है END PROCEDURE.
(लेकिन इसे केवल END.
बदला जा सकता है END.
)
INPUT और OUTPUT पैरामीटर
एक प्रक्रिया में विभिन्न प्रकार के पैरामीटर हो सकते हैं: इनपुट, आउटपुट, इनपुट-आउटपुट (द्विदिश) और कुछ विशेष प्रकार जैसे टेम्प-टेबल और डेटासेट)।
रन स्टेटमेंट में यह INPUT
घोषित करने के लिए वैकल्पिक है (इसे डिफ़ॉल्ट माना जाता है) - अन्य सभी दिशाओं को विशेष रूप से घोषित किया जाना चाहिए।
इनपुट के रूप में दो पूर्णांकों को लेने वाली प्रक्रिया और दशमलव को आउटपुट करना।
PROCEDURE divideAbyB:
DEFINE INPUT PARAMETER piA AS INTEGER NO-UNDO.
DEFINE INPUT PARAMETER piB AS INTEGER NO-UNDO.
DEFINE OUTPUT PARAMETER pdeResult AS DECIMAL NO-UNDO.
pdeResult = piA / piB.
END PROCEDURE.
DEFINE VARIABLE de AS DECIMAL NO-UNDO.
RUN divideAbyB(10, 2, OUTPUT de).
DISPLAY de. //5.00
पैरामीटर पूरी तरह से वैकल्पिक हैं। आप किसी भी तरह से आप चाहते हैं मिश्रण और मैच कर सकते हैं। मापदंडों का क्रम आपके ऊपर है, लेकिन इनपुट के साथ शुरू करना और आउटपुट के साथ समाप्त करना आसान है - आपको उन्हें रन स्टेटमेंट में सही क्रम में रखना होगा और दिशाओं को मिलाना कष्टप्रद हो सकता है।
पुनरावृत्ति - recursion देखें
पुनरावृत्ति आसान है - प्रक्रिया के अंदर से ही प्रक्रिया को RUN
करें। हालाँकि यदि आप बहुत दूर तक चले जाते हैं तो ढेर अंतरिक्ष से बाहर चला जाएगा।
एक प्रक्रिया तथ्य की गणना करती है।
PROCEDURE factorial:
DEFINE INPUT PARAMETER piNum AS INTEGER NO-UNDO.
DEFINE OUTPUT PARAMETER piFac AS INTEGER NO-UNDO.
DEFINE VARIABLE iFac AS INTEGER NO-UNDO.
IF piNum = 1 THEN DO:
pifac = 1.
END.
ELSE DO:
RUN factorial(piNum - 1, OUTPUT iFac).
piFac = piNum * iFac.
END.
END PROCEDURE.
DEFINE VARIABLE f AS INTEGER NO-UNDO.
RUN factorial(7, OUTPUT f).
DISPLAY f.
क्षेत्र
प्रक्रिया का अपना दायरा है। बाहर का दायरा प्रक्रिया में "ब्लीड" करेगा लेकिन दूसरे तरीके से नहीं।
DEFINE VARIABLE i AS INTEGER NO-UNDO INIT 1.
DEFINE VARIABLE j AS INTEGER NO-UNDO.
PROCEDURE p:
MESSAGE i VIEW-AS ALERT-BOX. // 1
MESSAGE j VIEW-AS ALERT-BOX. // 0
j = 2.
END PROCEDURE.
RUN p.
MESSAGE i VIEW-AS ALERT-BOX. // 1
MESSAGE j VIEW-AS ALERT-BOX. // 2
एक चर के अंदर एक चर की घोषणा करना जिसमें बाहरी पर एक पैरामीटर के समान नाम है, केवल एक स्थानीय चर बनाएगा।
DEFINE VARIABLE i AS INTEGER NO-UNDO INIT 1.
DEFINE VARIABLE j AS INTEGER NO-UNDO.
PROCEDURE p:
DEFINE VARIABLE i AS INTEGER NO-UNDO INIT 5.
MESSAGE i VIEW-AS ALERT-BOX. // 5
MESSAGE j VIEW-AS ALERT-BOX. // 0
j = 2.
END PROCEDURE.
RUN p.
MESSAGE i VIEW-AS ALERT-BOX. // 1
MESSAGE j VIEW-AS ALERT-BOX. // 2
किसी प्रक्रिया के अंदर बनाया गया कोई भी चर केवल उस प्रक्रिया तक ही पहुंच सकता है।
यह एक संकलक त्रुटि उत्पन्न करेगा:
PROCEDURE p:
DEFINE VARIABLE i AS INTEGER NO-UNDO INIT 5.
END PROCEDURE.
RUN p.
MESSAGE i VIEW-AS ALERT-BOX. // Unknown Field or Variable name i - error 201