डेटा-संचालित प्रोग्रामिंग

कंप्यूटर प्रोग्रामिंग में, डेटा-संचालित प्रोग्रामिंग एक प्रोग्रामिंग प्रतिमान है जिसमें प्रोग्राम स्टेटमेंट उठाए जाने वाले चरणों के अनुक्रम को परिभाषित करने के बजाय मिलान किए जाने वाले डेटा और आवश्यक प्रसंस्करण का वर्णन करता है। डेटा-संचालित भाषाओं के मानक उदाहरण टेक्स्ट-प्रोसेसिंग भाषाएँ sed और AWK हैं, और दस्तावेज़ परिवर्तन भाषा XSLT, जहां डेटा एक आगत प्रवाह  में लाइनों का एक अनुक्रम है - इन्हें लाइन-ओरिएंटेड भाषाओं के रूप में भी जाना जाता है - और पैटर्न मिलान मुख्य रूप से नियमित अभिव्यक्तियों या लाइन नंबरों के माध्यम से किया जाता है।

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

अमूर्त डेटा प्रकार डिज़ाइन विधियों को ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग  में अपनाने से डेटा-संचालित डिज़ाइन प्राप्त होता है। इस प्रकार के डिज़ाइन का उपयोग कभी-कभी सॉफ़्टवेयर के एक टुकड़े की अवधारणा के दौरान कक्षाओं को परिभाषित करने के लिए ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में किया जाता है।

अनुप्रयोग
डेटा-संचालित प्रोग्रामिंग आमतौर पर संरचित डेटा की स्ट्रीम पर फ़िल्टरिंग, ट्रांसफ़ॉर्मिंग, एकत्रीकरण (जैसे कंप्यूटिंग सांख्यिकी) या अन्य प्रोग्रामों को कॉल करने के लिए लागू की जाती है। विशिष्ट धाराओं में कंप्यूटर डेटा लॉगिंग, सीमांकक-पृथक मान या ईमेल संदेश शामिल हैं, विशेष रूप से ईमेल फ़िल्टरिंग के लिए। उदाहरण के लिए, एक AWK प्रोग्राम इनपुट के रूप में लॉग स्टेटमेंट की एक स्ट्रीम ले सकता है, और उदाहरण के लिए सभी को कंसोल पर भेज सकता है, WARNING से शुरू होने वाले स्टेटमेंट को WARNING फ़ाइल में लिख सकता है, और यदि कोई लाइन ERROR से शुरू होती है तो sysadmin को एक ईमेल भेज सकता है। यह यह भी रिकॉर्ड कर सकता है कि प्रतिदिन कितनी चेतावनियाँ लॉग की जाती हैं। वैकल्पिक रूप से, कोई सीमांकक-पृथक मूल्यों की धाराओं को संसाधित कर सकता है, प्रत्येक पंक्ति या एकत्रित लाइनों को संसाधित कर सकता है, जैसे कि योग या अधिकतम। ईमेल में, promail जैसी भाषा कुछ ईमेल पर मिलान करने के लिए शर्तों को निर्दिष्ट कर सकती है, और क्या कार्रवाई करनी है (डिलीवर, बाउंस, त्यागें, अग्रेषित, आदि)।

कुछ डेटा-संचालित भाषाएँ ट्यूरिंग-पूर्ण हैं, जैसे AWK और यहां तक ​​कि sed, जबकि अन्य जानबूझकर बहुत सीमित हैं, विशेष रूप से फ़िल्टरिंग के लिए। उत्तरार्द्ध का एक चरम उदाहरण pcap है, जिसमें केवल फ़िल्टरिंग शामिल है, जिसमें एकमात्र क्रिया "कैप्चर" है। कम अत्यंत, छलनी (मेल फ़िल्टरिंग भाषा) में फ़िल्टर और क्रियाएं होती हैं, लेकिन आधार मानक में कोई चर या लूप नहीं होता है, केवल स्टेटलेस फ़िल्टरिंग स्टेटमेंट की अनुमति देता है: प्रत्येक इनपुट तत्व को स्वतंत्र रूप से संसाधित किया जाता है। वेरिएबल स्थिति की अनुमति देते हैं, जो ऐसे संचालन की अनुमति देते हैं जो एक से अधिक इनपुट तत्वों पर निर्भर करते हैं, जैसे एकत्रीकरण (इनपुट का योग) या थ्रॉटलिंग प्रक्रिया (कंप्यूटिंग) (प्रत्येक प्रेषक से प्रति घंटे अधिकतम 5 मेल की अनुमति देना, या बार-बार लॉग संदेशों को सीमित करना)।

डेटा-संचालित भाषाओं में अक्सर एक डिफ़ॉल्ट क्रिया होती है: यदि कोई शर्त मेल नहीं खाती है, तो लाइन-ओरिएंटेड भाषाएं लाइन को प्रिंट कर सकती हैं (जैसे कि sed में), या एक संदेश वितरित कर सकती हैं (जैसा कि छलनी में)। कुछ अनुप्रयोगों में, जैसे कि फ़िल्टरिंग, मिलान विशेष रूप से किया जा सकता है (इसलिए केवल पहला मिलान कथन), जबकि अन्य मामलों में सभी मिलान कथन लागू होते हैं। किसी भी मामले में, किसी भी पैटर्न से मेल खाने में विफलता डिफ़ॉल्ट व्यवहार हो सकती है या इसे एक त्रुटि के रूप में देखा जा सकता है, जिसे अंत में कैच-ऑल स्टेटमेंट द्वारा पकड़ा जा सकता है।

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

जबकि डेटा-संचालित डिज़ाइन डेटा और कार्यक्षमता के युग्मन को रोकता है, कुछ मामलों में, डेटा-संचालित प्रोग्रामिंग खराब वस्तु-उन्मुख डिज़ाइन को जन्म देती है, खासकर जब अधिक अमूर्त डेटा से निपटते हैं। ऐसा इसलिए है क्योंकि विशुद्ध रूप से डेटा-संचालित ऑब्जेक्ट या इकाई को डेटा प्रतिनिधित्व के तरीके से परिभाषित किया जाता है। वस्तु की संरचना को बदलने का कोई भी प्रयास उस पर निर्भर कार्यों को तुरंत तोड़ देगा।

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

भाषाएँ

 * अरे * ओज़ (प्रोग्रामिंग भाषा)
 * पर्ल - AWK और sed की तरह डेटा-संचालित प्रोग्रामिंग पर्ल द्वारा समर्थित एक प्रतिमान है
 * सेड
 * लुआ (प्रोग्रामिंग भाषा)
 * क्लोजर (प्रोग्रामिंग भाषा)
 * टैब (भाषा)
 * एफडीएम (सॉफ्टवेयर)
 * मेल प्राप्त करने का स्थान
 * प्रोमेल
 * छलनी (मेल फ़िल्टरिंग भाषा)
 * बुनियादी
 * एक्सएसएलटी

यह भी देखें

 * डेटा-निर्देशित प्रोग्रामिंग
 * बैकस-नौर फॉर्म

बाहरी संबंध

 * "The important part is moving program logic away from hardwired control structures and into data."