کلمه کلیدی static در آردوینو — آموزش کامل برای متغیرهای محلی با حافظه  
آردوینو ایران | آموزش تخصصی آردوینو به فارسی

آردوینو ایران | آموزش تخصصی آردوینو به فارسی

آردوینو ایران — مرجع تخصصی آموزش آردوینو به فارسی! دوره‌های کاربردی، پروژه‌محور و گام‌به‌گام برای مبتدی‌ها تا پیشرفته‌ها: از راه‌اندازی اولین LED تا ساخت ربات، IoT و سیستم‌های هوشمند خانه. یادگیری عملی، کدنویسی ساده، پشتیبانی فنی و دسترسی مادام‌العمر به محتوا — فقط برای عاشقان الکترونیک و برنامه‌نویسی سخت‌افزاری.

اشتراک در خبرنامه

جهت عضویت در خبرنامه لطفا ایمیل خود را ثبت نمائید

Captcha

آمار بازدید

  • بازدید امروز : 26
  • بازدید دیروز : 99
  • بازدید کل : 14779

کلمه کلیدی static در آردوینو — آموزش کامل برای متغیرهای محلی با حافظه


کلمه کلیدی static در آردوینو — آموزش کامل برای متغیرهای محلی با حافظه

کلمه کلیدی static در آردوینو — متغیرهای محلی که فراموش نمی‌شوند

static چیست؟

در آردوینو، کلمه‌ی کلیدی static برای تعریف متغیرهایی استفاده می‌شود که محلی هستند (یعنی فقط در یک تابع قابل دسترسی‌اند)، اما مقدارشان بین فراخوانی‌های متوالی تابع حفظ می‌شود.
بدون static، متغیرهای محلی هر بار که تابع فراخوانی می‌شود، دوباره ساخته و مقدار اولیه‌شان تنظیم می‌شود. اما با static، مقدار قبلی ذخیره می‌ماند.

توضیح برای مبتدی‌ها: تصور کنید یک دفترچه یادداشت شخصی دارید که فقط شما می‌توانید به آن نگاه کنید (مثل یک متغیر محلی). بدون static، هر بار که وارد اتاق می‌شوید، دفترچه را پاک می‌کنید و دوباره شروع می‌کنید. اما با static، دفترچه همان‌طور که بود باقی می‌ماند — پس می‌توانید از آخرین یادداشت خود ادامه دهید!

چرا به static نیاز داریم؟

در بسیاری از پروژه‌ها، نیاز داریم یک تابع بتواند «خاطره‌ای» از فراخوانی قبلی داشته باشد — مثلاً: — شمارش تعداد دفعاتی که یک تابع فراخوانی شده است.
— ذخیره آخرین وضعیت یک سنسور برای مقایسه با مقدار جدید.
— پیاده‌سازی تایمرهای ساده بدون استفاده از متغیرهای سراسری.

استفاده از static به شما امکان می‌دهد این کار را بدون ایجاد متغیر سراسری (که RAM را اشغال می‌کند و کد را شلوغ می‌کند) انجام دهید.

نحوه تعریف و استفاده

برای تبدیل یک متغیر محلی به متغیر static، کافی است قبل از نوع داده، کلمه‌ی static را بنویسید:

void myFunction() {
  static int counter = 0;  // فقط یک بار مقداردهی می‌شود
  counter++;
  Serial.println(counter);
}

اولین بار که myFunction() فراخوانی می‌شود، counter برابر ۱ می‌شود.
دومین بار: ۲، سومین بار: ۳ و همین‌طور ادامه می‌یابد — چون مقدار قبلی حفظ شده است.

مثال کاربردی: شمارش فراخوانی‌های یک تابع بدون متغیر سراسری

void checkSensor() {
  static unsigned long lastCheck = 0;
  static int callCount = 0;
  
  callCount++;
  unsigned long now = millis();
  
  if (now - lastCheck > 5000) {  // هر ۵ ثانیه یک بار
    int value = analogRead(A0);
    Serial.print("بررسی شماره ");
    Serial.print(callCount);
    Serial.print(" — مقدار سنسور: ");
    Serial.println(value);
    lastCheck = now;
  }
}

void loop() {
  checkSensor();  // هر بار که فراخوانی می‌شود، callCount افزایش می‌یابد
  delay(100);
}

توضیح برای مبتدی‌ها: بدون static، هر بار که checkSensor() فراخوانی می‌شد، callCount دوباره صفر می‌شد و همیشه فقط «۱» چاپ می‌کرد. اما با static، این متغیر فقط یک بار ساخته می‌شود و مقدارش بین فراخوانی‌ها زنده می‌ماند.

تفاوت static با متغیر سراسری چیست؟

ویژگیمتغیر static (محلی)متغیر سراسری
دامنه فقط داخل یک تابع در تمام کد قابل دسترسی
عمر (Lifetime) تا پایان برنامه تا پایان برنامه
مصرف RAM مثل سراسری (در RAM ثابت) در RAM ثابت
امنیت و سازماندهی عالی — فقط تابع می‌تواند آن را ببیند ضعیف — هر تابعی می‌تواند آن را تغییر دهد

نکته طلایی ۱: static فقط یک بار مقداردهی اولیه می‌شود

خط مقداردهی اولیه (مثل static int x = 0;) فقط اولین بار که تابع اجرا می‌شود، انجام می‌شود. در فراخوانی‌های بعدی، این خط نادیده گرفته می‌شود — حتی اگر مقدار را تغییر داده باشید!

void test() {
  static int x = 10;  // فقط اولین بار اجرا می‌شود
  x++;
  Serial.println(x);
}

اولین فراخوانی: ۱۱
دومین فراخوانی: ۱۲
سومین فراخوانی: ۱۳
... و هرگز دوباره به ۱۰ بازنمی‌گردد.

نکته طلایی ۲: static برای جلوگیری از متغیرهای سراسری بی‌دلیل عالی است

بسیاری از مبتدی‌ها برای ذخیره وضعیت، متغیرهای سراسری تعریف می‌کنند. این کار RAM را اشغال می‌کند و کد را شلوغ می‌کند.
اما با static، می‌توانید همان کار را درون تابع انجام دهید — بدون اینکه نام متغیر در بقیه کد دیده شود. این روش، کد شما را ماژولار، ایمن و حرفه‌ای می‌کند.

جمع‌بندی

  • static متغیرهای محلی را «حافظه‌دار» می‌کند
  • مقدار آن‌ها بین فراخوانی‌های تابع حفظ می‌شود
  • فقط در همان تابع قابل دسترسی است — نه در بقیه کد
  • جایگزین عالی برای متغیرهای سراسری در موارد خاص
  • مقداردهی اولیه فقط یک بار انجام می‌شود

منبع رسمی

این مطلب بر اساس مستندات رسمی Arduino از بخش static – Language Reference تهیه شده است، با توضیحات ساده‌شده، مثال‌های کاربردی و نکات طلایی منحصربه‌فرد برای جامعه فارسی‌زبان.

  انتشار : ۱۴ مهر ۱۴۰۴               تعداد بازدید : 309

برچسب های مهم

دیدگاه های کاربران (0)

http://kia-ir.ir

تمام حقوق مادی و معنوی این وب سایت متعلق به "آردوینو ایران | آموزش تخصصی آردوینو به فارسی" می باشد

فید خبر خوان    نقشه سایت    تماس با ما