शायद यह command-query separation सिद्धांत के कारण है?
सीक्यूएस ओओ और कार्यात्मक प्रोग्रामिंग शैलियों के चौराहे पर लोकप्रिय होता है, क्योंकि यह ऑब्जेक्ट विधियों के बीच एक स्पष्ट अंतर बनाता है जो साइड इफेक्ट्स (यानी, ऑब्जेक्ट को बदलता है) के बीच एक स्पष्ट अंतर बनाता है। परिवर्तनीय असाइनमेंट में सीक्यूएस को लागू करना सामान्य से अधिक ले रहा है, लेकिन एक ही विचार लागू होता है।
क्यों CQS उपयोगी है की एक छोटी चित्रण: एक List
वर्ग है कि तरीकों Sort
, Append
, First
, और Length
साथ एक काल्पनिक संकर एफ/OO भाषा पर विचार करें।
func foo(x):
var list = new List(4, -2, 3, 1)
list.Append(x)
list.Sort()
# list now holds a sorted, five-element list
var smallest = list.First()
return smallest + list.Length()
अधिक कार्यात्मक शैली में जबकि, एक अधिक होने की संभावना कुछ इस तरह लिखते थे: जरूरी OO शैली में, एक इस तरह एक समारोह में लिखने के लिए चाहते हो सकता है
func bar(x):
var list = new List(4, -2, 3, 1)
var smallest = list.Append(x).Sort().First()
# list still holds an unsorted, four-element list
return smallest + list.Length()
ये कोशिश कर होने लगते हैं एक ही काम करने के लिए, लेकिन जाहिर है कि दोनों में से एक गलत है, और तरीकों के व्यवहार के बारे में और जानने के बिना, हम कौन नहीं बता सकते हैं।
सीक्यूएस का उपयोग करते हुए, हम जोर देकर कहते हैं कि Append
और Sort
सूची में परिवर्तन करने के लिए, उन्हें इकाई प्रकार वापस करना होगा, इस प्रकार हमें दूसरे फॉर्म का उपयोग करके बग बनाने से रोकना चाहिए जब हमें नहीं करना चाहिए। दुष्प्रभावों की उपस्थिति इसलिए विधि हस्ताक्षर में अंतर्निहित हो जाती है।
डेविड पोलैक ने कुछ पहली हाथ की जानकारी पोस्ट की है, मार्टिन ओडरस्की ने टिप्पणी के जवाब में बहुत अधिक समर्थन किया है। मुझे लगता है कि कोई पोलैक के जवाब को सुरक्षित रूप से स्वीकार कर सकता है। –