রেকর্ড (কম্পিউটার বিজ্ঞান)

কম্পিউটার বিজ্ঞানে **রেকর্ড** হচ্ছে (**স্টাকচার**, **স্ট্রাক্ট**, বা **যৌগিক ডেটা** নামেও পরিচিত) মৌলিক ডেটা গঠন বা স্ট্রাকচার। একটি ডেটাবেস বা স্প্রেডশীটে রেকর্ডগুলিকে সাধারণত "সারি" বলা হয়।

রেকর্ড হচ্ছে  সাধারণত নির্দিষ্ট সংখ্যার এবং ক্রমে সম্ভাব্য বিভিন্ন ধরনের ডাটার ক্ষেত্রগুলোর সমস্টি বা সংগ্রহ। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এ একটি রেকর্ডের ক্ষেত্রগুলিকে সদস্য বা মেম্বার বলা যেতে পারে। ক্ষেত্রগুলোকে উপাদান বা ইলিমেন্টসও বলা যেতে পারে, যদিও এতে সংগ্রহের উপাদানগুলোর সাথে সংশয়ের ঝুঁকি থাকে।

উদাহরণস্বরূপ, একটি তারিখের রেকর্ড সাংখ্যিক বছর ক্ষেত্র দিয়ে জমা থাকতে পারে, মাস অংশটি স্ট্রিং এবং একটি সাংখ্যিক দিন-মাস-মাস এর মত আচরণ করে। একজন কর্মী রেকর্ডে নাম, বেতন এবং পদমর্যাদা থাকতে পারে।  এই বিবেচনায়, একটি বৃত্তের রেকর্ডে একটি কেন্দ্র ও একটি ব্যাসার্ধ থাকতের পারে, কেন্দ্র নিজেই *x *ও *y* স্থানাঙ্কসহ একটি পয়েন্ট রেকর্ড হিসাবে প্রতিনিধিত্ব করতে পারে।

রেকর্ডকে অ্যারে থেকে পৃথক করা হয়, যেখানে এর ক্ষেত্রের সংখ্যা প্রতীকস্বরুপ নির্দিস্ট থাকে, প্রতিটি ক্ষেত্রের একটি নাম থাকে এবং প্রতিটি ক্ষেত্র ভিন্ন ধরনের হতে পারে।

একটি রেকর্ড টাইপ একধরনের ডাটা টাইপ যা মান এবং ভচলক বর্ণনা করে। অধিকাংশ আধুনিক কম্পিউটার ভাষা প্রোগ্রামারকে নতুন রেকর্ডের টাইপগুলি নির্ধারণ করতে দেয়। সংজ্ঞাটি প্রতিটি ক্ষেত্রের ডেটা টাইপ এবং একটি সনাক্তকারী (নাম বা লেবেল) নির্দিষ্ট করে, যার মাধ্যমে এতে অধিগমন করা যায়। টাইপ তত্ত্ব, প্রোডাক্ট টাইপ (কোন ক্ষেত্রের নাম নেই) সাধারণত তাদের সরলতার কারণে পছন্দ করা হয়, তবে উপযুক্ত রেকর্ডের টাইপগুলি ভাষারূপে চর্চিত করা হয়, যেমনঃ এফ-সাব। যেহেতু টাইপ-তাত্ত্বিক রেকর্ডগুলির মধ্যে ডেটা ছাড়াও প্রথম শ্রেণীর ফাংশন-টাইপ করা ক্ষেত্র থাকতে পারে, তারা অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং-এ অনেক বৈশিষ্ট্য প্রকাশ করতে পারেন।

