বিষয়বস্তুতে চলুন

প্রোগ্রামিংয়ের মৌলিক ধারণা/অনুশীলন: ফাংশন

উইকিবই থেকে

অধ্যায় সারাংশ

[সম্পাদনা]

মডুলার প্রোগ্রামিং

[সম্পাদনা]

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

হায়ারার্কি বা স্ট্রাকচার চার্ট

[সম্পাদনা]

একটি প্রোগ্রামের বিভিন্ন ফাংশনের মধ্যে সম্পর্ক বা সমগ্র চিত্র উপস্থাপন করে।

ফাংশন উদাহরণ

[সম্পাদনা]

প্যারামিটার এবং আর্গুমেন্ট

[সম্পাদনা]

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

কল বাই ভ্যালু বনাম কল বাই রেফারেন্স

[সম্পাদনা]

ভাষাভেদে প্যারামিটার পাস করার দুটি পদ্ধতি রয়েছে।

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

কল বাই রেফারেন্স পদ্ধতিতে একই মেমোরি লোকেশন ব্যবহৃত হয়, অর্থাৎ কলার ফাংশনের আসল প্যারামিটার সরাসরি পাঠানো হয়। এতে ফাংশনে কোন পরিবর্তন করলে সেটি কলারেও প্রভাব ফেলে।[]

রিটার্ন স্টেটমেন্ট

[সম্পাদনা]

ফাংশনের ফলাফল ফেরত পাঠায় এবং ফাংশনটি যেখানে কল করা হয়েছিল সেই জায়গায় প্রোগ্রামের কার্যক্রম পুনরায় শুরু হয়।

void ডেটা টাইপ

[সম্পাদনা]

একটি ডেটা টাইপ যা কোনো মান বা অপারেটর ধারণ করে না এবং কিছুই উপস্থাপন করতে ব্যবহৃত হয়।

স্কোপ

[সম্পাদনা]

সোর্স কোডের যে অংশে একটি আইডেন্টিফায়ার নামকে স্বীকৃতি দেয়া হয় তাকে স্কোপ বলে।

প্রোগ্রামিং স্টাইল

[সম্পাদনা]

সোর্স কোড লেখার সময় অনুসরণীয় নিয়ম বা নির্দেশিকা সমষ্টি।

স্ট্যান্ডার্ড লাইব্রেরি

[সম্পাদনা]

এমন কিছু সাধারণ ফাংশন যেগুলোর সংজ্ঞা পূর্বেই লেখা হয়েছে এবং যেকোনো প্রোগ্রামে ব্যবহারের জন্য প্রস্তুত।

পুনরালোচনার প্রশ্নাবলি

[সম্পাদনা]

সত্য / মিথ্যা

[সম্পাদনা]

ফাংশনের নাম হিসেবে সাব-প্রোগ্রামের জন্য "ফাংশন" ছাড়াও কম্পিউটার ইন্ডাস্ট্রিতে ম্যাক্রো, প্রসিডিউর ও মডিউল শব্দগুলো ব্যবহৃত হয়। → সত্য

সাধারণভাবে ফাংশন দুটি ক্যাটাগরিতে বিভক্ত: প্রোগ্রাম কন্ট্রোল এবং নির্দিষ্ট কাজ। → সত্য

ফাংশনে অবশ্যই একটি রিটার্ন ভ্যালু থাকতে হবে। → মিথ্যা – সব ফাংশনে রিটার্ন ভ্যালু থাকতে হবে না, যদি ফাংশনটি যেখান থেকে কল করা হয়েছে সেখানে ফিরে না যায়।

হায়ারার্কি চার্ট এবং স্ট্রাকচার চার্ট মূলত একই জিনিস। → সত্য

প্রোগ্রাম কন্ট্রোল ফাংশন শুধু প্রোগ্রামকে উপবিভক্ত ও নিয়ন্ত্রণের জন্য ব্যবহৃত হয়। → সত্য

C++ এ void ডেটা টাইপ খুব কম ব্যবহৃত হয়। → মিথ্যা – void ব্যবহার হয় যদি কোন রিটার্ন ভ্যালু না দরকার হয়।

