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

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

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

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

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

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

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

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

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

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

भाषाएँ

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

यह भी देखें

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

बाहरी संबंध

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