রেকর্ড প্রধান মেমরি ও মাস স্টোরেজ ডিভাইস যেমনঃ ম্যাগনেটিক টেপ বা হার্ড ডিস্ক সহ যেকোন স্টোরেজ মধ্যমে বিদ্যমান থাকতে পারে। রেকর্ড বেশিরভাগ ডেটা স্ট্রাকচারের একটি মৌলিক উপাদান, বিশেষ করে সংযুক্ত ডাটা স্ট্রাকচারে। অনেক কম্পিউটার ফাইল লজিক্যাল রেকর্ডের অ্যারে হিসাবে সংগঠিত হয়, কখনো কখনো দক্ষতার জন্য বৃহত্তর ভৌত রেকর্ড বা ব্লক মধ্যে গ্রুপ করে থাকে।

একটি ফাংশন বা পদ্ধতির পরামিতিগুলো কখনো কখনো একটি রেকর্ড চলকের ক্ষেত্র হিসাবে দৃশ্যমান হতে পারে এবং আর্গুমেন্টটি ফাংশন অতিক্রম করলে রেকর্ড মান হিসাবে দেখা যেতে পারে যা কল করার সময়ে চলক থেকে নির্ধারিত হয়। এছাড়া কল স্ট্যাকের মধ্যে প্রায়ই পদ্ধতি কল বাস্তবায়ন ব্যবহৃত হয়, যেখানে প্রতিটি লিখা একটি অ্যাক্টিভেশন রেকর্ড বা কল ফ্রেম, পদ্ধতি পরামিতি এবং স্থানীয় চলক ধারণকারী, ফেরত ঠিকানা, এবং অন্যান্য অভ্যন্তরীণ ক্ষেত্র।

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ভাষাতে অবজেক্ট একটি প্রয়োজনীয় রেকর্ড যা সেই রেকর্ডটি পরিচালনা করার বিশেষ পদ্ধতিতে ধারণ করে এবং অবজেক্টের ধরন রেকর্ডের ধরনের উন্নতিসাধন করে। প্রকৃতপক্ষে অধিকাংশ অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং-এ রেকর্ড বস্তুর শুধু বিশেষ ক্ষেত্র এবং যেগুলো প্লেইন ওল্ড ডাটা স্ট্রাকচার (PODSs) নামে পরিচিত, OO বৈশিষ্ট্যগুলি ব্যবহার করে এমন অবজেক্টের বিপরীতে।

রেকর্ড একটি গাণিতিক টাপল কম্পিউটার এনালগ হিসাবে দেখা যেতে পারে, যদিও টাপল রেকর্ড হিসেবে বিবেচ্য হতে পারে বা নাও হতে পারে এবং তদ্বিপরীতভাবে। যা নিয়মানীতি এবং নির্দিষ্ট প্রোগ্রামিং ভাষা উপর নির্ভর করে। একই ভাবে একটি রেকর্ড টাইপ দুটি বা তার বেশি গাণিতিক সেটের কার্টিসিয়ান গুণনীয়কের কম্পিউটার ভাষা এনালগ হিসাবে দেখা যেতে পারে, অথবা একটি নির্দিষ্ট ভাষায় একটি বিমূর্ত ধরনের পণ্য বাস্তবায়নে।

## চাবি
একটি রেকর্ডের শূন্য বা অধিক কী (চাবি) থাকতে পারে। রেকর্ডে একটি কী একটি ক্ষেত্র বা ক্ষেত্রের সেট, যা শনাক্তকারী হিসাবে কাজ করে। একটি একক কী কে প্রায়ই প্রাথমিক কী বা সাধারণভাবে রেকর্ড কী বলা হয়। উদাহরণস্বরূপ একজন কর্মচারীর ফাইলে কর্মী নম্বর, নাম, বিভাগ, এবং বেতন থাকতে পারে। প্রতিষ্ঠানের কর্মী নম্বর হবে অনন্য এবং প্রাথমিক কী হবে। স্টোরেজ মমাধ্যম এবং ফাইল প্রতিষ্ঠানের উপর নির্ভর করে কর্মী সংখ্যা বর্ণানুক্রমিক তালিকা প্রস্তুত করা যেতে পারে, দ্রুততর অনুসন্ধান করতে একটি পৃথক ফাইলের মধ্যেও সংরক্ষণ করা হয়। বিভাগ কোড অনন্য নাও হতে পারে; এটি তালিকা করা যেতে পারে যেখানে এটি একটি অপ্রধান কী, অথবা বিকল্প কী হিসাবে বিবেচিত হবে। তালিকাভুক্ত না হলে পুরো কর্মী ফাইলে একটি নির্দিষ্ট বিভাগের সমস্ত কর্মচারীদের তালিকা তৈরি করতে স্ক্যান করতে হবে। বেতনের ক্ষেত্র সাধারণত একটি কী ব্যবহারযোগ্য হিসেবে বিবেচিত হবে না। একটি ফাইল ডিজাইন করার সময় সূচকটি একটি উৎপাদক হিসেবে বিবেচিত হবে।

