मैं कुछ एफ # कोड पर काम कर रहा था और मैं स्ट्रिंग्स के सेट से यादृच्छिक स्ट्रिंग वापस करने के लिए फ़ंक्शन पर काम कर रहा था।फ़ंक्शन से एक यादृच्छिक मूल्य लौटा रहा है एक साइड इफेक्ट?
open System
let a = [|"a";"b";"c";"d"|]
let rstring (arr:string[]) =
let r = new Random()
arr.[r.Next(0,3)]
let resultstring = rstring a;;
मेरा प्रश्न यह है:: कार्यात्मक प्रोग्रामिंग की धारणा की मेरी समझ है कि यह हमेशा एक ही उत्पादन लौट जाना किसी दिए गए समारोह एक ही इनपुट हर बार है अगर है चलो कहते हैं कि मैं कुछ इस तरह था करते हैं। तो इस विशेष मामले में प्रत्येक बार एक "दुष्प्रभाव" एक अलग स्ट्रिंग वापस कर रहा है? मैं सिर्फ उत्सुक हूँ।
यदि यह एक डुप्लिकेट प्रश्न है, तो बस मुझे मूल पर इंगित करें और मैं इसे बंद कर दूंगा। मुझे यकीन नहीं है कि मैं किस खोज स्ट्रिंग का उपयोग इस से संबंधित किसी भी प्रश्न को खोजने के लिए करूंगा।
संपादित करें: सभी जानकारी के लिए धन्यवाद। ऐसा लगता है कि मैंने संदर्भित पारदर्शिता और साइड इफेक्ट्स की कमी की अवधारणाओं को स्वीकार किया। तो, मुझे सीधे अंतर पर सेट करने और आपके उत्तरों के लिए धन्यवाद के लिए धन्यवाद।
हमेशा एक ही तर्क के लिए एक ही परिणाम लौटने का मतलब वास्तव में शुद्ध होना है, साइड इफेक्ट मुक्त नहीं है (साइड इफेक्ट के लिए परिभाषाएं पहले ही पोस्ट की गई हैं)। – delnan
जब आप नाइट चुनना शुरू करते हैं, तो "साइड इफेक्ट्स" सॉफ्टवेयर में एक दिलचस्प अवधारणा नहीं है। संदर्भित पारदर्शिता और/या शुद्धता दिलचस्प/उपयोगी अवधारणाएं हैं, और यादृच्छिक/गैर-निर्धारित कार्य संदर्भित रूप से पारदर्शी नहीं हैं, और यही मायने रखता है। तो एक मायने में, ओपी गलत सवाल पूछ रहा है, या कम से कम एक दिलचस्प/उपयोगी नहीं है। शीर्षक के रूप में सवाल परिभाषाओं के बारे में nits चुनता है। सॉफ़्टवेयर के लिए महत्वपूर्ण बात यह है कि, यदि आपका फ़ंक्शन एक ही इनपुट के लिए अलग-अलग मान देता है, तो यह आपको बग की पूरी कक्षा में खुलता है। – Brian
@ डेलनान - परिभाषा के अनुसार शुद्ध कार्य के लिए कोई दुष्प्रभाव नहीं है। सिर्फ इसलिए कि एक फ़ंक्शन हमेशा एक ही परिणाम देता है, यह शुद्ध नहीं करता है। –