কার্যাবলী#
ভূমিকা#
ফাংশন হলো C++ প্রোগ্রামিংয়ের একটি মৌলিক উপাদান, যা একটি নির্দিষ্ট কাজ সম্পাদনের জন্য কোডের অংশগুলোকে পুনঃব্যবহারযোগ্য ও কার্যকর অংশে বিভক্ত করে। একটি প্রোগ্রামের মধ্যে ফাংশনকে একাধিকবার কল করা যায়, যা কোডকে সুসংগঠিত করে এবং একই কোডের পুনরাবৃত্তি এড়াতে সাহায্য করে। ফাংশন কোড ডিবাগ করাও সহজ করে তোলে।
এই পৃষ্ঠায় C++ এ ফাংশন ব্যবহারের প্রাথমিক বিষয়গুলো আলোচনা করা হয়েছে, যার মধ্যে রয়েছে:
ফাংশনের গঠন এবং সিনট্যাক্স — C++ এ কিভাবে ফাংশন লেখা হয়, যার মধ্যে রিটার্ন টাইপ, নাম এবং প্যারামিটার অন্তর্ভুক্ত।
ফাংশন প্রোটোটাইপ — প্রোটোটাইপ ফাংশন কী এবং কেন সেগুলি ব্যবহার করা হয়।
ফাংশন তৈরি এবং কল করা — কিভাবে ফাংশন তৈরি করবেন এবং আপনার প্রোগ্রাম থেকে সেগুলোকে কল করবেন।
রিটার্ন ভ্যালু — ফাংশনগুলো কীভাবে কলকারীকে ডেটা ফেরত পাঠাতে পারে।
রেফারেন্স দ্বারা পাসিং — কিভাবে ফাংশনগুলি তাদের নিজস্ব স্কোপের বাইরে ভেরিয়েবল পরিবর্তন করতে পারে।
কলব্যাক ফাংশন — কিভাবে ফাংশনগুলিকে অন্য ফাংশনে পাস করা যায় এবং ইভেন্টের প্রতিক্রিয়ায় স্বয়ংক্রিয়ভাবে কল করা যায়।
ডিফল্ট আর্গুমেন্ট সহ ফাংশন — কোনো আর্গুমেন্ট প্রদান না করা হলে প্যারামিটারগুলিকে কীভাবে ডিফল্ট মান দেওয়া যেতে পারে।
ফাংশন কাঠামো এবং সিনট্যাক্স#
C++ এ, ফাংশন অবশ্যই তার রিটার্ন টাইপ, নাম এবং প্যারামিটার সহ ঘোষণা করতে হবে। এর মৌলিক সিনট্যাক্সটি হলো:
return_type function_name(parameters) {
// Code to execute when the function is called
return result; // Optional, used to return a value
}
কার্যকরী অংশ |
বর্ণনা |
|---|---|
|
The data type that the function returns, some common options are:
|
|
ফাংশনটির নাম। |
|
ঐচ্ছিক। টাইপ করা প্যারামিটারগুলোর একটি কমা-দ্বারা-বিভক্ত তালিকা, যা |
|
ঐচ্ছিক। ফাংশন দ্বারা ফেরত দেওয়া মান। যদি ফাংশনের return_type |
দ্রষ্টব্য: একটি ফাংশনকে কল করার আগে অবশ্যই ঘোষণা করতে হবে, অথবা আপনাকে একটি ফাংশন প্রোটোটাইপ প্রদান করতে হবে।
ফাংশন প্রোটোটাইপ#
C++ এ কোড উপর থেকে নিচে পড়া হয়। এর মানে হলো, কোনো ফাংশনকে কল করার আগে সেটিকে কম্পাইলারের কাছে পরিচিত হতে হবে।
একটি ফাংশন প্রোটোটাইপ আপনাকে কোনো ফাংশনের সম্পূর্ণ কোড লেখার আগেই সেটিকে ব্যবহার করার সুযোগ দেয়। এর ফলে আপনি আপনার প্রোগ্রামের প্রায় শুরুতে main() রাখতে পারেন এবং ফাংশনের সংজ্ঞাগুলো পরে দিতে পারেন, যেখানে সেগুলো গোছানো ও পড়া সহজ হয়।
প্রোটোটাইপ ছাড়া, আপনাকে main()উপরের প্রতিটি ফাংশন সংজ্ঞায়িত করতে হবে, যা প্রজেক্ট বড় হওয়ার সাথে সাথে সেটিকে অনুসরণ করা আরও কঠিন করে তুলতে পারে।
// The function's prototype
void greeting();
int main() {
greeting();
}
// Write the function's body after
void greeting() {
Brain.Screen.print("Hello!");
}
ফাংশন সংজ্ঞায়িত করা এবং কল করা#
Functions with No Parameters#
যদি কোনো ফাংশনের ইনপুটের প্রয়োজন না হয়, তবে আপনি প্যারামিটার ছাড়াই এটি সংজ্ঞায়িত করতে পারেন। যদি ফাংশনটি কোনো মান ফেরত না দেয়, তবে রিটার্ন টাইপ হিসেবে void ব্যবহার করুন।
// Define a function to display a message
void greeting() {
Brain.Screen.print("Hello!");
}
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Call the function to display the message
greeting();
}
Functions with Parameters#
আপনি ফাংশনে প্যারামিটারও যোগ করতে পারেন, যার মাধ্যমে ফাংশনে ব্যবহারের জন্য তথ্য সরবরাহ করা যায়।
দ্রষ্টব্য: টেক্সট C-স্টাইল স্ট্রিং (const char*) অথবা C++ স্ট্রিং (std::string ) ব্যবহার করে পাস করা যেতে পারে।
// Define a function with a parameter
void namedGreeting(const char* name) {
Brain.Screen.print("Hello, %s!", name);
}
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
namedGreeting("Stranger");
}
ফেরত মান#
ফাংশন return কীওয়ার্ড ব্যবহার করে কলকারীকে ডেটা ফেরত পাঠাতে পারে। এর মাধ্যমে আপনি আউটপুটটি সংগ্রহ করে আপনার প্রোজেক্টে ব্যবহার করতে পারবেন।
// Define a function that multiplies numbers by 2
int timesTwo(int number) {
return number * 2;
}
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Display the return value
Brain.Screen.print("%d", timesTwo(2));
}
রেফারেন্সের মাধ্যমে পাশ করা#
ডিফল্টরূপে, C++ ফাংশন প্যারামিটার মান অনুসারে পাস করে, যার অর্থ ফাংশনটি মূল ভেরিয়েবল এর একটি অনুলিপি গ্রহণ করে। ফাংশনের ভিতরে করা পরিবর্তনগুলি মূল মানকে প্রভাবিত করে না।
// Add 1 to the number
void addOne(int number) {
number++;
}
int main() {
int value = 5;
addOne(value);
// "value" will still be 5
}
কোনো ফাংশনকে মূল ভেরিয়েবল পরিবর্তন করার অনুমতি দিতে, & প্রতীক ব্যবহার করে রেফারেন্স দ্বারা প্যারামিটার পাস করা যেতে পারে।
// Add 1 to the number
void addOne(int& number) {
number++;
}
int main() {
int value = 5;
addOne(value);
// "value" will now be 6
}
রেফারেন্স দ্বারা পাস করার মাধ্যমে ফাংশনগুলো কোনো মান ফেরত না দিয়েই ফাংশনের বাইরে সংজ্ঞায়িত ভেরিয়েবল আপডেট করতে পারে।
কলব্যাক ফাংশন#
কলব্যাক ফাংশন হলো এমন একটি ফাংশন যা অন্য একটি ফাংশনে পাস করা হয় এবং কোনো নির্দিষ্ট ঘটনা ঘটলে স্বয়ংক্রিয়ভাবে কল করা হয়।
বাটন চাপ বা সেন্সর আপডেটের মতো ইভেন্টের জন্য সাধারণত কলব্যাক ব্যবহার করা হয়।
আপনাকে নিজে ফাংশনটি কল করতে হয় না, বরং ইভেন্টটি ঘটলে প্রজেক্টটি আপনার হয়ে এটি কল করে দেয়।
void onPressed() {
Brain.Screen.print("Screen pressed!");
}
// Call onPressed whenever the screen is pressed
int main() {
vexcodeInit();
Brain.Screen.pressed(onPressed);
}
Callback Signatures#
প্রতিটি কলব্যাক ফাংশনকে অবশ্যই একটি নির্দিষ্ট সিগনেচার অনুসরণ করতে হবে, যা সংজ্ঞায়িত করে:
রিটার্ন টাইপ
প্যারামিটারের সংখ্যা
প্যারামিটার প্রকারগুলি
প্রয়োজনীয় সিগনেচারটি এপিআই দ্বারা নির্ধারিত হয়। কলব্যাক ফাংশনটিকে অবশ্যই এই সিগনেচারের সাথে হুবহু মিলতে হবে।
// This callback function cannot include any parameters
void callback(void);
// This callback function includes four parameters
void callback(axisType axis, double x, double y, double z);
প্যারামিটারের নামগুলো বর্ণনামূলক এবং ভিন্ন হতে পারে, কিন্তু রিটার্ন টাইপ, প্যারামিটারের ক্রম এবং প্যারামিটারের ধরন অবশ্যই হুবহু মিলতে হবে।
ডিফল্ট আর্গুমেন্ট সহ ফাংশন#
ফাংশন এক বা একাধিক প্যারামিটারের জন্য ডিফল্ট মান নির্ধারণ করতে পারে। ফাংশনটি কল করার সময় কোনো প্যারামিটারের জন্য কোনো মান প্রদান করা না হলে, একটি ডিফল্ট আর্গুমেন্ট ব্যবহৃত হয়।
ডিফল্ট আর্গুমেন্টের নিয়মাবলী:
ডিফল্ট আর্গুমেন্টগুলো অবশ্যই ফাংশনের সংজ্ঞার সর্বশেষ প্যারামিটার হতে হবে।
একবার কোনো প্যারামিটারের ডিফল্ট মান নির্ধারণ করা হলে, তার পরবর্তী সকল প্যারামিটারেরও ডিফল্ট মান থাকতে হবে।
যদি কোনো ফাংশন তার প্রোটোটাইপ এ ডিফল্ট আর্গুমেন্ট নির্দিষ্ট করে, তাহলে সেই ডিফল্ট মানগুলি ফাংশন সংজ্ঞায় আবার নির্দিষ্ট করা যাবে না।
// Required parameter first, default parameter last
void greeting(const char* name, int repeatCount = 1) {
for (int i = 0; i < repeatCount; i++) {
Brain.Screen.print("Hello, %s!", name);
Brain.Screen.newLine();
}
}
int main() {
vexcodeInit();
// Say what name to greet (V5) and
// use default value for repeatCount (1)
greeting("V5");
Brain.Screen.newLine();
// Overrides the default value to 3
greeting("V5", 3);
}