## ইতিহাস
থাম্ব|১৯৮০ সালে মার্কিন যুক্তরাষ্ট্রের জনসংখ্যা জার্নাল পত্র
রেকর্ডের ধারণা দূরবর্তী সময় থেকে হিসাবরক্ষণে ব্যবহৃত বিভিন্ন ধরনের টেবিল এবং খতিয়ানসমূহ থেকে সনাক্ত করা যেতে পারে। কম্পিউটার বিজ্ঞানের রেকর্ডের আধুনিক ধারণা সুনির্দিষ্ট প্রকারের ধরন এবং আকারের ক্ষেত্রগুলির সাথে নিয়ে ইতোমধ্যে ১৯ শতকে নিখুঁতভাবে যান্ত্রিক ক্যাল্কুলেটরে যেমনঃ ব্যাবেজের এনলাইটিক্যাল ইঞ্জিনে প্রয়োগ করা হয়েছিল।

তথ্য মূল মেশিনে পাঠযোগ্য মাধ্যম হিসেবে সংরক্ষণ করতে ১৮৯০ সালে যুক্তরাস্ট্রের আদমশুমারিতে পাঞ্চ কার্ড ব্যবহৃত হয়, যেখানে প্রত্যকটি পাঞ্চ কার্ড ছিল একটি একক রেকর্ড। বিংশ শতাব্দীর প্রথমার্ধে রেকর্ডগুলি খুব ভালভাবে প্রতিষ্ঠিত হয়েছিল, যখন অধিকাংশ ডাটা প্রসেসিং পঞ্চড কার্ড ব্যবহার করে করা হয়েছিল। সাধারণত একটি ডাটা ফাইলের প্রতিটি রেকর্ড এক পাঞ্চ কার্ডে রেকর্ড করা হয়, যেখানে নির্দিস্ট কলাম নির্দিস্ট ক্ষেত্রের জন্য নির্ধারিত করা থাকে। সাধারনত রেকর্ড ছিল ছোট্ট একটি একক, যা বহিরাগত স্টোরেজ থেকে পড়া যেত (যেমন কার্ড রিডার, টেপ বা ডিস্ক)।

বেশিরভাগ যান্ত্রিক ভাষা প্রয়োগ এবং গোড়ার দিকের অ্যাসেম্বলি ভাষার রেকর্ডগুলির জন্য বিশেষ পদবিন্যাস ছিল না, কিন্তু ধারণাটি উপলব্ধ ছিল (এবং ব্যাপকভাবে ব্যবহৃত) সূচক নিবন্ধন, পরোক্ষ এড্রেসিং এবং স্ব-পরিবর্তনকারী কোডে ব্যবহারের মাধ্যমে। গোড়ার দিকে আইবিএম ১৬২০ এর হার্ডওয়্যার রেকর্ড এবং ক্ষেত্র সীমাবদ্ধকরণের জন্য সমর্থন করত, এবং এ ধরনের রেকর্ডের অনুলিপি করার জন্য বিশেষ নির্দেশাবলী ছিল।

