कार्य#
परिचय#
फंक्शन C++ प्रोग्रामिंग का एक मूलभूत घटक हैं, जो कोड के छोटे-छोटे हिस्सों को पुन: उपयोग योग्य और कुशल अनुभागों में व्यवस्थित करते हैं, जिन्हें किसी विशिष्ट कार्य को पूरा करने के लिए डिज़ाइन किया गया है। फंक्शन को प्रोग्राम में कई बार कॉल किया जा सकता है, जिससे कोड का संगठन आसान हो जाता है और कोड की पुनरावृत्ति से बचा जा सकता है। फंक्शन कोड को डीबग करना भी आसान बनाते हैं।
यह पृष्ठ C++ में फ़ंक्शन के उपयोग की बुनियादी बातों को कवर करता है, जिसमें शामिल हैं:
फ़ंक्शन संरचना और सिंटैक्स — C++ में फ़ंक्शन कैसे लिखे जाते हैं, जिसमें रिटर्न प्रकार, नाम और पैरामीटर शामिल हैं।
फ़ंक्शन प्रोटोटाइप — प्रोटोटाइप फ़ंक्शन क्या हैं और उनका उपयोग क्यों किया जाता है।
फ़ंक्शंस को परिभाषित करना और कॉल करना — अपने प्रोग्राम से फ़ंक्शंस कैसे बनाएँ और उन्हें कॉल करें।
रिटर्न वैल्यू — फ़ंक्शन कॉलर को डेटा कैसे वापस भेज सकते हैं।
संदर्भ द्वारा गुजरना — कैसे फ़ंक्शन अपने स्वयं के दायरे के बाहर चर को संशोधित कर सकते हैं।
कॉलबैक फ़ंक्शन — कैसे फ़ंक्शन को अन्य फ़ंक्शन में पास किया जा सकता है और घटनाओं के जवाब में स्वचालित रूप से कॉल किया जा सकता है।
डिफ़ॉल्ट तर्कों के साथ फ़ंक्शन — जब कोई तर्क प्रदान नहीं किया जाता है तो पैरामीटर को डिफ़ॉल्ट मान कैसे दिए जा सकते हैं।
फ़ंक्शन संरचना और सिंटैक्स#
C++ में, फ़ंक्शन को उसके रिटर्न टाइप, नाम और पैरामीटर के साथ घोषित किया जाना चाहिए। मूल सिंटैक्स इस प्रकार है:
return_type function_name(parameters) {
// Code to execute when the function is called
return result; // Optional, used to return a value
}
कार्यात्मक भाग |
विवरण |
|---|---|
|
फ़ंक्शन द्वारा लौटाए जाने वाले डेटा प्रकार के कुछ सामान्य विकल्प इस प्रकार हैं:
|
|
फ़ंक्शन का नाम। |
|
वैकल्पिक। टाइप किए गए पैरामीटरों की अल्पविराम से अलग की गई सूची, जिसे |
|
वैकल्पिक। फ़ंक्शन द्वारा लौटाया गया मान। यदि फ़ंक्शन का |
नोट: किसी फ़ंक्शन को कॉल करने से पहले हमेशा घोषित किया जाना चाहिए, या आपको एक फ़ंक्शन प्रोटोटाइप प्रदान करना होगा।
फ़ंक्शन प्रोटोटाइप#
C++ में, कोड को ऊपर से नीचे तक पढ़ा जाता है। इसका मतलब है कि किसी फ़ंक्शन को कॉल करने से पहले कंपाइलर को उसके बारे में पता होना चाहिए।
फंक्शन प्रोटोटाइप आपको फंक्शन का पूरा कोड लिखने से पहले ही उसका उपयोग करने की सुविधा देता है। इससे आप main() प्रोग्राम के शीर्ष पर रख सकते हैं, जबकि फंक्शन की परिभाषाओं को बाद में रख सकते हैं, जहाँ उन्हें व्यवस्थित करना और पढ़ना आसान होता है।
प्रोटोटाइप के बिना, आपको main()परिभाषित करना होगा, जो परियोजनाओं को बढ़ने पर उनका अनुसरण करना कठिन बना सकता है।
// The function's prototype
void greeting();
int main() {
greeting();
}
// Write the function's body after
void greeting() {
Brain.Screen.print("Hello!");
}
फ़ंक्शन को परिभाषित करना और कॉल करना#
Functions with No Parameters#
यदि किसी फ़ंक्शन को इनपुट की आवश्यकता नहीं है, तो आप उसे बिना पैरामीटर के परिभाषित कर सकते हैं। यदि फ़ंक्शन कोई मान वापस नहीं करता है, तो रिटर्न टाइप के रूप में void उपयोग करें।
// Define a function to display a message
void greeting() {
Brain.Screen.print("Hello!");
}
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Call the function to display the message
greeting();
}
Functions with Parameters#
आप फ़ंक्शन में पैरामीटर भी जोड़ सकते हैं, जिससे आप फ़ंक्शन द्वारा उपयोग की जाने वाली जानकारी पास कर सकते हैं।
नोट: टेक्स्ट को सी-स्टाइल स्ट्रिंग्स (const char*) या सी++ स्ट्रिंग्स (std::string ) का उपयोग करके पास किया जा सकता है।
// Define a function with a parameter
void namedGreeting(const char* name) {
Brain.Screen.print("Hello, %s!", name);
}
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
namedGreeting("Stranger");
}
वापसी मान#
फ़ंक्शन return कीवर्ड का उपयोग करके कॉलर को डेटा वापस भेज सकते हैं। इससे आप आउटपुट को कैप्चर कर सकते हैं और अपने प्रोजेक्ट में उसका उपयोग कर सकते हैं।
// Define a function that multiplies numbers by 2
int timesTwo(int number) {
return number * 2;
}
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Display the return value
Brain.Screen.print("%d", timesTwo(2));
}
संदर्भ द्वारा गुजरना#
डिफ़ॉल्ट रूप से, C++ फ़ंक्शन पैरामीटर को मान द्वारा पास करता है, जिसका अर्थ है कि फ़ंक्शन को मूल चर की एक प्रति प्राप्त होती है। फ़ंक्शन के अंदर किए गए परिवर्तन मूल मान को प्रभावित नहीं करते हैं।
// Add 1 to the number
void addOne(int number) {
number++;
}
int main() {
int value = 5;
addOne(value);
// "value" will still be 5
}
किसी फ़ंक्शन को मूल चर को संशोधित करने की अनुमति देने के लिए, पैरामीटर को & प्रतीक का उपयोग करके संदर्भ द्वारा पारित किया जा सकता है।
// Add 1 to the number
void addOne(int& number) {
number++;
}
int main() {
int value = 5;
addOne(value);
// "value" will now be 6
}
संदर्भ द्वारा पास करने से फ़ंक्शन को मान लौटाए बिना फ़ंक्शन के बाहर परिभाषित चर को अपडेट करने की अनुमति मिलती है।
कॉलबैक फ़ंक्शन#
कॉलबैक फ़ंक्शन एक ऐसा फ़ंक्शन है जिसे किसी अन्य फ़ंक्शन में पास किया जाता है और किसी विशिष्ट घटना के घटित होने पर स्वचालित रूप से कॉल किया जाता है।
कॉलबैक का उपयोग आमतौर पर बटन दबाने या सेंसर अपडेट जैसी घटनाओं के लिए किया जाता है।
फंक्शन को खुद कॉल करने के बजाय, जब कोई घटना घटित होती है तो प्रोजेक्ट अपने आप उसे कॉल कर देता है।
void onPressed() {
Brain.Screen.print("Screen pressed!");
}
// Call onPressed whenever the screen is pressed
int main() {
vexcodeInit();
Brain.Screen.pressed(onPressed);
}
Callback Signatures#
प्रत्येक कॉलबैक फ़ंक्शन को एक विशिष्ट सिग्नेचर का पालन करना चाहिए, जो परिभाषित करता है:
वापसी प्रकार
मापदंडों की संख्या
पैरामीटर प्रकारों
आवश्यक हस्ताक्षर API द्वारा निर्धारित किया जाता है। कॉलबैक फ़ंक्शन को इस हस्ताक्षर से बिल्कुल मेल खाना चाहिए।
// This callback function cannot include any parameters
void callback(void);
// This callback function includes four parameters
void callback(axisType axis, double x, double y, double z);
पैरामीटर के नाम वर्णनात्मक होते हैं और भिन्न हो सकते हैं, लेकिन रिटर्न टाइप, पैरामीटर का क्रम और पैरामीटर के प्रकार बिल्कुल मेल खाने चाहिए।
डिफ़ॉल्ट तर्कों वाले फ़ंक्शन#
फ़ंक्शन एक या अधिक पैरामीटर के लिए डिफ़ॉल्ट मान परिभाषित कर सकते हैं। जब फ़ंक्शन को कॉल किया जाता है और उस पैरामीटर के लिए कोई मान प्रदान नहीं किया जाता है, तो डिफ़ॉल्ट आर्गुमेंट का उपयोग किया जाता है।
डिफ़ॉल्ट आर्गुमेंट्स के लिए नियम:
डिफ़ॉल्ट आर्गुमेंट फ़ंक्शन की परिभाषा में अंतिम पैरामीटर होने चाहिए।
एक बार किसी पैरामीटर का डिफ़ॉल्ट मान निर्धारित हो जाने पर, उसके बाद के सभी पैरामीटरों का भी डिफ़ॉल्ट मान निर्धारित होना आवश्यक है।
यदि कोई फ़ंक्शन अपने प्रोटोटाइप में डिफ़ॉल्ट तर्क निर्दिष्ट करता है, तो उन डिफ़ॉल्ट मानों को फ़ंक्शन परिभाषा में फिर से निर्दिष्ट नहीं किया जाना चाहिए।
// Required parameter first, default parameter last
void greeting(const char* name, int repeatCount = 1) {
for (int i = 0; i < repeatCount; i++) {
Brain.Screen.print("Hello, %s!", name);
Brain.Screen.newLine();
}
}
int main() {
vexcodeInit();
// Say what name to greet (V5) and
// use default value for repeatCount (1)
greeting("V5");
Brain.Screen.newLine();
// Overrides the default value to 3
greeting("V5", 3);
}