1.4a —
Function parameters और arguments पर एक नज़र
Function parameters और arguments
पिछले lesson में आपने सिखा की function
अपने caller को कोई value
return कर
सकता है ।
अकसर ये ज़रूरी हो जाता है की call किये गये function को कोई value दिया जाये या pass किया जाये, ताकि function
उस value के साथ कुछ कर सके । उदाहरण
के लिए, यदि हम कोई ऐसा function लिखना चाहते हैं जो दिए गये
दो numbers को add करता है, तो हमे function
को कोई
दो numbers pass करने होंगे जिन्हें वो add करेगा अर्थात जोड़ेगा । नहीं
तो function को पता कैसे चलेगा की किन numbers
को
जोड़ना है ? किसी function को parameters और arguments
की
सहायता से value pass किया जाता है ।
Function parameter एक variable
होता
है जहां caller द्वारा दिए गए value को store किया जाता है । Function
parameters को इसके (function के) नाम के बाद parenthesis
( () ) में
रखा जाता है । यदि parameters एक से ज्यादा हों तो इन्हें comma
(,) से अलग
किया जाता है ।
नीचे कुछ ऐसे functions दिए गये हैं जिनमे parameters
की
संख्या अलग-अलग है:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
// ये function कोई parameter नहीं
लेता
// ये caller से
किसी value की अपेक्षा नहीं करता
void doPrint()
{
std::cout << "In doPrint()" << std::endl;
}
// ये function x नाम का एक integer parameter लेता
है
// caller इसे
एक value pass करेगा जो x पे store होगा
void printValue(int x)
{
std::cout << x << std::endl;
}
// इस function में दो parameters हैं, पहला
x और दूसरा y
// caller को x और y, दोनों
के लिए values pass करना होगा
int add(int x, int y)
{
return x + y;
}
|
Argument वो value है जो किसी caller द्वारा , call किये गये function को उसके parameters
के value के रूप में pass किया जाता है:
|
1
2
|
printValue(6); // यहाँ
6 एक argument है
जिसे printValue() के पास भेजा जा रहा है
add(2, 3); // 2 और 3, function add() के पास भेजे जा रहे arguments हैं
|
ध्यान दे की एक से ज्यादा arguments भी comma
(,) से अलग
किये जाते हैं । Arguments की संख्या, call किये जा रहे function
के parameters
की
संख्या के बराबर होने चाहिए । ऐसा ना होने पर compiler
error देगा ।
Parameters और arguments साथ में काम कैसे करते हैं
जब किसी function को call किया जाता है, उस function
के
सारे parameters variables में बदल जाते हैं और caller से pass किया गया हर argument,
इसके matching
parameter में copy कर लिया जाता है । इस process
(प्रक्रिया)
को pass
by value के नाम से जाना जाता है ।
उदाहरण के लिए:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
//#include "stdafx.h" // Visual Studio users इसे uncomment करें
#include <iostream>
// इस function में दो integer parameters हैं, पहला
x और दूसरा y
// x और y के values arguments के रूप में caller pass करेगा
void printValues(int x, int y)
{
std::cout << x << std::endl;
std::cout << y << std::endl;
}
int main()
{
printValues(6, 7); // इस function call में दो arguments दिए
गये हैं, 6 और 7
return 0;
}
|
जब printValues() function, arguments 6 और 7 के साथ call किया जाता है तो printValues
का parameter
x variable बन जाता है और इसे value 6 assign कर दिया जाता है । printValues
का parameter
y variable बन जाता है और इसे 7 assign कर दिया जाता है ।
इस program का output:
6
7
Parameters और return values का साथ में काम करना
Parameters और एक return value का इस्तेमाल करते हुए हम ऐसे functions
बना
सकते हैं जो input के रूप में caller से डाटा लेता हो, उस डाटा पर कोई calculation
करता
हो और calculated value को वापस caller को return कर देता हो ।
यहाँ एक आसान सा function दिया गया है जो दिए गये दो numbers
को
जोड़ता है और result caller को return करता है:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
//#include "stdafx.h" // Visual Studio users इसे uncomment करें
#include <iostream>
// add() इसके
parameters के रूप में दो integers लेता
है और उन्हें जोडकर result caller को return करता
है
// x और y parameters के values argument के
रूप में add() सेट करता है
int add(int x, int y)
{
return x + y;
}
// main कोई parameter नहीं लेता
int main()
{
std::cout << add(4, 5) << std::endl; // Arguments 4 और 5 function add() को pass किये
जा रहे हैं
return 0;
}
|
जब function add() को call किया जाता है,
parameter x को value 4 assign कर दिया जाता है और इसी क्रम में parameter
y को value 5
assign कर
दिया जाता है ।
इसके बाद function add() x + y को evaluate
करता
है, जिसका result 9 आएगा, और फिर इस value को return
statement के
द्वारा main() के पास भेज देता है । फिर main
function में value (जो की यहाँ 9 है) को print करने के लिए इसे cout के पास भेज दिया जाता है ।
Output:
9
चित्रित रूप में:

और अधिक examples
आइये कुछ और function calls पर नज़र डालें:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
//#include "stdafx.h" // Visual Studio users इसे uncomment करें
#include <iostream>
int add(int x, int y)
{
return x + y;
}
int multiply(int z, int w)
{
return z * w;
}
int main()
{
using namespace std;
cout << add(4, 5) << endl; // add() में, x=4, y=5, इसलिए x+y=9
cout << multiply(2, 3) << endl; // multiply() में, z=2, w=3, इसलिए z*w=6
// हम expressions के भी values pass कर
सकते हैं
cout << add(1 + 2, 3 * 4) << endl; // add() में, x=3, y=12, इसलिए x+y=15
// हम variables के values भी pass कर
सकते हैं
int a = 5;
cout << add(a, a) << endl; // evaluate होकर
(5 + 5) देगा
cout << add(1, multiply(2, 3)) << endl; // evaluate होकर
1 + (2 * 3) देगा
cout << add(1, add(2, 3)) << endl; // evaluate होकर
1 + (2 + 3) देगा
return 0;
}
|
इस program का output:
9
6
15
10
7
6
पहले के दो statements आसानी से समझ आते है ।
तीसरे statement में,
parameters खुद expressions हैं जो pass किए जाने से पहले evaluate
होते
हैं । यहाँ 1 + 2 evaluate होकर 3 देता है, इसलिए x को value 3
pass किया
जाता है । 3 * 4 evaluate होकर 12 देता है, इसलिए y को value
12 pass किया
जाता है । add(3, 12) result के रूप में 15 return करता है ।
अगला statement भी बिलकुल इसी तरह आसान है:
|
1
2
|
int a = 5;
cout << add(a, a) << endl; // evaluate हो
कर (5 + 5) देगा
|
यहाँ add() में x = a और y = a
assign किया
जाता है । क्यूंकि a = 5 है, add(a, a) = add(5, 5) होगा, जिसका result
10 आएगा ।
इससे अगला statement थोडा घुमाऊ है:
|
1
|
cout << add(1, multiply(2, 3)) << endl; // evaluate होकर
1 + (2 * 3) देगा
|
जब function add() execute होगा, CPU को parameters
x और y का value मालूम होना चाहिए । x आसानी से समझ आ जायेगा
क्यूंकि हमने इसे value के रूप में integer 1 सीधे-सीधे pass किया है, इसलिए x=1 । y के value के लिए, CPU को multiply(2,
3) को
पहले evaluate करना होगा । यहाँ CPU कुछ इस प्रकार का assignment
करता
है: z = 2 और w = 3, और इस तरह multiply(2,
3) एक integer
value 6 return करता है । अब ये value 6 add() function के y
parameter के value के रूप में assign किया जा सकता है । add(1,
6) integer 7 return करता है, जो print होने के लिए cout के पास भेज दिया जाता है ।
कम शब्दों में, (यहाँ =>
symbol का प्रयोग
evaluations दिखाने के लिए किया गया है):
add(1, multiply(2, 3)) => add(1, 6) => 7
add(1, multiply(2, 3)) => add(1, 6) => 7
नीचे दिया गया function भी आपको परेशान कर सकता है
क्यूंकि दिए गए parameters में से एक parameter खुद add()
function को call करता है:
|
1
|
cout << add(1, add(2, 3)) << endl; // evaluate हो
कर 1 + (2 + 3) देगा
|
लेकिन ये भी बिलकुल वैसा ही है जैसे पिछले statement
में एक
parameter के रूप में multiply() को call किया गया था:
इससे पहले की CPU add() के सबसे बाहरी call को evaluate
करे, इसे पहले add(2,
3) को evaluate
करना
होगा । add(2, 3) evaluate होकर 5 देता है । अब CPU
add(1, 5) को evaluate
कर
सकता है, जो value 6 return करेगा । अब इस value 6 को main में cout के पास भेजा जायेगा ।
कम शब्दों में:
add(1, add(2, 3)) => add(1, 5) => 6
add(1, add(2, 3)) => add(1, 5) => 6
निष्कर्ष
Functions को फिर से इस्तेमाल करने लायक बनाने के लिए parameters
काफी
महत्वपूर्ण हैं, क्यूंकि ये function का कोई विशेष input पहले से जाने बिना किसी task को पूरा करने की अनुमति देते
हैं । वे input values बाद में किसी function (caller) के arguments
के रूप
में दिए जाते हैं ।
Return value functions को एक value
return करने
की अनुमति देता है ।
Quiz
1) Program के इस भाग में क्या गलत है?
|
1
2
3
4
5
6
7
8
9
10
|
void multiply(int x, int y)
{
return x * y;
}
int main()
{
cout << multiply(4, 5) << endl;
return 0;
}
|
2) इस program में कौन सी दो चीजें गलत हैं?
|
1
2
3
4
5
6
7
8
9
10
|
int multiply(int x, int y)
{
int product = x * y;
}
int main()
{
cout << multiply(4) << endl;
return 0;
}
|
3) ये program क्या print करेगा?
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#include <iostream>
int add(int x, int y, int z)
{
return x + y + z;
}
int multiply(int x, int y)
{
return x * y;
}
int main()
{
using namespace std;
cout << multiply(add(1, 2, 3), 4) << endl;
return 0;
}
|
4) एक function doubleNumber() लिखें, जो केवल एक integer
parameter लेगा
और इसपर कोई calculation कर caller को pass किये गए value का दुगुना return करेगा ।
5) एक पूरा program लिखें जो यूजर से एक integer
value लेगा (cin की सहायता से, 1.3a
-- cout, cin, endl, std namespace और using statements पर एक नज़र lesson
में
इसके बारे में बताया गया है), doubleNumber() function के इस्तेमाल से इसे दोगुना
करेगा जिसे आपने question 4 में लिखा है, और फिर दोगुना किया गया value
cout की मदद
से console पर print करेगा ।

No comments:
Post a Comment