গোড়ার দিকে ফাইল বাছাই এবং সারসংক্ষেপ করা, রেকর্ড এবং ক্ষেত্র ধারণার মূলে ছিল, যেমনঃ আইবিএম রিপোর্ট প্রোগ্রাম জেনারেটর (আরপিজি)।

রেকর্ডের ধরনকে সমর্থন করে প্রথম বহুবিস্তৃত প্রোগ্রামিং ভাষা ছিল কোবোল,  এবং এর রেকর্ড সংজ্ঞার্থ সুবিধা সে সময়ে বেশ পরিশীলিত ছিল। ভাষাটি আলফা নিউমেরিক, পূর্ণ সখ্যা এবং অসীম ও নির্ভূলভাবে ভগ্নাংশঘটিত ক্ষেত্র এবং ক্ষেত্র যা স্বয়ংক্রিয়ভাবে তাদের জন্য নির্ধারিত মান বিন্যাসের মত (যেমনঃ মুদ্রার চিহ্ন, দশমিক পয়েন্ট এবং ডিজিট গ্রুপ বিভাজকগুলির সন্নিবেশ) এক জাতীয় রেকর্ডগুলোকে সংজ্ঞার্থ করতে পারে। প্রতিটি ফাইল একটি রেকর্ড চলকের সাথে সম্পর্কযুক্ত, যেখানে ডাটা পড়া বা লিখিত রূপে থাকে। কোবোল `MOVE` `CORRESPONDING` বিবৃতি সরবাহ করা মাধ্যমে নাম অনুযায়ী দুটি রেকর্ড সংশ্লিষ্ট ক্ষেত্রঅনুযায়ী তাদের নির্ধারিত করতে পারে।

শুরুর দিকের ভাষাগুলো যেমনঃ ফোরট্রান (ফোরট্রান ৪ পর্যন্ত) এবং আলগোল ৬০ সাংখ্যিক গণনার জন্য তৈরি বা বিকশিত করা হত, এগুলো রেকর্ড ধরনগুলো সমর্থন করত না; কিন্তু এগুলোর পরবর্তি সংস্করণ যেমন ফোরট্রান ৭৭ এবং আলগোল ৬৮ তা করত। মূল লিম্প প্রোগ্রামিং ভাষাতেও রেকর্ডের অভাব ছিল, কিন্তু এর *এস এক্সপ্রেশন* পর্যাপ্ত প্রতিনিধিত্বমূলক নির্দেশনা দিতে পারত। প্যাসকেল (প্রোগ্রামিং ভাষা) ছিল এ ধরনের ভাষাগুলির মধ্যে প্রথম, যা রেকর্ডের ধরনগুলোকে অন্য মৌলিক ধরনগুলির সাথে একটি যৌক্তিক সামঞ্জস্যপূর্ণ পদ্ধতিতে সম্পূর্ণভাবে সংহত করে। কোবোল- শৈলী ছিল রেকর্ডের জন্য উপলব্ধ পিএল/১ (প্রোগ্রামিং ল্যাঙ্গুয়েজ ১) প্রোগ্রামিং ভাষা। সি প্রোগ্রামিং ভাষা প্রাথমিকভাবে রেকর্ড ধারণাটিকে একটি ধরনের টেমপ্লেট হিসেবে প্রদান করে (`struct`), যা একটি সত্য রেকর্ড ডাটা টাইপের পরিবর্তে মেমরি এলাকার উপরে স্থাপন করা যেতে পারে। শেষ পর্যন্ত দ্বিতীয়টি প্রদান করা হয়েছিল (`typedef` ঘোষণার মাধ্যমে), কিন্তু দুটি ধারণা এখনো ভাষাটিতে বৈশিষ্ট্যপূর্ণ। প্যাসকেলের পরে উদ্ভাবিত বেশির ভাগ ভাষা (যেমন অ্যাডা, মডুলা, এবং জাভা) রেকর্ডকে সমর্থন করে।

