सवाल घोषणात्मक और प्रक्रियात्मक प्रोग्रामिंग के बीच अंतर?


मेरे साक्षात्कारों में से एक के दौरान, उन्होंने मुझसे अंतर पूछा घोषणात्मक प्रोग्रामिंग तथा प्रक्रियात्मक प्रोग्रामिंग प्रकार के।

उदाहरणों के साथ उनके बीच क्या अंतर है?

पीएस: क्या आप मुझे इन दो और ऑब्जेक्ट उन्मुख प्रोग्रामिंग के अलावा बता सकते हैं, प्रोग्रामिंग भाषाएं किस प्रकार हैं? क्योंकि वे अन्य प्रोग्रामिंग भाषाओं के बीच अंतर भी पूछ सकते हैं। और इस तरह के एक जैसे प्रश्न हैं लेकिन बहुत बिखरे हुए हैं।


76


मूल


इसी तरह का सवाल: stackoverflow.com/questions/1784664/... - daCoda
अफसोस की बात है, किसी भी उत्तर में कोई उदाहरण कोड नहीं है। - Bob Stein


जवाब:


कथात्मक

परिणाम का वर्णन करें और इसे एक ब्लैक बॉक्स के माध्यम से प्राप्त करें। इसके वीरूद्ध अनिवार्य। उदाहरण:

  • याक
  • पेड़ के ऊपर
  • एसक्यूएल
  • नियमित अभिव्यक्ति
  • लेक्रस
  • XSLT
  • मार्कअप, ट्रॉफ, सीएसएस, वीएचडीएल

प्रक्रियात्मक या प्रभावशाली

अमूर्तता की विभिन्न डिग्री पर एल्गोरिदम और प्रक्रिया चरणों का वर्णन करें।

  • सी, सबसे विरासत भाषाएँ
  • PHP, ज्यादातर
  • कुछ अर्थों में सभी प्रमुख भाषाओं में

वस्तु के उन्मुख

  • प्रक्रियात्मक श्रेणी में होना जाता है, आमतौर पर उन भाषाओं को संदर्भित करता है जो प्रकारों का एक पदानुक्रम प्रदर्शित करते हैं जो आधार विधियों से लेकर व्युत्पन्न प्रकारों के दोनों तरीकों और राज्य का उत्तराधिकारी है, लेकिन असामान्य प्रोटोटाइप-आधारित जावास्क्रिप्ट भी शामिल है। यहां अन्य श्रेणियों से एक अलग आयाम।

कार्यात्मक

आपने इसे छोड़ दिया कार्यात्मक प्रोग्रामिंग साइड इफेक्ट्स और म्यूटेबल स्टेटस के बिना कार्यों के अनुप्रयोग पर जोर देती है। उपरोक्त घोषणात्मक प्रणाली कार्यात्मक प्रोग्रामिंग के कुछ पहलुओं को प्रदर्शित करती हैं।

  • योजना
  • Erlang
  • OCaml
  • हास्केल
  • लिस्प, निर्भर करता है। (लिस्प शायद अपनी अनूठी श्रेणी का हकदार है)
  • क्लोजर, कुछ हद तक
  • रूबी, कुछ हद तक कम
  • एफ #
  • स्काला

87



मैं कार्यात्मक प्रोग्रामिंग भाषाओं की अपनी सूची में लिस्प जोड़ूंगा। - dave
आप प्रोलॉग जैसी तार्किक भाषा भी जोड़ सकते हैं। - Toon Krijthe
@ToonKrijthe, प्रोलॉग घोषणात्मक सूची में नहीं गिरेंगे? - ChronoFish
दरअसल, प्रोग्रामिंग कि describes algorithm and process steps कहा जाता है अनिवार्य प्रोग्रामिंग, जो एक सुपरटेप है प्रक्रियात्मक प्रोग्रामिंग जो "प्रक्रिया कॉल" या अन्य समान अवधारणा के आधार पर प्राप्त करती है। - minmaxavg
मुझे नहीं लगता कि कार्यात्मक प्रोग्रामिंग अनिवार्य प्रोग्रामिंग के विपरीत है। उदाहरण: सी सी में कार्यात्मक शैली कार्यक्रम लिख सकता है, भले ही सी एक "अनिवार्य" भाषा है। - djsmith


घोषणात्मक प्रोग्रामिंग वह जगह है जहां आप यह कहने के बिना क्या चाहते हैं कि यह कैसे करना है। प्रक्रियात्मक प्रोग्रामिंग के साथ, आपको परिणाम प्राप्त करने के लिए सटीक कदम निर्दिष्ट करना होगा।

उदाहरण के लिए, एसक्यूएल प्रक्रियात्मक से अधिक घोषणात्मक है, क्योंकि प्रश्न परिणाम उत्पन्न करने के लिए चरणों को निर्दिष्ट नहीं करते हैं।


55



