সর্বাধিক প্রাথমিক পার্থক্যটি সুযোগের।
প্রথম ক্ষেত্রে, আপনি একটি বৈশ্বিক চলক ঘোষণা করছেন। এটি একটি পরিবর্তনশীল যা এর সংজ্ঞা অনুসারে প্রতিটি স্কোপে অ্যাক্সেসযোগ্য।
void setup()
{
Serial.begin(9600);
}
void inc();
int count = 0;
void loop()
{
Serial.println(count);
count++;
inc();
delay(500);
}
void inc() //Can edit the value of count
{
count=count+1;
};
দ্বিতীয় ক্ষেত্রে, আপনি স্থানীয় সুযোগের সাথে একটি স্ট্যাটিক ভেরিয়েবল ঘোষণা করছেন। পুরো প্রোগ্রামটি বৈশ্বিক ভেরিয়েবলের মতো চলার জন্য চলকটি বহাল থাকবে, তবে এটি ঘোষিত কোড ব্লকটিতে কেবল অ্যাক্সেসযোগ্য হবে only এটি একই উদাহরণ, শুধুমাত্র একটি পরিবর্তন সহ। count
এখন ভিতরে স্ট্যাটিক ভেরিয়েবল হিসাবে ঘোষিত হয়েছে loop
।
void inc();
void loop()
{
static int count = 0;
Serial.println(count);
count++;
inc();
delay(500);
}
ফাংশনটির inc()
অ্যাক্সেস না থাকায় এটি সংকলন করবে না count
।
গ্লোবাল ভেরিয়েবলগুলি যদিও আপাতদৃষ্টিতে কার্যকর, কিছু সমস্যা নিয়ে আসে। শারীরিক পারিপার্শ্বিকের সাথে ইন্টারঅ্যাক্ট করতে পারে এমন প্রোগ্রামগুলি লেখার ক্ষেত্রে এগুলি এমনকি ক্ষতির কারণ হতে পারে। প্রোগ্রামগুলির বৃহত্তর হওয়া শুরু হওয়ার সাথে সাথে এমন কিছু ঘটনার খুব সম্ভবত এটি একটি প্রাথমিক উদাহরণ। একটি ফাংশন অসাবধানতাবশত একটি বৈশ্বিক চলকের অবস্থার পরিবর্তন করতে পারে।
void setup()
{
Serial.begin(9600);
}
void another_function();
int state=0;
void loop()
{
//Keep toggling the state
Serial.println(state);
delay(250);
state=state?0:1;
//Some unrelated function call
another_function();
}
void another_function()
{
//Inadvertently changes state
state=1;
}
এই ধরনের মামলাগুলি ডিবাগ করা খুব কঠিন। এই ধরণের সমস্যাটি কেবল স্ট্যাটিক ভেরিয়েবল ব্যবহার করে সহজেই সনাক্ত করা যায়।
void setup()
{
Serial.begin(9600);
}
void another_function();
void loop()
{
static int state=0;
//Keep toggling the state
Serial.println(state);
delay(250);
state=state?0:1;
//Some unrelated function call
another_function();
}
void another_function()
{
//Results in a compile time error. Saves time.
state=1;
}