## ক্রিয়াপ্রণালী
* প্রতিটি ক্ষেত্রের অবস্থান, ধরন এবং (সম্ভাব্য) নাম সহ একটি নতুন রেকর্ডের নমুনা ঘোষণা করা;
* প্রদত্ত রেকর্ড টাইপ নমুনা হিসেবে চলক এবং মান ঘোষণা;
* প্রদত্ত ক্ষেত্রের মান থেকে এবং (কখনো কখনো) প্রদত্ত ক্ষেত্রের নাম থেকে রেকর্ড মান তৈরি করা;
* একটি রেকর্ডের স্পষ্ট নাম দিয়ে ক্ষেত্র নির্বাচন;
* রেকর্ড ভেরিয়েবলে একটি রেকর্ড মান বণ্টন;
* সমতার জন্য দুটি রেকর্ডের মধ্যে তুলনা;
* রেকর্ডের জন্য একটি আদর্শ হ্যাশ মান গণনা।

একটি রেকর্ড মান থেকে একটি ক্ষেত্রের নির্বাচনের মাধ্যমে একটি মান প্রকাশ করে।

কিছু ভাষা একটি রেকর্ডের সমস্ত ক্ষেত্রগুলি গণনা করতে পারে এমন সুবিধা প্রদান করে, অথবা অন্তত যে ক্ষেত্রগুলোর উল্লেখ করা আছে। ডিবার্গার, গার্বেজ কালেক্টর এবং ক্রমিকীকরণের মতো নির্দিষ্ট পরিষেবাগুলি বাস্তবায়নের জন্য এই সুবিধাটি প্রয়োজন। এটির জন্য কিছু ধরনের পলিমরফিজম নমুনার প্রয়োজন হয়।

রেকর্ড সাবোটিং সহ পদ্ধতিগুলোর সাথে রেকর্ড প্রকারের মানের ক্রিয়াকলাপগুলিও অন্তর্ভুক্ত করতে পারে:
* নতুন ক্ষেত্রের মান নির্ধারণ, রেকর্ডে একটি নতুন ক্ষেত্র যোগ করা।
* রেকর্ড থেকে একটি ক্ষেত্র অপসারণ।

এই ধরনের বিন্যাসে একটি নির্দিষ্ট ধরনের রেকর্ড বোঝায় যে একটি নির্দিষ্ট ক্ষেত্রের সেট উপস্থিত রয়েছে, কিন্তু সেই ধরনের মানগুলিতে অতিরিক্ত ক্ষেত্র থাকতে পারে। *x*, *y* ও *z* ক্ষেত্র বিশিস্ট একটি রেকর্ড একইভাবে  *x* ও *y* এবং  *x*, *y* ও *r* ক্ষেত্র বিশিস্ট রেকর্ডের অন্তর্গত। যুক্তিটি হচ্ছে যে একটি ফাংশনে (*x*, *y* *z*) রেকর্ডকে পার করে যায় তখন সেটি একটি (*x* *y*) রেকর্ডকে আর্গুমেন্ট হিসেবে প্রত্যাশা করে, যেহেতু সেই ফাংশনটি রেকর্ডের মধ্যে প্রয়োজনীয় সব ক্ষেত্র খুঁজে পাব। প্রোগ্রামিং ভাষার কার্যক্রমে বাস্তবায়নের উপায়গুলো এমন পরিবর্তনশীলতার কারণে সমস্যায় পড়তে পারে, কিন্তু বিষয়টি অধিক তাত্ত্বিক প্রসঙ্গে রেকর্ডের প্রকারগুলির কেন্দ্রীয় প্রকৃতিনির্দেশক।

### বিভাজন এবং তুলনা
অধিকাংশ ভাষা একই ধরনের রেকর্ডগুলোর মধ্যে (একই ক্রম ও একই ক্ষেত্রের নমুনা এবং নামগুলোসহ) কার্য সম্পাদন অনুমোদন করে। যাইহোক ভাষার উপর নির্ভর করে, আলাদাভাবে সংজ্ঞায়িত দুটি রেকর্ড ডেটা প্রকারকে স্বতন্ত্র ধরনের হিসাবে বিবেচনা করা যেতে পারে এমনকি তাদের একই ক্ষেত্র থাকলেও।

