उद्देश्य-सी कार्य
एक फ़ंक्शन एक कथन का एक समूह है जो एक साथ एक कार्य करता है। हर Objective-C प्रोग्राम में एक C फ़ंक्शन होता है, जो हैmain(), और सबसे तुच्छ कार्यक्रमों के सभी अतिरिक्त कार्यों को परिभाषित कर सकते हैं।
आप अपने कोड को अलग-अलग कार्यों में विभाजित कर सकते हैं। आप विभिन्न कार्यों के बीच अपने कोड को कैसे विभाजित करते हैं, यह आप पर निर्भर करता है, लेकिन तार्किक रूप से विभाजन आमतौर पर इतना होता है कि प्रत्येक फ़ंक्शन एक विशिष्ट कार्य करता है।
एक समारोह declarationकंपाइलर को किसी फ़ंक्शन के नाम, रिटर्न टाइप और पैरामीटर्स के बारे में बताता है। एक समारोहdefinition फ़ंक्शन का वास्तविक निकाय प्रदान करता है।
मूल रूप से ऑब्जेक्टिव-सी में, हम फ़ंक्शन को विधि के रूप में कहते हैं।
ऑब्जेक्टिव-सी फाउंडेशन फ्रेमवर्क कई अंतर्निहित तरीके प्रदान करता है जिन्हें आपका प्रोग्राम कॉल कर सकता है। उदाहरण के लिए, विधिappendString() स्ट्रिंग को दूसरे स्ट्रिंग में जोड़ने के लिए।
एक विधि को विभिन्न नामों से जाना जाता है जैसे एक फ़ंक्शन या एक उप-दिनचर्या या एक प्रक्रिया, आदि।
एक विधि परिभाषित करना
ऑब्जेक्टिव-सी प्रोग्रामिंग भाषा में एक विधि परिभाषा का सामान्य रूप निम्न है -
- (return_type) method_name:( argumentType1 )argumentName1
joiningArgument2:( argumentType2 )argumentName2 ...
joiningArgumentn:( argumentTypen )argumentNamen {
body of the function
}
Objective-C प्रोग्रामिंग लैंग्वेज में एक मेथड परिभाषा में एक मेथड हैडर और एक मेथड बॉडी होती है । यहाँ एक विधि के सभी भाग हैं -
Return Type- कोई विधि मान वापस कर सकती है। return_typeफ़ंक्शन रिटर्न का मान का डेटा प्रकार है। कुछ विधियाँ एक मान लौटाए बिना वांछित संचालन करती हैं। इस स्थिति में, return_type कीवर्ड हैvoid।
Method Name- यह विधि का वास्तविक नाम है। विधि का नाम और पैरामीटर सूची एक साथ विधि हस्ताक्षर का गठन करते हैं।
Arguments- एक तर्क एक प्लेसहोल्डर की तरह है। जब किसी फ़ंक्शन को आमंत्रित किया जाता है, तो आप तर्क के लिए एक मान पास करते हैं। इस मान को वास्तविक पैरामीटर या तर्क के रूप में संदर्भित किया जाता है। पैरामीटर सूची एक विधि के तर्कों के प्रकार, आदेश और संख्या को संदर्भित करती है। तर्क वैकल्पिक हैं; अर्थात्, एक विधि में कोई तर्क नहीं हो सकता है।
Joining Argument - जुड़ने का एक तर्क यह है कि इसे पढ़ना आसान है और इसे कॉल करते समय स्पष्ट करना है।
Method Body - विधि निकाय में कथनों का एक संग्रह होता है जो परिभाषित करता है कि विधि क्या करती है।
उदाहरण
निम्नलिखित विधि के लिए स्रोत कोड कहा जाता है max()। इस विधि में दो पैरामीटर num1 और num2 हैं और दोनों के बीच अधिकतम रिटर्न देता है -
/* function returning the max between two numbers */
- (int) max:(int) num1 secondNumber:(int) num2 {
/* local variable declaration */
int result;
if (num1 > num2) {
result = num1;
} else {
result = num2;
}
return result;
}
विधि घोषणाएँ
एक विधी declarationकंपाइलर को फ़ंक्शन नाम और विधि को कॉल करने के तरीके के बारे में बताता है। फ़ंक्शन के वास्तविक निकाय को अलग से परिभाषित किया जा सकता है।
एक विधि घोषणा के निम्नलिखित भाग हैं -
- (return_type) function_name:( argumentType1 )argumentName1
joiningArgument2:( argumentType2 )argumentName2 ...
joiningArgumentn:( argumentTypen )argumentNamen;
उपरोक्त परिभाषित फ़ंक्शन अधिकतम () के लिए, विधि घोषणा निम्नलिखित है -
-(int) max:(int)num1 andNum2:(int)num2;
जब आप एक स्रोत फ़ाइल में किसी विधि को परिभाषित करते हैं और आप किसी अन्य फ़ाइल में उस पद्धति को कॉल करते हैं, तो विधि घोषणा आवश्यक है। ऐसे मामले में आपको फ़ंक्शन को कॉल करने वाली फ़ाइल के शीर्ष पर फ़ंक्शन की घोषणा करनी चाहिए।
एक विधि कहलाना
ऑब्जेक्टिव-सी विधि बनाते समय, आप एक परिभाषा देते हैं कि फ़ंक्शन को क्या करना है। एक विधि का उपयोग करने के लिए, आपको परिभाषित कार्य करने के लिए उस फ़ंक्शन को कॉल करना होगा।
जब कोई प्रोग्राम किसी फ़ंक्शन को कॉल करता है, तो प्रोग्राम नियंत्रण को कॉल किया जाता है। एक विधि कहा जाता है परिभाषित कार्य करता है, और जब उसके रिटर्न स्टेटमेंट को निष्पादित किया जाता है या जब उसके फ़ंक्शन-एंडिंग समापन ब्रेस तक पहुंच जाता है, तो यह प्रोग्राम नियंत्रण को मुख्य कार्यक्रम में वापस कर देता है।
एक विधि को कॉल करने के लिए, आपको बस विधि नाम के साथ आवश्यक मापदंडों को पारित करने की आवश्यकता है, और यदि विधि एक मान लौटाती है, तो आप लौटे मूल्य को संग्रहीत कर सकते हैं। उदाहरण के लिए -
#import <Foundation/Foundation.h>
@interface SampleClass:NSObject
/* method declaration */
- (int)max:(int)num1 andNum2:(int)num2;
@end
@implementation SampleClass
/* method returning the max between two numbers */
- (int)max:(int)num1 andNum2:(int)num2 {
/* local variable declaration */
int result;
if (num1 > num2) {
result = num1;
} else {
result = num2;
}
return result;
}
@end
int main () {
/* local variable definition */
int a = 100;
int b = 200;
int ret;
SampleClass *sampleClass = [[SampleClass alloc]init];
/* calling a method to get max value */
ret = [sampleClass max:a andNum2:b];
NSLog(@"Max value is : %d\n", ret );
return 0;
}
मैंने मुख्य () फ़ंक्शन के साथ अधिकतम () फ़ंक्शन रखा और स्रोत कोड का अनुपालन किया। अंतिम निष्पादन योग्य रहते हुए, यह निम्नलिखित परिणाम देगा -
2013-09-07 22:28:45.912 demo[26080] Max value is : 200
कार्य तर्क
यदि कोई फ़ंक्शन तर्कों का उपयोग करना है, तो उसे चर की घोषणा करनी चाहिए जो तर्कों के मूल्यों को स्वीकार करते हैं। इन चर को कहा जाता हैformal parameters समारोह के।
औपचारिक पैरामीटर फ़ंक्शन के अंदर अन्य स्थानीय चर की तरह व्यवहार करते हैं और फ़ंक्शन में प्रवेश करने और बाहर निकलने पर नष्ट हो जाते हैं।
किसी फ़ंक्शन को कॉल करते समय, दो तरीके होते हैं जो किसी फ़ंक्शन को तर्क दे सकते हैं -
अनु क्रमांक। | कॉल प्रकार और विवरण |
---|---|
1 | मूल्य से कॉल करें यह विधि फ़ंक्शन के औपचारिक पैरामीटर में एक तर्क के वास्तविक मूल्य की प्रतिलिपि बनाती है। इस स्थिति में, फ़ंक्शन के अंदर पैरामीटर में किए गए परिवर्तनों का तर्क पर कोई प्रभाव नहीं पड़ता है। |
2 | संदर्भ से कॉल करें यह विधि औपचारिक पैरामीटर में एक तर्क के पते की प्रतिलिपि बनाती है। फ़ंक्शन के अंदर, पते का उपयोग कॉल में उपयोग किए जाने वाले वास्तविक तर्क तक पहुंचने के लिए किया जाता है। इसका मतलब है कि पैरामीटर में किए गए परिवर्तन तर्क को प्रभावित करते हैं। |
डिफ़ॉल्ट रूप से, Objective-C का उपयोग करता है call by valueतर्क पारित करने के लिए। सामान्य तौर पर, इसका मतलब है कि फ़ंक्शन के भीतर कोड फ़ंक्शन को कॉल करने के लिए उपयोग किए गए तर्कों को बदल नहीं सकता है, और अधिकतम () फ़ंक्शन को कॉल करते समय उपर्युक्त उदाहरण समान विधि का उपयोग करता है।