Data-driven programming
कंप्यूटर प्रोग्रामिंग में, डेटा-संचालित प्रोग्रामिंग एक प्रोग्रामिंग प्रतिमान है जिसमें प्रोग्राम स्टेटमेंट लेने के लिए चरणों के अनुक्रम को परिभाषित करने के बजाय मिलान किए जाने वाले डेटा और आवश्यक प्रसंस्करण का वर्णन करते हैं। डेटा-संचालित भाषाओं के मानक उदाहरण हैं टेक्स्ट-प्रोसेसिंग लैंग्वेज सेड और एडब्ल्यूके, और दस्तावेज़ परिवर्तन भाषा एक्सएसएलटी, जहां डेटा एक इनपुट स्ट्रीम में लाइनों का एक अनुक्रम है-इस प्रकार इन्हें लाइन-ओरिएंटेड लैंग्वेज के रूप में भी जाना जाता है-और पैटर्न मिलान मुख्य रूप से नियमित अभिव्यक्तियों या लाइन नंबरों के माध्यम से किया जाता है। संबंधित प्रतिमान डेटा-संचालित प्रोग्रामिंग घटना-संचालित प्रोग्रामिंग के समान है, जिसमें दोनों को पैटर्न मिलान और परिणामी प्रसंस्करण के रूप में संरचित किया जाता है, और आमतौर पर एक मुख्य लूप द्वारा लागू किया जाता है, हालांकि वे आमतौर पर विभिन्न डोमेन पर लागू होते हैं। कंडीशन/एक्शन मॉडल भी एस्पेक्ट-ओरिएंटेड प्रोग्रामिंग के समान है, जहाँ जब एक जॉइन पॉइंट (कंडीशन) तक पहुँच जाता है, तो एक पॉइंटकट (एक्शन) निष्पादित किया जाता है। इसी तरह के प्रतिमान का उपयोग डीट्रेस जैसे कुछ अनुरेखण ढांचे में किया जाता है, जहां एक जांच (उपकरण बिंदु) और संबंधित कार्यों को सूचीबद्ध करता है, जो स्थिति संतुष्ट होने पर निष्पादित होते हैं। अमूर्त डेटा प्रकार डिजाइन विधियों को ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के लिए अनुकूलित करने से डेटा-संचालित डिजाइन में परिणाम मिलता है। सॉफ्टवेयर की अवधारणा के दौरान वर्गों को परिभाषित करने के लिए इस प्रकार के डिजाइन का उपयोग कभी-कभी ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में किया जाता है। अनुप्रयोग डेटा-संचालित प्रोग्रामिंग को आम तौर पर संरचित डेटा की धाराओं पर, फ़िल्टरिंग, परिवर्तन, एकत्रीकरण (जैसे कंप्यूटिंग सांख्यिकी), या अन्य कार्यक्रमों को कॉल करने के लिए लागू किया जाता है। विशिष्ट धाराओं में लॉग फाइल, सीमांकित-पृथक मान, या ईमेल संदेश शामिल हैं, विशेष रूप से ईमेल फ़िल्टरिंग के लिए। उदाहरण के लिए, एक ए. डब्ल्यू. के. प्रोग्राम लॉग स्टेटमेंट की एक धारा को इनपुट के रूप में ले सकता है, और उदाहरण के लिए सभी को कंसोल पर भेज सकता है, चेतावनी से शुरू करके "चेतावनी" फ़ाइल में लिख सकता है, और यदि कोई पंक्ति "त्रुटि" से शुरू होती है तो एक sysadmin को एक ईमेल भेज सकता है। यह यह भी रिकॉर्ड कर सकता है कि प्रति दिन कितनी चेतावनियां दर्ज की जाती हैं। वैकल्पिक रूप से, कोई भी परिसीमक से अलग किए गए मूल्यों की धाराओं को संसाधित कर सकता है, प्रत्येक पंक्ति या समग्र रेखाओं को संसाधित कर सकता है, जैसे कि योग या अधिकतम। ईमेल में, प्रोकमेल जैसी भाषा कुछ ईमेलों पर मिलान करने के लिए शर्तों को निर्दिष्ट कर सकती है, और क्या कार्रवाई करनी है (डिलीवर, बाउंस, डिस्कार्ड, फॉरवर्ड, आदि)। कुछ डेटा-संचालित भाषाएँ ट्यूरिंग-पूर्ण हैं, जैसे कि एडब्ल्यूके और यहां तक कि सेड, जबकि अन्य जानबूझकर बहुत सीमित हैं, विशेष रूप से फ़िल्टरिंग के लिए। उत्तरार्द्ध का एक चरम उदाहरण पी. सी. ए. पी. है, जिसमें केवल फ़िल्टरिंग होती है, जिसमें एकमात्र क्रिया "कैप्चर" होती है। कम अत्यधिक, छलनी में फिल्टर और क्रियाएँ होती हैं, लेकिन आधार मानक में कोई चर या लूप नहीं होते हैं, केवल स्टेटलेस फ़िल्टरिंग बयानों की अनुमति देते हैंः प्रत्येक इनपुट तत्व को स्वतंत्र रूप से संसाधित किया जाता है। चर राज्य की अनुमति देते हैं, जो उन कार्यों की अनुमति देते हैं जो एक से अधिक इनपुट तत्व पर निर्भर करते हैं, जैसे कि एकत्रीकरण (इनपुट का योग) या थ्रॉटलिंग (प्रत्येक प्रेषक से प्रति घंटे अधिकतम 5 मेल की अनुमति देते हैं, या बार-बार लॉग संदेशों को सीमित करते हैं)। डेटा-संचालित भाषाओं में अक्सर एक डिफ़ॉल्ट क्रिया होती हैः यदि कोई शर्त मेल नहीं खाती है, तो रेखा-उन्मुख भाषाएँ पंक्ति को प्रिंट कर सकती हैं (जैसा कि सेड में है), या एक संदेश (जैसा कि चलनी में है) दे सकती हैं। कुछ अनुप्रयोगों में, जैसे कि फ़िल्टरिंग, मिलान विशेष रूप से किया जा सकता है (इसलिए केवल पहले मिलान कथन), जबकि अन्य मामलों में सभी मिलान कथन लागू किए जाते हैं। किसी भी मामले में, किसी भी पैटर्न से मेल खाने में विफलता "डिफ़ॉल्ट व्यवहार" हो सकती है या इसे एक त्रुटि के रूप में देखा जा सकता है, जिसे अंत में एक कैच-ऑल स्टेटमेंट द्वारा पकड़ा जा सकता है। लाभ और मुद्दे जबकि कार्यान्वयन के बीच लाभ और मुद्दे भिन्न हो सकते हैं, इस प्रतिमान के साथ कुछ बड़े संभावित लाभ और समस्याएं हैं। कार्यात्मकता के लिए बस यह आवश्यक है कि वह उन चरों के अमूर्त डेटा प्रकार को जाने जिनके साथ वह काम कर रहा है। समान डेटा फ़ील्ड वाली सभी वस्तुओं पर कार्य और इंटरफेस का उपयोग किया जा सकता है, उदाहरण के लिए वस्तु की "स्थिति"। डेटा को वरीयता के अनुसार वस्तुओं या "संस्थाओं" में समूहीकृत किया जा सकता है जिसका कोई परिणाम नहीं होता है। जबकि डेटा-संचालित डिज़ाइन डेटा और कार्यक्षमता के युग्मन को रोकता है, कुछ मामलों में, डेटा-संचालित प्रोग्रामिंग को खराब ऑब्जेक्ट-ओरिएंटेड डिज़ाइन की ओर ले जाने का तर्क दिया गया है, विशेष रूप से जब अधिक अमूर्त डेटा के साथ काम किया जाता है। ऐसा इसलिए है क्योंकि विशुद्ध रूप से डेटा-संचालित वस्तु या इकाई को उसके प्रतिनिधित्व के तरीके से परिभाषित किया जाता है। वस्तु की संरचना को बदलने का कोई भी प्रयास उस पर निर्भर कार्यों को तुरंत तोड़ देगा। उदाहरण के लिए, वाहन चलाने की दिशाओं को चौराहों (दो चौराहों) की एक श्रृंखला के रूप में दर्शाया जा सकता है जहां चालक को दाएं या बाएं मुड़ना चाहिए। यदि एक प्रतिच्छेदन (संयुक्त राज्य अमेरिका में) को ज़िप कोड (5 अंकों की संख्या) और दो सड़कों के नामों (पाठ के तार) द्वारा डेटा में दर्शाया जाता है, तो एक शहर जहां सड़कें कई बार प्रतिच्छेदन करती हैं, वहां बग दिखाई दे सकते हैं। हालांकि इस उदाहरण को अधिक सरल बनाया जा सकता है, सॉफ्टवेयर इंजीनियरिंग में डेटा का पुनर्गठन एक काफी आम समस्या है, या तो बग को खत्म करने, दक्षता बढ़ाने या नई सुविधाओं का समर्थन करने के लिए। भाषाएँ ए. डब्ल्यू. के. ओज़ पर्ल-ए. डब्ल्यू. के. और एस. ई. डी. में डेटा-संचालित प्रोग्रामिंग एक प्रतिमान है जो पर्ल सेड लुआ क्लोज़र टैब (भाषा) एफ. डी. एम. मेलड्रॉप प्रोकमेल सीव बेसिक एक्स. एस. एल. टी. द्वारा समर्थित है। प्रोग्रामिंग प्रतिमान