রেকর্ড মধ্যে তাদের অবস্থানের দ্বারা সংশ্লিষ্ট ক্ষেত্রের চলকের সঙ্গে প্রতিটি ক্ষেত্রের মান সমন্বয়ের মাধ্যমে কিছু ভাষার রেকর্ডগুলির (যার ক্ষেত্রগুলির বিভিন্ন নাম রয়েছে) মধ্যে কার্য সম্পাদনের অনুমতি দিতে পারে। যার ফলে উদাণস্বরূপ `real` ও `imag` নামক ক্ষেত্র বিশিস্ট একটি জটিল সংখ্যাকে  `X` ও `Y` ক্ষেত্র বিশিস্ট ২ডি পয়েন্ট রেকর্ড চলক সম্পাদনা আরোপিত করা যেতে পারে।  অপরদিকে দুটি অপারেন্ড তথাপি ক্ষেত্রের ধরনগুলো একই ক্রমে থাকা প্রয়োজন। কিছু ভাষাতে সংশ্লিষ্ট ধরনের একই আকার এবং এনকোডিং এরও প্রয়োজন হতে পারে, যাতে সমগ্র রেকর্ড একটি নিখুঁত বিট স্ট্রিং হিসাবে বরাদ্দ করা যেতে পারে। এই বিষয়ে অন্যান্য ভাষাগুলো আরও নমনীয় হতে পারে এবং শুধুমাত্র প্রতিটি মান ক্ষেত্র আইনানুসারে সংশ্লিষ্ট চলকের ক্ষেত্রের জন্য নির্ধারিত করার প্রয়োজন হতে পারে। যার ফলে উদাণস্বরূপ একটি সংক্ষিপ্ত পূর্ণসংখ্যা ক্ষেত্রকে একটি দীর্ঘ পূর্ণসংখ্যা ক্ষেত্রে নির্ধারিত করা যেতে পারে অথবা বিপরীতভাবেও হতে পারে।

অন্য ভাষাগুলো (যেমন কোবোল) ক্ষেত্র ও মানগুলোকে তাদের অবস্থানের চেয়ে নামগুলো দিয়ে মেলাতে পারে।

এই একই সম্ভাবনার সমতার জন্য দুটি রেকর্ড মান তুলনা প্রযোজ্য। এছাড়া তুলনামূলক পৃথক ক্ষেত্রের লিক্সোগ্রাফিক ক্রম ব্যবহার করে কিছু ভাষা ক্রম তুলনার অনুমতি দিতে পারে ('')।

পিএল/আই পূর্ববর্তী ধরনের উভয় কার্যের এবং গঠন অভিব্যক্তির অনুমতি দেয়, যেমনঃ `a = a+1;`, যেখানে "a" একটি রেকর্ড, বা পিএল/আই-এ পরিভাষার অবয়ব।

### আলগোল ৬৮ এর বিভাজক ক্ষেত্র নির্বাচন
আলগোল ৬৮ এ যদি `Pts` রেকর্ডের একটি বিন্যাস হয়, প্রতিটি পূর্ণসংখ্যা ক্ষেত্রের `X` ও `Y` সাথে নিয়ে পূর্ণসংখ্যার একটি বিন্যাস `X` ও `Y` লিখা যেতে পারে, এর মধ্যে রয়েছে `Y` ক্ষেত্রের `Pts` এর সকল উপাদান। যার ফলে বর্ণিত `Pts[3].Y := 7` ও `Pts.Y[3] := 7` এর একই প্রভাব থাকতে পারে।

