शायद यह कमांड-क्वेरी पृथक्करण सिद्धांत के कारण है?
CQS OO और कार्यात्मक प्रोग्रामिंग शैलियों के चौराहे पर लोकप्रिय होता है, क्योंकि यह ऑब्जेक्ट मेथड के बीच एक स्पष्ट अंतर पैदा करता है जो साइड-इफेक्ट्स करते हैं या नहीं होते हैं (अर्थात, ऑब्जेक्ट को बदल देते हैं)। चर असाइनमेंट में CQS को लागू करना इसे सामान्य से आगे ले जा रहा है, लेकिन एक ही विचार लागू होता है।
क्यों CQS उपयोगी है की एक छोटी चित्रण: एक साथ एक काल्पनिक संकर एफ / OO भाषा पर विचार 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()
जबकि अधिक कार्यात्मक शैली में, एक व्यक्ति इस तरह से कुछ लिखने की संभावना करेगा:
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()
ये एक ही काम करने की कोशिश कर रहे हैं, लेकिन जाहिर है कि दोनों में से एक गलत है, और तरीकों के व्यवहार के बारे में अधिक जानने के बिना, हम यह नहीं बता सकते कि कौन सा है।
CQS का उपयोग करते हुए, हालांकि, हम इस बात पर जोर देंगे कि यदि Append
और Sort
सूची में परिवर्तन किया गया है, तो उन्हें यूनिट प्रकार वापस करना होगा, इस प्रकार हमें दूसरे फॉर्म का उपयोग करके बग को पैदा करने से रोकना चाहिए जब हमें नहीं करना चाहिए। इसलिए साइड इफेक्ट की उपस्थिति भी विधि हस्ताक्षर में निहित हो जाती है।