2012-09-10 12 views
5

मैं एक बड़ा प्रोग्रामिंग लड़का नहीं हूं लेकिन प्रोग्रामर से कई बार सुनता हूं कि हमें हमेशा एक समारोह से मूल्य वापस करना चाहिए। मैं कारण जानना चाहता हूं।हमें हमेशा फ़ंक्शन से मूल्य क्यों वापस करना चाहिए?

+0

क्या करने के विरोध में? – Duniyadnd

+3

आरटीएफएम: http://php.net/manual/en/function.return.php – diEcho

+6

@diEcho - मैन्युअल के लिए यह लिंक वास्तव में इस प्रश्न का उत्तर नहीं देता है ... – Lix

उत्तर

5

एक समारोह कुछ भी वापस नहीं की जरूरत है ... आप सी (++) समारोह को देखें, तो उनमें से कई नहीं है (अच्छी तरह से, स्पष्ट रूप से नहीं):

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 

पासिंग कई मामलों में जोखिम भरा माना जाता है, यही कारण है कि बाद दृष्टिकोण आम तौर पर बेहतर माना जाता है है। तो कई मामलों में कार्यों को एक मूल्य वापस करने की आवश्यकता नहीं होती है, लेकिन वे सभी समान हैं क्योंकि यह कोड को समग्र रूप से सुरक्षित बनाता है।
यही कारण है कि आप इस धारणा के तहत हैं कि कार्यों को हमेशा एक मान वापस करना चाहिए।

7

ऐसा इसलिए किया जाता है कि फ़ंक्शन के लिए एक निश्चित अंत बिंदु है। यह मुख्य रूप से पठनीयता बढ़ाने और भविष्य के प्रोग्रामर को यह समझने में मदद करने के लिए है कि आप क्या करने की कोशिश कर रहे थे।

कोई फ़ंक्शन लौटने के बारे में कोई धारणा नहीं होनी चाहिए।

5

बहुत सारे कारणों है ...

कि आपके वास्तुकला के लिए बेहतर है: एक समारोह में उन्हें और रिटर्न की उम्मीद परिणाम के साथ पैरामीटर, काम लेता है। इस तरह से आप इसका पुन: उपयोग कर सकते हैं और अपना कोड व्यवस्थित कर सकते हैं।

unit testing के लिए यह बेहतर है, तो आप आसानी से जांच सकते हैं कि आपका फ़ंक्शन अपेक्षित परिणाम लौटाता है या नहीं।

3

आम तौर पर कंप्यूटर प्रोग्रामिंग में बोलना एक फ़ंक्शन कोड की पुन: प्रयोज्य इकाई है जो कुछ इनपुट (कुछ भी नहीं) लेता है और एक मान देता है।

कुछ भाषाओं में प्रक्रियाओं नामक कार्यों के समान संरचनाएं होती हैं और ये कोड के पुन: प्रयोज्य टुकड़े होते हैं जो कुछ इनपुट (कुछ भी नहीं) लेते हैं और कुछ गतिविधि करते हैं लेकिन परिणाम नहीं देते हैं।

हालांकि कुछ भाषाओं में बाद में एक वाक्य रचनात्मक निर्माण और प्रक्रियाओं को कार्यान्वित करने के लिए उपयोग नहीं किया जा सकता है। तो आप यहां ऐसे कार्य प्राप्त करते हैं जहां आप परिणाम को अनदेखा करते हैं। कुछ भाषाओं में वास्तव में किसी फ़ंक्शन से कुछ वापस करने के लिए कोड को मजबूर करने की आवश्यकता नहीं हो सकती है (यानी वे फ़ंक्शंस का उपयोग करके प्रक्रियाओं को लागू करते हैं)।

तो यदि आपके पास केवल आपके विकल्प के रूप में उत्तरार्द्ध है, तो आप तर्क दे सकते हैं कि यह काम करने से चीजों को वापस करने का अच्छा अभ्यास है। प्राथमिक कारण यह है कि हालांकि कार्य को किसी प्रक्रिया की तरह इस्तेमाल किया जा सकता है - कॉलर इसे फ़ंक्शन की तरह कॉल कर सकता है और परिणाम के साथ काम करने की अपेक्षा करता है। याद रखें कि टेस्ट कोड प्राथमिक उपयोग केस है और यह इस सम्मेलन का पालन करने का एकमात्र कारण हो सकता है।

व्यक्तिगत रूप से मुझे लगता है कि सम्मेलन उत्तर है। जो कुछ भी आपके लिए सबसे अच्छा काम करता है, लेकिन हमेशा ऐसा करने की कोशिश करें, और यदि आपको अलग-अलग करने की आवश्यकता है - उपयोगकर्ता को जानने के तरीकों को ढूंढें।

2

इसके अलावा: लचीलापन। एक समारोह के अंदर echo आईएनजी बनाम return आईएनजी पर विचार करें। कहें, कहें, एक फ़ंक्शन से true या false लौटा, आप संशोधित कर सकते हैं कि दृश्यों में चीजों को कई तरीकों से कैसे प्रदर्शित किया जाता है। एक स्ट्रिंग प्रतिध्वनि होने से आपको यह लचीलापन नहीं मिलता है।

7

यह पुराने प्रोग्रामिंग की विरासत है। फोर्ट्रान जैसी पुरानी भाषाओं में आपको हमेशा एक प्रकार यानी 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

जो शून्य के बदले सभी रिटर्न 0 को समझाएगा, मैं हाल ही में देख रहा हूं। – Steinin

0

कुछ पूर्व भाषाओं में प्रक्रियाएं और कार्य थे। प्रक्रियाओं ने कुछ भी नहीं लौटाया (उन्होंने अभी कुछ किया)। कार्यों ने कुछ वापस कर दिया। मुझे लगता है कि किसी ने फैसला किया है कि दोनों के पास अनावश्यक था क्योंकि एक समारोह केवल शून्य हो सकता है (जैसा कि सी में उपयोग किया जाता है)। मैंने डेटाबेस में डेटा स्टोर करने के लिए अभी एक त्वरित फ़ंक्शन लिखा है। चूंकि डेटा को कई स्तरों में फ़िल्टर किया गया था, इसलिए त्रुटि की बाधा नगण्य थी, फिर भी, मैंने फ़ंक्शन में एक चेतावनी शामिल की, जो किसी त्रुटि पर प्रतिबिंबित करेगी, इसलिए त्रुटि त्रुटि को भी वापस करना आवश्यक नहीं था। (यह एक इन-हाउस साइट है, जो सार्वजनिक उपयोग के लिए नहीं होगी) इसलिए फ़ंक्शन वापस करने से पूरी तरह से अनावश्यक था।

चूंकि सवाल यह था कि हमें हमेशा एक मूल्य वापस क्यों करना चाहिए, यह नहीं है कि मूल्य वापस करने के लिए कभी-कभी अच्छा क्यों होता है, लेकिन मांग करने के लिए हमें क्या कारण मौजूद है, हमें हमेशा एक मूल्य वापस करना चाहिए, और हमेशा वापसी का कोई वैध कारण नहीं है एक समारोह से एक मूल्य।

संबंधित मुद्दे