প্রোগ্রামিংয়ের মৌলিক ধারণা/ডেটা ম্যানিপুলেশন
সংজ্ঞা, একটি উদাহরণ এবং প্রাধান্য ব্যাখ্যাসহ এক্সপ্রেশনের পরিচিতি।
পরিচিতি
[সম্পাদনা]একক মানগুলোর নিজস্ব গুরুত্ব রয়েছে; তবে, আমাদের এমন একটি পদ্ধতির প্রয়োজন যা এই মানগুলোকে প্রক্রিয়াকরণ বা মান-পরিবর্তনের জন্য ব্যবহার করতে পারে। বিজ্ঞানীরা চেয়েছিলেন এমন একটি নির্ভুল যন্ত্র যা মানসমূহ প্রক্রিয়াকরণ করতে পারে। তারা এমন একটি যন্ত্র চেয়েছিলেন যা সংখ্যা প্রক্রিয়াকরণ করতে পারে বা উত্তর হিসাব করতে পারে (অর্থাৎ, উত্তর গণনা করতে পারে)। ১৯৫০ সালের আগে অভিধানগুলোতে “কম্পিউটার” শব্দের সংজ্ঞা ছিল “যারা গণনা করে এমন মানুষ”। তাই, ডেটা প্রক্রিয়াকরণ বোঝাতে ব্যবহৃত সকল পরিভাষাই মূলত গাণিতিক ভিত্তিক। পাশাপাশি, দুটি মৌলিক ডেটা টাইপ শ্রেণি (ইন্টিজার পরিবার এবং ফ্লোটিং-পয়েন্ট পরিবার) সম্পূর্ণরূপে সংখ্যামূলক মান নিয়ে গঠিত।
সংজ্ঞাসমূহ
[সম্পাদনা]- অভিব্যক্তি (expression)
- একটি বৈধ অনুক্রম যার মধ্যে অপারেন্ড এবং অপারেটর থাকে এবং যা একটি একক মানে রূপান্তরিত হয় (বা নির্ণীত হয়)।
- অপারেটর (operator)
- একটি নির্দিষ্ট প্রোগ্রামিং ভাষার সিনট্যাক্স অনুযায়ী চিহ্ন (সাধারণত একটি প্রতীক) যা এক বা একাধিক অপারেন্ডের উপর কার্য সম্পাদনের নির্দেশ দেয়।
- অপারেন্ড (operand)
- একটি মান যার উপর অপারেটর কার্য করে।
- অগ্রাধিকার (precedence)
- নির্ধারণ করে কোন অপারেটর আগে অপারেন্ডের উপর কাজ করবে।
- সমবাহিতা (associativity)
- একই অগ্রাধিকারের একাধিক অপারেটর থাকলে, তারা কোন ক্রমে অপারেন্ডের উপর কার্য করবে তা নির্ধারণ করে।
- নির্ণয় (evaluation)
- অপারেটরগুলোর অপারেন্ডের উপর কার্য সম্পাদন করে একক মানে উপনীত হওয়ার প্রক্রিয়া।
- বন্ধনী (parentheses)
- একটি অভিব্যক্তিতে নির্ণয়ের ক্রম পরিবর্তন করে। প্রথমে বন্ধনীর ভিতরের অংশ নির্ণয় করা হয়।
একটি অভিব্যক্তির উদাহরণ ও নির্ণয় প্রক্রিয়া
[সম্পাদনা]চলুন একটি উদাহরণ দেখি: 2 + 3 * 4 + 5 — এটি আমাদের অভিব্যক্তি, কিন্তু এর মান কত?
- এখানে + প্রতীকটি যোগফল বোঝায় এবং * প্রতীকটি গুণ বোঝায় — এগুলো আমাদের অপারেটর
- মানগুলো হল 2, 3, 4 এবং 5 — এগুলো আমাদের অপারেন্ড
- অগ্রাধিকার (precedence) অনুযায়ী গুণফল যোগফলের চেয়ে আগে নির্ণয় হয়
- তাই আমরা প্রথমে 3 * 4 নির্ণয় করি, যার মান হয় ১২
- এখন আমাদের অভিব্যক্তি দাঁড়ায়: 2 + 12 + 5
- সমবাহিতা (associativity) নিয়ম অনুযায়ী যোগফল বাম থেকে ডানে নির্ণয় হয়, তাই আমরা প্রথমে 2 + 12 করি, পাই ১৪
- এখন আমাদের অভিব্যক্তি দাঁড়ায়: 14 + 5
- অবশেষে, আমরা 14 + 5 নির্ণয় করি এবং পাই ১৯ — এটাই সম্পূর্ণ অভিব্যক্তির মান
বন্ধনী ব্যবহারে ফলাফল বদলে যেতে পারে। যেমন: (2 + 3) * (4 + 5) নির্ণয় করলে ফলাফল হবে ৪৫।
আবার, (2 + 3) * 4 + 5 নির্ণয় করলে ফলাফল হবে ২৫।
অপারেটরের অগ্রাধিকার তালিকা
[সম্পাদনা]প্রতিটি প্রোগ্রামিং ভাষার কিছু নির্দিষ্ট নিয়ম থাকে যা অপারেটরের অগ্রাধিকার (precedence) ও সমবাহিতা (associativity) নির্ধারণ করে। এই নিয়মগুলো প্রায়ই সেই নিয়মের অনুসরণ করে যা আমরা ছোটবেলায় শিখেছি—যেমন: গুণ ও ভাগ, যোগ ও বিয়োগের আগে হয়। এই নিয়ম এখনো কার্যকর। তবে অগ্রাধিকার নিয়ম ভাষাভেদে পরিবর্তিত হতে পারে। আপনি যেই প্রোগ্রামিং ভাষা ব্যবহার করছেন, তার নির্দিষ্ট অপারেটর অগ্রাধিকার চার্ট দেখে নেওয়া উচিত। এটি সাধারণত “Precedence of Operators Chart” নামে পরিচিত। অভিব্যক্তি বিশ্লেষণ করার সময় প্রয়োজনে এই চার্টটি দেখে নেওয়া উচিত।
একটি সঠিক অভিব্যক্তি গঠিত হয় অপারেন্ড(গুলি) ও অপারেটর(গুলি) নিয়ে যেগুলো সঠিকভাবে সাজানো হয়। এখানে (গুলি) কেন আছে? কারণ অপারেটরের ধরন অনুযায়ী অপারেন্ডের সংখ্যা ভিন্ন হতে পারে:
- একক অপারেটর (Unary) – শুধুমাত্র একটি অপারেন্ডের উপর কাজ করে
- দ্বৈত অপারেটর (Binary) – অপারেটরের দুই পাশে একটি করে অপারেন্ড থাকে
- ত্রৈধ অপারেটর (Trinary) – দুইটি অপারেটর চিহ্ন দ্বারা তিনটি অপারেন্ড আলাদা করা হয়
অধিকাংশ অপারেটরই দ্বৈত অপারেটর। C++ ভাষায় কেবল একটি ত্রৈধ অপারেটর আছে — তা হলো শর্তমূলক (conditional) অপারেটর। সব ইউনারি অপারেটর অপারেন্ডের বাম পাশে থাকে, শুধুমাত্র পোস্টফিক্স ইনক্রিমেন্ট ও পোস্টফিক্স ডিক্রিমেন্ট ব্যতিক্রম। কিছু অগ্রাধিকার চার্টে কোন অপারেটর ইউনারি বা ত্রৈধ তা উল্লেখ থাকে, আর বাকি সব অপারেটর ধরে নেওয়া হয় দ্বৈত।