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

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

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

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

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

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

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

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

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

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

भाषाएँ

 * awk
 * ओज़
 * पर्ल– AWK और sed की तरह डेटा-संचालित प्रोग्रामिंग, पर्ल द्वारा समर्थित एक प्रतिमान है
 * एसईडी
 * लुआ[3]
 * क्लोजर[4]
 * टैब (भाषा)
 * एफडीएम
 * मेलड्रॉप
 * प्रोमेल
 * सीव
 * बेसिक
 * एक्सएसएलटी

यह भी देखें

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

बाहरी संबंध

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