क्या आप कृपया मुझे अन्य प्रकार की प्रोग्रामिंग भाषाओं को घोषणात्मक, प्रक्रियात्मक और ओओपी के अलावा बता सकते हैं। धन्यवाद। - Tarik
एसक्यूएल पर अच्छे उदाहरण के लिए +1। क्या हमारे पास और उदाहरण हैं? - mauris
मॉरीस: शायद प्रोग्रामिंग भाषा नहीं है, लेकिन एचटीएमएल घोषणात्मक है, क्योंकि आप जो चाहते हैं उसका वर्णन करते हैं (एक पैराग्राफ यह बिट बोल्ड में), "ड्रॉ ​​स्ट्रिंग, माप स्ट्रिंग, अग्रिम स्थिति इत्यादि लिखने के बजाय" एक और उदाहरण प्रोलॉग है, जहां एक "कार्यक्रम" तथ्यों और संबंधों / कटौती का एक घोषणात्मक सेट है, और एक प्रश्न है। प्रोलॉग इंजन क्वेरी का मूल्यांकन कैसे करता है: आपको यह बताने की आवश्यकता नहीं है कि ऐसा कैसे करें। अंत में, नियमित अभिव्यक्ति: आप मैच के परीक्षण के लिए चरणों को वर्तनी के बजाय पैटर्न का वर्णन करते हैं। - itowlson
एमएक्सएमएल (फ्लेक्स फ्रेमवर्क का हिस्सा) घोषणात्मक है: आप इसे बताते हैं कि आप अपने ऑब्जेक्ट्स / कंटेनरों को किस क्रम में प्रदर्शित करना चाहते हैं, और यह लेआउट को संभालता है कि आपने इसे क्षैतिज या लंबवत रूप से बाहर रखने के लिए कहा है या नहीं। एक्शनस्क्रिप्ट 3 ओओपी प्रतिमानों के लिए समर्थन के साथ प्रक्रियात्मक है। - Hooray Im Helping
मेकफ़ाइल एक और काफी प्रसिद्ध घोषणात्मक भाषा है - Stefano Borini


सरल शब्दों में, मेरे पास असली दुनिया का उदाहरण है जिसमें मुझे एक कप चाय चाहिए।

प्रक्रियात्मक: 

  1. रसोई में जाओ
  2. चीनी, दूध और चाय पाएं,
  3. उन्हें मिलाएं और उबलने तक आग पर गर्मी करें
  4. उसे एक कप में रखो और इसे मेरे पास लाओ

घोषणात्मक:

  1. मुझे एक कप चाय प्राप्त करें।

प्रक्रियात्मक भाषा में, आप पूरी प्रक्रिया को परिभाषित करते हैं और चरणों को कैसे प्रदान करते हैं। आप केवल आदेश प्रदान करते हैं और परिभाषित करते हैं कि प्रक्रिया कैसे की जाएगी।

घोषणात्मक भाषा में, आप केवल आदेश या ऑर्डर सेट करते हैं, और सिस्टम को इस ऑर्डर को पूरा करने के तरीके पर रहने दें। आपको यह साबित किए बिना अपने परिणाम की आवश्यकता है कि इसे कैसे किया जाना चाहिए।

सादर,


14



आपने स्पष्टीकरण में घोषणात्मक और प्रक्रियात्मक मिश्रित किया, है ना? - opncow
अपडेट किया गया। धन्यवाद। - Muhammad Zeeshan Tahir


प्रक्रियात्मक प्रोग्रामिंग:

प्रक्रियात्मक प्रोग्रामिंग में, जब प्रोग्राम शुरू होता है, तो यह निर्देशों के एक सेट का पालन करता है। निर्देश कुछ फ़ाइल या मेमोरी सामग्री के आधार पर बदल सकते हैं, लेकिन कुल मिलाकर, यह व्यापक रूप से भिन्न नहीं होता है। कार्यक्रम में इनपुट आम तौर पर वास्तविक समय में उपयोगकर्ता इनपुट से नहीं बल्कि डेटा के पूर्व-एकत्रित सेट से होता है।

घोषणात्मक प्रोग्रामिंग:

घोषणात्मक कार्यक्रम संचालित प्रोग्रामिंग में वैकल्पिक कार्यों के साथ डेटा के एक शरीर के आसपास केंद्रित होता है, कार्यक्रम इसे ले सकता है। उदाहरण के लिए, एक शब्द प्रोसेसर में प्रत्येक "ईवेंट" कोई माउस या कीबोर्ड (या फ़ाइल) परिवर्तन होता है जो डेटा को प्रभावित करता है, दस्तावेज़ (ओं)। उन्हें किसी भी क्रम में प्रदर्शन करने की आवश्यकता नहीं है। इवेंट संचालित प्रोग्रामिंग छोटे कार्यक्रमों (ईवेंट हैंडलर) का रूप लेता है जो सभी डेटा के एक सामान्य सेट पर काम करते हैं, ताकि प्रत्येक छोटा प्रोग्राम उसी डेटा का उपयोग कर सके, इस उदाहरण में दस्तावेज़।


5





प्रक्रियात्मक दृष्टिकोण में आप परिणाम प्राप्त करने के लिए अपने निर्देश को एन्कोड करते हैं। घोषणात्मक दृष्टिकोण में आप परिभाषित करते हैं कि समस्या को हल करने के ज्ञान के रूप में क्या हल किया जाना चाहिए। अच्छी तरह से देखिए प्रक्रियात्मक या घोषणात्मक दृष्टिकोण उदाहरण मैं दोनों दृष्टिकोणों में लागू किया।

जैसा कि आप उदाहरण में देखेंगे, घोषणात्मक दृष्टिकोण में, आपको समस्या को हल करने के लिए निर्देश देने की आवश्यकता नहीं है।


-2



आप ऑफ़-साइट उदाहरणों का संदर्भ दे रहे हैं जैसे कि वे यहां लिखे गए थे। अपने उत्तरों के हिस्से के रूप में अपने उदाहरण लाओ। - ChronoFish