সোর্স কোডকে পাঠযোগ্য করা কেবলমাত্র নবীন প্রোগ্রামারদের জন্য ব্যবহৃত হয়। → মিথ্যা – এটি সব প্রোগ্রামারের জন্য জরুরি।

ইউজার-ডিফাইন্ড স্পেসিফিক টাস্ক ফাংশন সাধারণত ইউজার-ডিফাইন্ড লাইব্রেরিতে রাখা হয়। → সত্য

লোকাল এবং গ্লোবাল ডেটা স্টোরেজ স্কোপ ধারণার সঙ্গে সম্পর্কযুক্ত। → সত্য

ইউজার-ডিফাইন্ড স্পেসিফিক টাস্ক ফাংশনের জন্য হেডার ফাইল তৈরি করা একটি কঠিন কাজ। → মিথ্যা – কিছু অনুশীলনের মাধ্যমে এটি সহজ হয়ে যায়।

স্ট্যাক কম্পিউটারের মেমোরির একটি অংশ যেখানে ডেটা সংরক্ষণ করা হয়। → সত্য

স্ট্যান্ডার্ড লাইব্রেরি হলো নির্দিষ্ট কাজের ফাংশনের একটি সেট যা সার্বজনীন ব্যবহারের জন্য প্রোগ্রামিং ভাষায় যোগ করা হয়েছে। → সত্য

প্রোগ্রামারদের বিশ্বাস থাকা উচিত যে স্ট্যান্ডার্ড লাইব্রেরির ফাংশনগুলো ঠিকভাবে কাজ করে। → সত্য

নির্দিষ্ট কাজের ফাংশন ছাড়াই প্রোগ্রাম লেখা সহজ হবে। → মিথ্যা – সহজ প্রোগ্রামে হয়তো সম্ভব, কিন্তু জটিল প্রোগ্রামে ফাংশন অত্যন্ত গুরুত্বপূর্ণ।

প্রতিটি ফাংশনের নিজস্ব প্যারামিটার থাকতে হবে যাতে কার্যকারিতা আলাদা থাকে। → সত্য

কল বাই ভ্যালু আর্গুমেন্ট বিশ্লেষণ করে এবং মানের একটি কপি সাবরুটিনে পাঠায়। → সত্য

সব ফাংশন "Output" থেকে কল করা উচিত কারণ "Output" অন্যান্য ফাংশন থেকে তথ্য নিতে চায়। → মিথ্যা – সব ফাংশন main থেকে কল করা উচিত।

ফাংশন শুধুমাত্র একটি আউটপুট রিটার্ন করতে পারে। → সত্য – শুধুমাত্র Python একাধিক ভেরিয়েবল রিটার্ন করতে পারে।

সংক্ষিপ্ত প্রশ্নাবলি

[সম্পাদনা]

এই অধ্যায়ে দেওয়া ফাংশনের উদাহরণ প্রোগ্রামের জন্য একটি হায়ারার্কি চার্ট তৈরি করুন।

আপনি ইতোমধ্যে যেসব প্রোগ্রাম তৈরি করেছেন, সেগুলো পর্যালোচনা করে প্রোগ্রামিং ভাষার মান অনুযায়ী যেসব সমস্যা আপনার কোডে আছে তা চিহ্নিত করুন – যেমন: "ডকুমেন্টেড না", "পাঠযোগ্য না" বা অন্য কোনো ভুল।

লোকাল স্কোপ ও গ্লোবাল স্কোপের মধ্যে পার্থক্য ব্যাখ্যা করুন।

আপনি যখন এমন একটি ফাংশন তৈরি করছেন যেখানে একাধিক প্যারামিটার পাস করতে হয়, তখন ফাংশন কল করার সময় আপনি কেন একটি নির্দিষ্ট ক্রমে প্যারামিটার রাখেন তা ব্যাখ্যা করুন।

নিজের ভাষায় কল বাই ভ্যালু এবং কল বাই রেফারেন্সের মধ্যে পার্থক্য ব্যাখ্যা করুন।

void ডেটা টাইপ এবং Nothing ডেটা টাইপের মধ্যে পার্থক্য ব্যাখ্যা করুন।