### প্যাসকেল এর "সঙ্গে" বিবৃতি
প্যাসকেল প্রোগ্রামিং ভাষায় নির্দেশ `with R do S` নির্দেশ ক্রম `S` কার্যকর করতে পারতো, যেন রেকর্ডের `R` সকল ক্ষেত্র চলক হিসেবে ঘোষণা করা হত। তাই `Pt.X := 5; Pt.Y := Pt.X + 3` পরিবর্তে `with Pt do begin X := 5; Y := X + 3 end` লিখা যাত।

## মেমরিতে উপস্থাপনা
প্রোগ্রামিং ভাষার উপর নির্ভর করে মেমোরির রেকর্ডগুলি উপস্থাপনায় পরিবর্তিত হয়। সাধারণত ক্ষেত্রগুলি মেমরিতে পরপর অবস্থানগুলিতে সংরক্ষণ করা হয়, যে ক্রমে সেগুলোকে রেকর্ডের ধরন হিসেবে ঘোষিত করা হয়। আসলে এই দুই বা ততোধিক ক্ষেত্রর ফলাফল মেমোরি একই শব্দ মধ্যে সংরক্ষিত হতে পারে; এই বৈশিষ্ট্য প্রায়ই একটি শব্দের নির্দিষ্ট বিট অধিগত করতে সিস্টেম প্রোগ্রামিং-এ ব্যবহার করা হয়। অন্যদিকে অধিকাংশ কম্পাইলার প্যাডিং ক্ষেত্র যোগ করে, যা বেশিরভাগ প্রোগ্রামারের অগোচরে থাকে, যাতে মেশিনের ভাষার দ্বারা আচ্ছাদন প্রান্তিককরণ সীমাবদ্ধতা মেনে চলতে পারে। যেখানে একটি ফ্লোটিং পয়েন্ট ক্ষেত্র অবশ্যই একটি শব্দের মধ্যেে থাকে।

কিছু ভাষা রেকর্ডকে ক্ষেত্রগুলোকে (এবং সম্ভবত তাদের নাম ও/বা ধরন) নির্দেশ করে এড্রেসগুলোর সন্নিবেশ তৈরি করে। অবজেক্ট-ভিত্তিক ভাষার অবজেক্টগুলি প্রায়ই অধিকতর জটিল উপায়ে প্রয়োগ করা হয়, বিশেষ করে ভাষাগুলি যা একাধিক শ্রেণী উত্তরাধিকারের অনুমতি দেয়।

## স্বনির্ধারিত রেকর্ড
*স্বনির্ধারিত রেকর্ড* এক ধরনের রেকর্ড যার রেকর্ডের ধরন চিহ্নিত করার জন্য তথ্য থাকে এবং সেই রেকর্ডের মাঝে তথ্য স্থাপন করতে পারে। এটি উপাদানের পরিণাম ধারণ করতে পারে; উপাদানগুলি যাতে কোনও ক্রমে সংরক্ষণ করা যায় বা বাদ দেওয়া যেতে পারে। অন্যভাবে রেকর্ডের বিভিন্ন উপাদান, প্রতিটি উপাদান সনাক্তকারী সহ সাধারণভাবে অন্য কোন ক্রমে একে অপরকে অনুসরণ করতে পারে।

## উদাহরণ
নিচে রেকর্ডের কিছু উদাহরণ দেখানো হল:
* পিএল/আই:
```text
declare 1 date,
            2 year  fixed binary,
            2 month fixed binary,
            2 day   fixed binary;
```

* সি:
```c
struct date {
   int year;
   int month;
   int day;
};
```

* গো:
```go
type Date struct {
   year: int,
   month: time.Month,
   day: int,
}
```

* রাস্ট:
```rust
struct Date {
   year: u32,
   month: u32,
   day: u32,
}
```

* হ্যাসকেল:
```haskell
data Date = Date { year :: Integer
                 , month :: Integer
                 , day :: Integer
                 }
```


## আরও দেখুন

## তথ্যসূত্র

বিষয়শ্রেণী:উপাত্তের ধরন