Data-driven programming
কম্পিউটার প্রোগ্রামিং-এ, ডেটা-চালিত প্রোগ্রামিং হল একটি প্রোগ্রামিং দৃষ্টান্ত যেখানে প্রোগ্রামের বিবৃতিগুলি নেওয়া পদক্ষেপগুলির একটি ক্রম সংজ্ঞায়িত করার পরিবর্তে মিলিত হওয়া ডেটা এবং প্রয়োজনীয় প্রক্রিয়াকরণ বর্ণনা করে। ডেটা-চালিত ভাষাগুলির আদর্শ উদাহরণ হল টেক্সট-প্রসেসিং ভাষা সেড এবং এডব্লিউকে, এবং নথি রূপান্তর ভাষা এক্সএসএলটি, যেখানে ডেটা একটি ইনপুট স্ট্রিমের লাইনের ক্রম-এইভাবে এগুলি লাইন-ভিত্তিক ভাষা হিসাবেও পরিচিত-এবং প্যাটার্ন ম্যাচিং প্রাথমিকভাবে নিয়মিত অভিব্যক্তি বা লাইন সংখ্যার মাধ্যমে করা হয়। সম্পর্কিত দৃষ্টান্ত ডেটা-চালিত প্রোগ্রামিং ইভেন্ট-চালিত প্রোগ্রামিংয়ের অনুরূপ, যার মধ্যে উভয়ই প্যাটার্ন ম্যাচিং এবং ফলস্বরূপ প্রক্রিয়াকরণ হিসাবে কাঠামোগত এবং সাধারণত একটি প্রধান লুপ দ্বারা প্রয়োগ করা হয়, যদিও এগুলি সাধারণত বিভিন্ন ডোমেনে প্রয়োগ করা হয়। কন্ডিশন/অ্যাকশন মডেলটিও এস্পেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের অনুরূপ, যেখানে যখন একটি জয়েন পয়েন্ট (কন্ডিশন) পৌঁছায়, তখন একটি পয়েন্টকাট (অ্যাকশন) কার্যকর করা হয়। ডিট্রেসের মতো কিছু ট্রেসিং কাঠামোতে একই ধরনের দৃষ্টান্ত ব্যবহার করা হয়, যেখানে কেউ প্রোব (ইন্সট্রুমেন্টেশন পয়েন্ট) এবং সম্পর্কিত ক্রিয়াগুলি তালিকাভুক্ত করে, যা শর্তটি সন্তুষ্ট হলে কার্যকর হয়। বিমূর্ত ডেটা টাইপ ডিজাইন পদ্ধতিগুলিকে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং পদ্ধতিতে মানিয়ে নেওয়ার ফলে একটি ডেটা-চালিত নকশা তৈরি হয়। এই ধরনের নকশা কখনও কখনও অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ে সফ্টওয়্যার ধারণার সময় ক্লাসগুলি সংজ্ঞায়িত করতে ব্যবহৃত হয়। অ্যাপ্লিকেশন ডেটা-চালিত প্রোগ্রামিং সাধারণত কাঠামোগত ডেটার প্রবাহে প্রয়োগ করা হয়, ফিল্টারিং, রূপান্তর, সমষ্টি (যেমন কম্পিউটিং পরিসংখ্যান), বা অন্যান্য প্রোগ্রাম কল করার জন্য। সাধারণ স্ট্রিমগুলির মধ্যে রয়েছে লগ ফাইল, সীমানা-পৃথক মান বা ইমেল বার্তা, বিশেষত ইমেল ফিল্টারিংয়ের জন্য। উদাহরণস্বরূপ, একটি এ. ডব্লিউ. কে প্রোগ্রাম লগ স্টেটমেন্টের একটি প্রবাহকে ইনপুট হিসাবে নিতে পারে এবং উদাহরণস্বরূপ কনসোলে সমস্ত পাঠাতে পারে, একটি "সতর্কতা" ফাইলে সতর্কতা দিয়ে শুরু করে লিখতে পারে এবং যদি কোনও লাইন "ত্রুটি" দিয়ে শুরু হয় তবে একটি sysadmin-কে একটি ইমেল পাঠাতে পারে। এটি প্রতিদিন কতগুলি সতর্কতা লগ করা হয় তাও রেকর্ড করতে পারে। বিকল্পভাবে, প্রতিটি লাইন বা সমষ্টিগত লাইন, যেমন যোগফল বা সর্বোচ্চ, প্রক্রিয়াকরণ করে সীমানা-পৃথক মানগুলির প্রবাহগুলি প্রক্রিয়া করা যেতে পারে। ইমেইলে, প্রোকমেইলের মতো একটি ভাষা কিছু ইমেইলে মিল রাখার শর্ত এবং কী পদক্ষেপ নিতে হবে (ডেলিভারি, বাউন্স, ডিস্কার্ড, ফরওয়ার্ড ইত্যাদি) তা নির্দিষ্ট করতে পারে। কিছু তথ্য-চালিত ভাষা টুরিং-সম্পূর্ণ, যেমন এডব্লিউকে এবং এমনকি সেড, অন্যগুলি ইচ্ছাকৃতভাবে খুব সীমিত, বিশেষত ফিল্টারিংয়ের জন্য। পরেরটির একটি চরম উদাহরণ হল পি-ক্যাপ, যা শুধুমাত্র ফিল্টারিং নিয়ে গঠিত, যার একমাত্র ক্রিয়া হল "ক্যাপচার"। খুব কম, চালনিতে ফিল্টার এবং ক্রিয়া রয়েছে, তবে মূল মানদণ্ডে কোনও পরিবর্তনশীল বা লুপ নেই, যা কেবল স্টেটলেস ফিল্টারিং স্টেটমেন্টের অনুমতি দেয়ঃ প্রতিটি ইনপুট উপাদান স্বাধীনভাবে প্রক্রিয়া করা হয়। ভেরিয়েবলগুলি রাষ্ট্রকে অনুমতি দেয়, যা একাধিক ইনপুট উপাদানের উপর নির্ভরশীল ক্রিয়াকলাপগুলিকে অনুমতি দেয়, যেমন সমষ্টি (ইনপুটগুলি যোগ করা) বা থ্রোটলিং (প্রতিটি প্রেরকের কাছ থেকে প্রতি ঘন্টায় সর্বাধিক 5 টি মেইলের অনুমতি দেয়, বা পুনরাবৃত্ত লগ বার্তাগুলি সীমাবদ্ধ করে)। তথ্য-চালিত ভাষাগুলির প্রায়শই একটি ডিফল্ট ক্রিয়া থাকেঃ যদি কোনও শর্ত মেলে না, তবে লাইন-ভিত্তিক ভাষাগুলি লাইনটি মুদ্রণ করতে পারে (সেডের মতো), বা একটি বার্তা সরবরাহ করতে পারে (চালনিতে যেমন)। কিছু অ্যাপ্লিকেশনে, যেমন ফিল্টারিং, ম্যাচিং একচেটিয়াভাবে করা যেতে পারে (তাই শুধুমাত্র প্রথম ম্যাচিং স্টেটমেন্ট), অন্য ক্ষেত্রে সমস্ত ম্যাচিং স্টেটমেন্ট প্রয়োগ করা হয়। উভয় ক্ষেত্রেই, কোনও প্যাটার্নের সাথে মেলাতে ব্যর্থতা "ডিফল্ট আচরণ" হতে পারে বা একটি ত্রুটি হিসাবে দেখা যেতে পারে, যা শেষে একটি ক্যাচ-অল স্টেটমেন্ট দ্বারা ধরা পড়ে। সুবিধা এবং সমস্যা যদিও বাস্তবায়নের মধ্যে সুবিধা এবং সমস্যাগুলি পরিবর্তিত হতে পারে, তবে এই দৃষ্টান্তের সাথে কয়েকটি বড় সম্ভাব্য সুবিধা এবং সমস্যা রয়েছে। কার্যকারিতার জন্য কেবল প্রয়োজন যে এটি যে ভেরিয়েবলগুলির সাথে কাজ করছে তার বিমূর্ত ডেটা প্রকারটি জানে। ফাংশন এবং ইন্টারফেসগুলি একই ডেটা ক্ষেত্র সহ সমস্ত বস্তুতে ব্যবহার করা যেতে পারে, উদাহরণস্বরূপ বস্তুর "অবস্থান"। তথ্যকে পছন্দ অনুযায়ী বস্তু বা সত্তায় শ্রেণীবদ্ধ করা যেতে পারে যার কোনও ফলাফল নেই। যদিও ডেটা-চালিত নকশা ডেটা এবং কার্যকারিতার সংযোগ রোধ করে, কিছু ক্ষেত্রে ডেটা-চালিত প্রোগ্রামিং খারাপ অবজেক্ট-ওরিয়েন্টেড ডিজাইনের দিকে পরিচালিত করে বলে যুক্তি দেওয়া হয়েছে, বিশেষ করে যখন আরও বিমূর্ত ডেটা নিয়ে কাজ করা হয়। এর কারণ হল একটি বিশুদ্ধ তথ্য-চালিত বস্তু বা সত্তা এটিকে যেভাবে উপস্থাপন করা হয় তার দ্বারা সংজ্ঞায়িত করা হয়। বস্তুটির কাঠামো পরিবর্তন করার যে কোনও প্রচেষ্টা অবিলম্বে তার উপর নির্ভরশীল ফাংশনগুলিকে ভেঙে দেবে। উদাহরণস্বরূপ, গাড়ি চালানোর দিকনির্দেশকে একাধিক ছেদ (দুটি ছেদকারী রাস্তা) হিসাবে উপস্থাপন করা যেতে পারে যেখানে চালককে অবশ্যই ডান বা বাম দিকে ঘুরতে হবে। যদি একটি ছেদ (মার্কিন যুক্তরাষ্ট্রে) জিপ কোড (5-সংখ্যার সংখ্যা) এবং দুটি রাস্তার নাম (পাঠ্যের স্ট্রিং) দ্বারা ডেটাতে প্রতিনিধিত্ব করা হয়, তবে বাগ প্রদর্শিত হতে পারে যখন একটি শহর যেখানে রাস্তাগুলি একাধিকবার ছেদ করে। যদিও এই উদাহরণটি অতিরিক্ত সরলীকরণ করা যেতে পারে, তবে সফ্টওয়্যার ইঞ্জিনিয়ারিংয়ের ক্ষেত্রে তথ্য পুনর্গঠন একটি মোটামুটি সাধারণ সমস্যা, হয় বাগগুলি নির্মূল করতে, দক্ষতা বাড়াতে বা নতুন বৈশিষ্ট্যগুলিকে সমর্থন করতে। ভাষা এ. ডব্লিউ. কে. ওজ পার্ল-এ. ডব্লিউ. কে এবং সেডের মতো ডেটা-চালিত প্রোগ্রামিং হল পার্ল সেড লুয়া ক্লোজুর ট্যাব (ভাষা) এফ. ডি. এম মেলড্রপ প্রোকমেল দ্বারা সমর্থিত একটি দৃষ্টান্ত সিভ বেসিক এক্স. এস. এল. টি আরও দেখুন অ্যারে প্রোগ্রামিং ব্যাকাস-নৌর ফর্ম বাহ্যিক রেফারেন্স লিঙ্কগুলি "গুরুত্বপূর্ণ অংশটি হল প্রোগ্রাম লজিককে হার্ডওয়্যার্ড নিয়ন্ত্রণ কাঠামো থেকে দূরে এবং ডেটাতে নিয়ে যাওয়া"। প্রোগ্রামিং দৃষ্টান্ত