তারা কি মন্দ? হতে পারে. গ্লোবালগুলির সাথে সমস্যাটি হ'ল এগুলি যে কোনও সময়ে কোনও নিষেধাজ্ঞা ছাড়াই কোনও ফাংশন বা কোডের টুকরোগুলি কার্যকর করা হয়ে অ্যাক্সেস এবং সংশোধন করা যেতে পারে। এর ফলে এমন পরিস্থিতিতে পড়তে পারে যা বলা যাক, পিছনে থাকা এবং ব্যাখ্যা করা শক্ত। গ্লোবালগুলির পরিমাণ হ্রাস করা, যদি সম্ভব হয় তবে পরিমাণটি শূন্যের দিকে ফিরিয়ে আনা, তাই কাঙ্ক্ষিত।
এগুলি কি এড়ানো যায়? প্রায় সর্বদা হ্যাঁ। আরডুইনোর সমস্যা হ'ল তারা আপনাকে এই দুটি ফাংশন পদ্ধতির জন্য জোর করে, যাতে তারা আপনাকে setup()
এবং আপনাকে ধরে নেয় loop()
। এই বিশেষ ক্ষেত্রে আপনার এই দুটি ফাংশনের কলার ফাংশনের সুযোগ নেই (সম্ভবত main()
)। আপনার কাছে থাকলে আপনি সমস্ত গ্লোবাল থেকে নিজেকে মুক্তি দিতে পারবেন এবং এর পরিবর্তে স্থানীয় ব্যবহার করতে পারবেন।
নিম্নলিখিত চিত্র:
int main() {
setup();
while (true) {
loop();
}
return 0;
}
এটি সম্ভবত কমবেশি একটি আরডুইনো প্রোগ্রামের মূল ফাংশনটির মতো দেখাবে। আপনার setup()
এবং loop()
ক্রিয়াকলাপ উভয় ক্ষেত্রে আপনার প্রয়োজনীয় পরিবর্তনশীলগুলি main()
বিশ্বব্যাপী সুযোগের চেয়ে কার্যকারিতার আওতার অভ্যন্তরে অগ্রাধিকার হিসাবে ঘোষণা করা হবে । তারপরে সেগুলি আর্গুমেন্ট হিসাবে পাস করার মাধ্যমে (প্রয়োজনে পয়েন্টার ব্যবহার করে) অন্য দুটি ফাংশনে অ্যাক্সেসযোগ্য করা যায়।
উদাহরণ স্বরূপ:
int main() {
int myVariable = 0;
setup(&myVariable);
while (true) {
loop(&myVariable);
}
return 0;
}
নোট করুন যে এই ক্ষেত্রে আপনার উভয় ফাংশনের স্বাক্ষরও পরিবর্তন করতে হবে।
যেহেতু এটি সম্ভাব্য বা পছন্দসই নাও হতে পারে, তাই প্রোগ্রামের কাঠামোর উপর জোর করে পরিবর্তন না করেই আরডুইনো প্রোগ্রাম থেকে বেশিরভাগ গ্লোবালগুলি সরিয়ে ফেলার সত্যিই কেবল একটি উপায় আমি দেখতে পাচ্ছি।
আমি যদি সঠিকভাবে স্মরণ করি তবে আপনি সি এর চেয়ে আরডুইনোর জন্য প্রোগ্রাম করার সময় সি ++ ব্যবহার করতে পারছেন তবে আপনি যদি ওওপি (অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং) বা সি ++ এর সাথে পরিচিত না হন তবে এটি কিছুটা অভ্যস্ত হয়ে যেতে পারে এবং কিছু পড়া চালিয়ে যান।
আমার প্রস্তাব হ'ল একটি প্রোগ্রাম ক্লাস তৈরি করা এবং এই শ্রেণীর একক বিশ্বব্যাপী দৃষ্টান্ত তৈরি করা। কোনও শ্রেণিকে অবজেক্টগুলির জন্য নীলনকশা হিসাবে বিবেচনা করা উচিত।
নিম্নলিখিত উদাহরণ প্রোগ্রাম বিবেচনা করুন:
class Program {
public:
Program();
void setup();
void loop();
private:
int myFirstSampleVariable;
int mySecondSampleVariable;
};
Program::Program() :
myFirstSampleVariable(0),
mySecondSampleVariable(0)
{
}
void Program::setup() {
// your setup code goes here
}
void Program::loop() {
// your loop code goes here
}
Program program; // your single global
void setup() {
program.setup();
}
void loop() {
program.loop();
}
ভাল, আমরা প্রায় সমস্ত গ্লোবাল থেকে নিজেকে মুক্তি পেয়েছি। ফাংশন যার মাধ্যমে আপনি আপনার আবেদন যুক্তিবিজ্ঞান যোগ হবে শুরু করবেন Program::setup()
এবং Program::loop()
ফাংশন। এই ফাংশনগুলির উদাহরণ নির্দিষ্ট সদস্য ভেরিয়েবলগুলিতে অ্যাক্সেস রয়েছে myFirstSampleVariable
এবং mySecondSampleVariable
প্রথাগত setup()
এবং loop()
ফাংশনগুলিতে অ্যাক্সেস নেই কারণ এই ভেরিয়েবলগুলি শ্রেণি ব্যক্তিগত হিসাবে চিহ্নিত করা হয়েছে। এই ধারণাকে ডেটা এনক্যাপসুলেশন বা ডেটা লুকানো বলা হয়।
আপনাকে ওওপি এবং / অথবা সি ++ শেখানো এই প্রশ্নের উত্তরের সুযোগের বাইরে কিছুটা হলেও আমি এখানেই থামব।
সংক্ষিপ্তসার হিসাবে: গ্লোবালগুলি এড়ানো উচিত এবং গ্লোবালের পরিমাণ হ্রাস করা প্রায় সর্বদা সম্ভব। এছাড়াও যখন আপনি আরডুইনোর জন্য প্রোগ্রামিং করছেন।
সর্বাধিক গুরুত্বপূর্ণ আমি আশা করি আমার উত্তরটি আপনার জন্য কিছুটা কার্যকর হবে :)