घोषणात्मक बनाम इंपेरेटिव
एक प्रोग्रामिंग प्रतिमान कंप्यूटर प्रोग्रामिंग की एक मौलिक शैली है। चार मुख्य प्रतिमान हैं: अनिवार्य, घोषणात्मक, क्रियात्मक (जिसे घोषित प्रतिमान का सबसेट माना जाता है) और वस्तु-उन्मुख।
घोषणात्मक प्रोग्रामिंग : एक प्रोग्रामिंग प्रतिमान है जो अपने नियंत्रण प्रवाह (कैसे करते हैं) का वर्णन किए बिना एक संगणना के तर्क को व्यक्त करता है (क्या करें)। घोषणात्मक डोमेन विशिष्ट भाषाओं (डीएसएल) के कुछ प्रसिद्ध उदाहरणों में सीएसएस, नियमित अभिव्यक्तियाँ और एसक्यूएल का एक उपसमुच्चय शामिल हैं (उदाहरण के लिए क्वेरीज़, उदाहरण के लिए) HTML, MXML, XAML, XSLT ... जैसे कई मार्कअप भाषाएं अक्सर उपयोगी होती हैं। घोषणात्मक प्रोग्रामिंग निर्देशों के एक सेट के रूप में एक कार्यक्रम के बीच अंतर को धुंधला करने की कोशिश करता है और वांछित जवाब के बारे में एक जोर के रूप में एक कार्यक्रम।
इम्पीरेटिव प्रोग्रामिंग : एक प्रोग्रामिंग प्रतिमान है जो प्रोग्राम स्टेट को बदलने वाले कथनों के संदर्भ में गणना का वर्णन करता है। घोषणात्मक कार्यक्रमों को प्रोग्रामिंग कमांड या गणितीय अभिकथन के रूप में देखा जा सकता है।
कार्यात्मक प्रोग्रामिंग: एक प्रोग्रामिंग प्रतिमान है जो गणना को गणितीय कार्यों के मूल्यांकन के रूप में मानता है और राज्य और परस्पर डेटा से बचा जाता है। यह अनिवार्य प्रोग्रामिंग शैली के विपरीत कार्यों के आवेदन पर जोर देता है, जो राज्य में परिवर्तनों पर जोर देता है। एक शुद्ध कार्यात्मक भाषा में, जैसे हास्केल, सभी फ़ंक्शन साइड इफेक्ट्स के बिना हैं, और राज्य परिवर्तनों को केवल उन फ़ंक्शन के रूप में दर्शाया जाता है जो राज्य को बदलते हैं।
MSDN में अनिवार्य प्रोग्रामिंग का निम्नलिखित उदाहरण , संख्या 1 से 10 के माध्यम से लूप करता है, और सम संख्या को पाता है।
var numbersOneThroughTen = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//With imperative programming, we'd step through this, and decide what we want:
var evenNumbers = new List<int>();
foreach (var number in numbersOneThroughTen)
{ if (number % 2 == 0)
{
evenNumbers.Add(number);
}
}
//The following code uses declarative programming to accomplish the same thing.
// Here, we're saying "Give us everything where it's odd"
var evenNumbers = numbersOneThroughTen.Select(number => number % 2 == 0);
दोनों उदाहरण एक ही परिणाम देते हैं, और एक दूसरे से न तो बेहतर है और न ही बदतर है। पहले उदाहरण के लिए अधिक कोड की आवश्यकता होती है, लेकिन कोड परीक्षण योग्य होता है, और अनिवार्य दृष्टिकोण आपको कार्यान्वयन विवरण पर पूर्ण नियंत्रण प्रदान करता है। दूसरे उदाहरण में, कोड यकीनन अधिक पठनीय है; हालांकि, LINQ आपको पर्दे के पीछे क्या होता है, इस पर नियंत्रण नहीं देता है। आपको विश्वास होना चाहिए कि LINQ अनुरोधित परिणाम प्रदान करेगा।