একটি প্রোগ্রামে একাধিক ফাংশন থাকা main() ফাংশনের তুলনায় কেন বেশি উপকারী তা ব্যাখ্যা করুন।

কার্যক্রমসমূহ

[সম্পাদনা]

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

১. ব্যবহারকারীর কাছ থেকে কাজের ঘন্টা এবং প্রতি ঘন্টার হারের ইনপুট নিয়ে সাপ্তাহিক, মাসিক ও বার্ষিক আয় হিসেব করুন।       → আয় = ঘন্টা × হার       → মাসিক = ১২ × সাপ্তাহিক       → বার্ষিক = ৫২ × সাপ্তাহিক       [রেফারেন্স: PythonLearn: Variables, expressions, and statements]

২. ব্যবহারকারীর বর্তমান বয়স (বছরে) ইনপুট নিয়ে সেটিকে মাস, দিন, ঘন্টা ও সেকেন্ডে রূপান্তর করুন।       → ১ বছর = ১২ মাস = ৩৬৫ দিন = ৮৭৬০ ঘন্টা = ৩১৫৩৬০০০ সেকেন্ড

৩. [MathsIsFun: US Standard Lengths] পর্যালোচনা করুন।       → মাইল ইনপুট নিয়ে ইয়ার্ড, ফুট ও ইঞ্চিতে রূপান্তর করুন অথবা       → মাইল ইনপুট নিয়ে কিলোমিটার, মিটার ও সেন্টিমিটারে রূপান্তর করুন।

৪. [MathsIsFun: Area of Plane Shapes] পর্যালোচনা করুন।       → বিভিন্ন আকৃতির (শেপ) মাত্রা ইনপুট নিয়ে তাদের ক্ষেত্রফল হিসেব করুন।       → ব্যবহারকারীকে এখনই শেপ বেছে নিতে দিবেন না; একাধিক শেপের হিসাব আলাদা ফাংশনে করুন।

৫. একটি আয়তাকার ঘরের ক্ষেত্রফল নির্ণয় করুন যাতে ফ্লোর কভারিং (মেঝে ঢাকার পরিমাণ) নির্ধারণ করা যায়।       → ইনপুট: দৈর্ঘ্য ও প্রস্থ (ফুটে)।       → ১ স্কয়ার ইয়ার্ড = ৯ স্কয়ার ফুট।       → স্কয়ার ফুট → স্কয়ার ইয়ার্ডে রূপান্তর করুন।

৬. পেইন্টের পরিমাণ ও খরচ নির্ধারণের একটি প্রোগ্রাম তৈরি করুন।       ইনপুট:       → ঘরের দৈর্ঘ্য, প্রস্থ, উচ্চতা       → প্রতি গ্যালন পেইন্টের দাম       → প্রতি গ্যালন পেইন্ট কত স্কয়ার ফুট কাভার করতে পারে       প্রসেস:       → মোট দেওয়ালের ক্ষেত্রফল: 2 × দৈর্ঘ্য × উচ্চতা + 2 × প্রস্থ × উচ্চতা       → প্রয়োজনীয় গ্যালন = মোট ক্ষেত্রফল ÷ কাভারেজ       → গ্যালনের পরিমাণ উপরের দিকে পূর্ণসংখ্যায় রাউন্ড করুন: (গ্যালন + 0.9999) → int       → মোট খরচ = প্রয়োজনীয় গ্যালন × প্রতি গ্যালনের দাম

৭. [Wikipedia: Aging in dogs] পর্যালোচনা করুন।       → https://archive.org/details/cnx-org-col10621ব্যবহারকারীর কাছ থেকে কুকুরের নাম এবং মানব বছরের বয়স ইনপুট নিন।       → কুকুরের বয়স নির্ধারণ করুন: ১ মানব বছর = ৭ কুকুর বছর       → আউটপুট: উদাহরণ             > Spike is 14 years old in dog years.

রেফারেন্স

[সম্পাদনা]

cnx.org: Programming Fundamentals – A Modular Structured Approach using C++

Computer Programming

  1. cnx.org: Programming Fundamentals – A Modular Structured Approach using C++
  2. https://en.wikibooks.org/wiki/Programming_Fundamentals/Call_by_Value_vs_Call_by_Reference/