मैं एक बड़ा प्रोग्रामिंग लड़का नहीं हूं लेकिन प्रोग्रामर से कई बार सुनता हूं कि हमें हमेशा एक समारोह से मूल्य वापस करना चाहिए। मैं कारण जानना चाहता हूं।हमें हमेशा फ़ंक्शन से मूल्य क्यों वापस करना चाहिए?
उत्तर
एक समारोह कुछ भी वापस नहीं की जरूरत है ... आप सी (++) समारोह को देखें, तो उनमें से कई नहीं है (अच्छी तरह से, स्पष्ट रूप से नहीं):
void nonReturningFunction(const int *someParam);
int main()
{
int i = 12;
nonReturningFunction(&i);
return 0;
}
void nonReturningFunction(const int *someParam)
{
printf("I print the value of a parameter: %d",someParam);
}
उत्तरार्द्ध कुछ भी नहीं देता है, ठीक है, यह एक शून्य देता है। मुख्य कार्य कुछ लौटाता है: 0
, यह आम तौर पर सिस्टम को संकेत देता है कि यह प्रोग्राम समाप्त हो गया है, और यह अच्छी तरह समाप्त हो गया है।
वही तर्क PHP, या किसी अन्य प्रोग्रामिंग भाषा पर लागू होता है। कुछ फ़ंक्शंस 'रिटर्न वैल्यू प्रासंगिक है, किसी अन्य फ़ंक्शन को कुछ भी वापस करने की आवश्यकता नहीं हो सकती है। सामान्य कार्यों में मान वापस आते हैं क्योंकि वे आपके कार्यक्रम के प्रवाह के लिए प्रासंगिक हैं। लिखने के लिए
<?php
class Foo
{
private $foo,$bar;
public function __construct()
{
$this->foo = 'bar';
}
public function getFoo()
{
return $this->foo;//<-- getter for private variable
}
public function getBar()
{
return $this->foo;//<-- getter for private variable
}
public function setBar($val = null)
{
$this->bar = $val;
return $this;//<-- return instance for fluent interfacing
}
public function setFoo($val = null)
{
$this->foo = $val;
return $this;
}
}
$f = new Foo();
$f->setFoo('foo')->setBar('bar');//<-- fluent interface
echo $f->getFoo();
?>
सेटर समारोह कुछ भी नहीं लौटाया, तो आप होगा:
उदाहरण के लिए, एक वर्ग ले लो
$f->setFoo('foo');
$f->setBar('Bar');
तो इस मामले में, वापसी मान हैं प्रासंगिक। एक अन्य उदाहरण है, जहां वे अप्रासंगिक कर रहे हैं:
function manipulateArray(array &$arr)//<-- pass by reference
{
sort($arr);
}
$arr = range('Z','A');
manipulateArray($arr);
var_dump($arr);//array is sorted
के विपरीत: संदर्भ द्वारा
function manipulateArray(array $arr)//<-- pass by copy
{
sort($arr);
return $arr;
}
$arr = range('Z','A');
manipulateArray($arr);
var_dump($arr);//array is not sorted!
$arr = manipulateArray($arr);//<-- requires reassign
पासिंग कई मामलों में जोखिम भरा माना जाता है, यही कारण है कि बाद दृष्टिकोण आम तौर पर बेहतर माना जाता है है। तो कई मामलों में कार्यों को एक मूल्य वापस करने की आवश्यकता नहीं होती है, लेकिन वे सभी समान हैं क्योंकि यह कोड को समग्र रूप से सुरक्षित बनाता है।
यही कारण है कि आप इस धारणा के तहत हैं कि कार्यों को हमेशा एक मान वापस करना चाहिए।
ऐसा इसलिए किया जाता है कि फ़ंक्शन के लिए एक निश्चित अंत बिंदु है। यह मुख्य रूप से पठनीयता बढ़ाने और भविष्य के प्रोग्रामर को यह समझने में मदद करने के लिए है कि आप क्या करने की कोशिश कर रहे थे।
कोई फ़ंक्शन लौटने के बारे में कोई धारणा नहीं होनी चाहिए।
बहुत सारे कारणों है ...
कि आपके वास्तुकला के लिए बेहतर है: एक समारोह में उन्हें और रिटर्न की उम्मीद परिणाम के साथ पैरामीटर, काम लेता है। इस तरह से आप इसका पुन: उपयोग कर सकते हैं और अपना कोड व्यवस्थित कर सकते हैं।
unit testing के लिए यह बेहतर है, तो आप आसानी से जांच सकते हैं कि आपका फ़ंक्शन अपेक्षित परिणाम लौटाता है या नहीं।
आम तौर पर कंप्यूटर प्रोग्रामिंग में बोलना एक फ़ंक्शन कोड की पुन: प्रयोज्य इकाई है जो कुछ इनपुट (कुछ भी नहीं) लेता है और एक मान देता है।
कुछ भाषाओं में प्रक्रियाओं नामक कार्यों के समान संरचनाएं होती हैं और ये कोड के पुन: प्रयोज्य टुकड़े होते हैं जो कुछ इनपुट (कुछ भी नहीं) लेते हैं और कुछ गतिविधि करते हैं लेकिन परिणाम नहीं देते हैं।
हालांकि कुछ भाषाओं में बाद में एक वाक्य रचनात्मक निर्माण और प्रक्रियाओं को कार्यान्वित करने के लिए उपयोग नहीं किया जा सकता है। तो आप यहां ऐसे कार्य प्राप्त करते हैं जहां आप परिणाम को अनदेखा करते हैं। कुछ भाषाओं में वास्तव में किसी फ़ंक्शन से कुछ वापस करने के लिए कोड को मजबूर करने की आवश्यकता नहीं हो सकती है (यानी वे फ़ंक्शंस का उपयोग करके प्रक्रियाओं को लागू करते हैं)।
तो यदि आपके पास केवल आपके विकल्प के रूप में उत्तरार्द्ध है, तो आप तर्क दे सकते हैं कि यह काम करने से चीजों को वापस करने का अच्छा अभ्यास है। प्राथमिक कारण यह है कि हालांकि कार्य को किसी प्रक्रिया की तरह इस्तेमाल किया जा सकता है - कॉलर इसे फ़ंक्शन की तरह कॉल कर सकता है और परिणाम के साथ काम करने की अपेक्षा करता है। याद रखें कि टेस्ट कोड प्राथमिक उपयोग केस है और यह इस सम्मेलन का पालन करने का एकमात्र कारण हो सकता है।
व्यक्तिगत रूप से मुझे लगता है कि सम्मेलन उत्तर है। जो कुछ भी आपके लिए सबसे अच्छा काम करता है, लेकिन हमेशा ऐसा करने की कोशिश करें, और यदि आपको अलग-अलग करने की आवश्यकता है - उपयोगकर्ता को जानने के तरीकों को ढूंढें।
इसके अलावा: लचीलापन। एक समारोह के अंदर echo
आईएनजी बनाम return
आईएनजी पर विचार करें। कहें, कहें, एक फ़ंक्शन से true
या false
लौटा, आप संशोधित कर सकते हैं कि दृश्यों में चीजों को कई तरीकों से कैसे प्रदर्शित किया जाता है। एक स्ट्रिंग प्रतिध्वनि होने से आपको यह लचीलापन नहीं मिलता है।
यह पुराने प्रोग्रामिंग की विरासत है। फोर्ट्रान जैसी पुरानी भाषाओं में आपको हमेशा एक प्रकार यानी int, float, bool आदि के साथ कुछ वापस लौटना पड़ता था क्योंकि सी आप एक "शून्य" प्रकार के साथ वापस आ सकते हैं, और यदि आप निर्दिष्ट नहीं करते हैं तो यह अधिकांश सी फ़ंक्शंस में डिफ़ॉल्ट है रिटर्न स्टेटमेंट, यह अंत में शून्य के साथ आता है। उदाहरण के लिए जावा में आपको रिटर्न प्रकार निर्दिष्ट करना होगा और फिर उस प्रकार के साथ वापस जाना होगा। आप कुछ भी वापस जाने के लिए नहीं करना चाहते हैं, तो आप 'शून्य' प्रकार का उपयोग करें:
//This works
public void boo() {
return;
}
//This gets you an error
public int boo() {
return;
}
//This gets you an error too, because you must specify a type for any function in Java
public boo() {
return;
}
तो ही है, जैसी Lix कहा अधिक है, अगर आप के साथ वापसी के लिए कुछ है, है न। अधिकांश कार्यात्मक कार्यक्रमों में आपके फ़ंक्शन या तो डेटा, या सही/झूठी अंकन सफलता या विफलता के साथ वापस आ सकते हैं। कई प्रणालियों में एक फ़ंक्शन एक int को सफलता या '1' या '-1' जैसी विफलता को वापस कर सकता है। यूनिक्स शैल प्रोग्राम इसका उपयोग करते हैं।
PHP जैसी अन्य भाषाओं में आपको कुछ भी वापस करने की आवश्यकता नहीं है, लेकिन पृष्ठभूमि में PHP अभी भी आपके कार्य में लौटाए गए मान के रूप में 'शून्य' प्रकार को जोड़ता है, आपको बस इसे स्पष्ट रूप से लिखना नहीं है।
आशा इस मदद करता है
जो शून्य के बदले सभी रिटर्न 0 को समझाएगा, मैं हाल ही में देख रहा हूं। – Steinin
कुछ पूर्व भाषाओं में प्रक्रियाएं और कार्य थे। प्रक्रियाओं ने कुछ भी नहीं लौटाया (उन्होंने अभी कुछ किया)। कार्यों ने कुछ वापस कर दिया। मुझे लगता है कि किसी ने फैसला किया है कि दोनों के पास अनावश्यक था क्योंकि एक समारोह केवल शून्य हो सकता है (जैसा कि सी में उपयोग किया जाता है)। मैंने डेटाबेस में डेटा स्टोर करने के लिए अभी एक त्वरित फ़ंक्शन लिखा है। चूंकि डेटा को कई स्तरों में फ़िल्टर किया गया था, इसलिए त्रुटि की बाधा नगण्य थी, फिर भी, मैंने फ़ंक्शन में एक चेतावनी शामिल की, जो किसी त्रुटि पर प्रतिबिंबित करेगी, इसलिए त्रुटि त्रुटि को भी वापस करना आवश्यक नहीं था। (यह एक इन-हाउस साइट है, जो सार्वजनिक उपयोग के लिए नहीं होगी) इसलिए फ़ंक्शन वापस करने से पूरी तरह से अनावश्यक था।
चूंकि सवाल यह था कि हमें हमेशा एक मूल्य वापस क्यों करना चाहिए, यह नहीं है कि मूल्य वापस करने के लिए कभी-कभी अच्छा क्यों होता है, लेकिन मांग करने के लिए हमें क्या कारण मौजूद है, हमें हमेशा एक मूल्य वापस करना चाहिए, और हमेशा वापसी का कोई वैध कारण नहीं है एक समारोह से एक मूल्य।
- 1. हमें क्यों जारी करना चाहिए?
- 2. अज्ञात फ़ंक्शन हमेशा एक मूल्य
- 3. क्या हमें हमेशा अपवाद पकड़ना चाहिए, इसे लपेटना चाहिए और इसे पास करना चाहिए?
- 4. हमें एनजी-क्लिक क्यों चाहिए?
- 5. हमें FSharpFunc.Adapt का उपयोग कब करना चाहिए?
- 6. हमें कक्षा का उपयोग कब करना चाहिए और जब हमें
- 7. हमें सी # में अक्षर का उपयोग क्यों करना चाहिए?
- 8. हमें जावास्क्रिप्ट में ++ का उपयोग क्यों नहीं करना चाहिए?
- 9. क्या हमें यूनिट परीक्षण लॉगिंग करना चाहिए?
- 10. क्या हमें बिज़टॉक/ईएसबी पेश करना चाहिए?
- 11. हमें कक्षा या फ़ंक्शन (सी ++) के अंदर केवल 'स्थिर' का उपयोग क्यों करना चाहिए?
- 12. हमें हडोप पासवर्ड रहित एसएसएच क्यों चाहिए?
- 13. क्या हमें कक्षा में हमेशा एक डिफ़ॉल्ट कन्स्ट्रक्टर शामिल करना चाहिए?
- 14. क्या हमें MySQL से PostgreSQL में कनवर्ट करना चाहिए?
- 15. हमें HTTP GET, PUT, POST से कुछ और क्यों चाहिए?
- 16. हमें x86 पर zone_highmem क्यों चाहिए?
- 17. एमवीसी: हमें "नियंत्रक" की आवश्यकता क्यों है, या हमें इस पैटर्न का उपयोग कब करना चाहिए?
- 18. एक फ़ंक्शन का उपयोग करना चाहिए: शून्य वापस करें ;?
- 19. हमें EntityManagerFactory को कब बंद करना चाहिए?
- 20. क्या हमें <base href = "" /> का उपयोग करना चाहिए?
- 21. हमेशा सकारात्मक मूल्य
- 22. एसपीएल बनाम ऐरे: हमें एसपीएल का उपयोग कब करना चाहिए और हमें PHP में ऐरे का उपयोग कब करना चाहिए?
- 23. हमें std :: error_code संगत एपीआई को कैसे कार्यान्वित करना चाहिए?
- 24. क्या हमें देश की सूची को सॉर्ट करना चाहिए?
- 25. क्या मुझे सफल फ़ंक्शन के लिए 0 या 1 वापस करना चाहिए?
- 26. हमें उदाहरण का उपयोग कब करना चाहिए और
- 27. हमेशा इंटरफ़ेस डिज़ाइन में कक्षा में एक पॉइंटर वापस करना चाहिए?
- 28. UIButton - क्या हमें रिलीज़ करना चाहिए या नहीं?
- 29. सिस्टम.currentTimeMillis हमेशा एक मूल्य> = पिछली कॉल वापस करेगा?
- 30. हमें कितनी बार एप्लिकेशन पूल रीसायकल करना चाहिए?
क्या करने के विरोध में? – Duniyadnd
आरटीएफएम: http://php.net/manual/en/function.return.php – diEcho
@diEcho - मैन्युअल के लिए यह लिंक वास्तव में इस प्रश्न का उत्तर नहीं देता है ... – Lix