आप पूरी तरह से सही हैं: किसी फ़ंक्शन की गणना करना जो कुछ भी नहीं लौटाता है, अर्थहीन है - यदि आप गणितीय कार्यों के बारे में बात कर रहे हैं। लेकिन कई गणितीय अवधारणाओं की तरह, "फ़ंक्शंस" कई प्रोग्रामिंग भाषाओं में हैं जो केवल गणितीय कार्यों से संबंधित हैं, लेकिन कम या ज्यादा कम व्यवहार करते हैं।
मुझे विश्वास है कि पर यह भाषा गलत नहीं है: ऐसी एक भाषा Haskell है। यह एक पूरी तरह से कार्यात्मक भाषा है जिसका अर्थ है कि हास्केल फ़ंक्शन भी गणितीय फ़ंक्शन है। वास्तव में आप हास्केल कार्यों को और अधिक गणितीय-स्टाइल लिख सकते हैं, उदा।
my_tan(x) = sin(x)/cos(x) -- or (preferred): tan' x = sin x/cos x
सी ++
double my_tan(double x) { return sin(x)/cos(x); }
हालांकि, कंप्यूटर प्रोग्राम में आप नहीं बस कार्यों गणना करना चाहते हैं की तुलना में
, है न? आप अपनी स्क्रीन पर कुछ प्रदर्शित करने, नेटवर्क पर डेटा भेजने, सेंसर आदि से मूल्य पढ़ने जैसे सामान प्राप्त करना चाहते हैं .. हास्केल में, इन चीजों को अच्छी तरह से शुद्ध कार्यों से अलग किया जाता है, वे सभी तथाकथित में कार्य करते हैं IO
मोनड। उदाहरण के लिए, putStrLn
फ़ंक्शन, जो वर्णों की एक पंक्ति मुद्रित करता है, में String -> IO()
टाइप किया गया है।मतलब, यह String
को इसके तर्क के रूप में लेता है और IO
क्रिया देता है जो main
फ़ंक्शन से लागू होने पर उस स्ट्रिंग को प्रिंट करता है, और कुछ और नहीं (()
माता-पिता लगभग void
सी ++ में हैं)।
आईओ करने का यह तरीका कई फायदे हैं, लेकिन अधिकांश प्रोग्रामिंग भाषाएं अधिक मैला हैं: वे सभी आईओ करने के लिए फ़ंक्शंस को अनुमति देते हैं, और आपके प्रोग्राम की आंतरिक स्थिति को भी बदलने के लिए अनुमति देते हैं। तो सी ++ में, आप केवल void putStrLn(std::string)
फ़ंक्शन कर सकते हैं, जो स्ट्रिंग को प्रिंट करता है और कुछ भी नहीं, जो एक आईओ क्रिया "रिटर्न" करता है, लेकिन स्पष्ट रूप से आपको ऐसा नहीं बताता है। लाभ यह है कि आईओ मोनैड वास्तव में क्या है (यह बल्कि चौराहे है) के बारे में सोचते समय आपको अपने मस्तिष्क में कई नॉट्स बांधने की आवश्यकता नहीं है। इसके अलावा, यदि आपके पास वास्तव में मशीन को "प्रक्रियाओं का अनुक्रम करें, अब!" कहने की क्षमता है तो कई एल्गोरिदम को तेज़ी से चलाने के लिए कार्यान्वित किया जा सकता है! आईओ मोनड में कुछ गणना के परिणाम मांगने के बजाय।
किसी काम के लिए बहुत सी चीजें हैं, कुछ वापस करने के अलावा ... –
आप [_side effect_] (http://en.wikipedia.org/wiki/Side_effect_ (computer_science) की अवधारणा को याद कर रहे हैं)। – ildjarn
वह फ़ंक्शन कुछ भी नहीं करता है, और –