NO. 0204
برنامه‌نویسی و طراحی وب مفاهیم پایه برنامه‌نویسی

متغیر

Variable

متغیر نامی است که به یک مقدار در حافظه اشاره می‌کند. به‌جای اینکه با آدرس‌های عددی حافظه کار کنید، به مقدار نامی معنادار می‌دهید و از آن پس با همان نام به آن دسترسی دارید.

متغیر مثل جعبهٔ برچسب‌دار

رایج‌ترین قیاس: متغیر را جعبه‌ای در نظر بگیرید که برچسبی روی آن زده‌اید. داخل جعبه یک مقدار است و برچسب، نام متغیر.

  • اعلان. جعبه را می‌سازید و نام‌گذاری می‌کنید.
  • مقداردهی. چیزی داخل جعبه می‌گذارید.
  • خواندن. محتوای جعبه را نگاه می‌کنید.
  • تغییر. محتوای قبلی را با مقدار تازه جایگزین می‌کنید — مقدار قبلی از بین می‌رود.

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

توصیهٔ حرفه‌ای

اگر مقداری قرار نیست تغییر کند، آن را به‌عنوان ثابت تعریف کنید. این کار خطاهای ناشی از تغییر تصادفی را حذف می‌کند و به خوانندهٔ کد می‌گوید که این مقدار ثابت است. در بسیاری از زبان‌های مدرن، ثابت حالت پیش‌فرض توصیه‌شده است.

انواع داده

هر متغیر نوعی دارد که تعیین می‌کند چه چیزی می‌تواند نگه دارد و چه عملیاتی روی آن مجاز است:

نوعنگه می‌داردنمونه
عدد صحیحعدد بدون اعشارسن، تعداد
عدد اعشاریعدد با بخش اعشاریقیمت، وزن
رشتهمتننام، نشانی
منطقیدرست یا نادرستآیا کاربر وارد شده؟
آرایه/فهرستمجموعه‌ای از مقادیرفهرست نام‌ها
تهینبودِ مقدارفیلدی که پر نشده

زبان‌ها در برخورد با نوع دو دسته‌اند:

  • ایستا. نوع را از ابتدا اعلام می‌کنید و تغییر نمی‌کند. خطاها زودتر — هنگام کامپایل — پیدا می‌شوند.
  • پویا. نوع در زمان اجرا تعیین می‌شود. نوشتن سریع‌تر است اما برخی خطاها تا زمان اجرا پنهان می‌مانند.
دام کلاسیک

در بسیاری از زبان‌ها، جمع رشتهٔ «۵» با عدد ۵ نتیجهٔ غیرمنتظره می‌دهد — گاهی «۵۵» و گاهی خطا. همیشه مطمئن شوید ورودی کاربر را پیش از محاسبه به نوع درست تبدیل کرده‌اید. ورودی فرم‌های وب همیشه متن است، حتی وقتی عدد به نظر می‌رسد.

نام‌گذاری: مهارتی که دست‌کم گرفته می‌شود

نام متغیر تنها چیزی است که به خوانندهٔ کد می‌گوید این مقدار چیست. قواعد عملی:

  • توصیفی باشد. userAge بهتر از x یا temp است.
  • طول متناسب با دامنه. در حلقهٔ کوتاه، i کاملاً پذیرفته است. در متغیری که در کل فایل استفاده می‌شود، نام کامل لازم است.
  • واحد را در نام بیاورید. timeoutSeconds بسیار بهتر از timeout است؛ اینکه ثانیه است یا میلی‌ثانیه، منشأ خطاهای واقعی بوده است.
  • متغیر منطقی را پرسشی نام‌گذاری کنید. isActive یا hasPermission.
  • از مخفف‌های شخصی بپرهیزید. مخففی که فقط شما می‌فهمید، بدتر از نام طولانی است.
  • یکدست باشید. در یک پروژه، یک سبک نام‌گذاری را انتخاب و رعایت کنید.

دامنه: متغیر کجا در دسترس است؟

دامنه تعیین می‌کند یک متغیر از کجا قابل دسترسی است:

  • محلی. فقط داخل تابع یا بلوکی که در آن تعریف شده. پس از پایان آن بلوک، از بین می‌رود.
  • سراسری. از همه‌جای برنامه قابل دسترسی.

قاعدهٔ حرفه‌ای: دامنه را تا حد ممکن محدود نگه دارید. متغیر سراسری از هر نقطه‌ای قابل تغییر است، و وقتی مقدارش اشتباه شد، باید کل برنامه را بگردید تا بفهمید چه کسی آن را عوض کرده. متغیر محلی این مشکل را ندارد.

مفهوم مرتبط دیگر طول عمر است: متغیر چه مدت در حافظه می‌ماند. متغیرهای محلی معمولاً با پایان تابع آزاد می‌شوند. در زبان‌هایی که مدیریت حافظهٔ خودکار ندارند، فراموش‌کردن آزادسازی حافظه به نشت حافظه منجر می‌شود.

پرسش‌های متداول دربارهٔ متغیر

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

مقدار متغیر می‌تواند در طول اجرا تغییر کند؛ ثابت پس از مقداردهی اولیه قابل تغییر نیست. استفاده از ثابت هرجا که ممکن است، کد را ایمن‌تر و قابل فهم‌تر می‌کند.

آیا می‌توانم نام متغیر را فارسی بگذارم؟

برخی زبان‌های مدرن از حروف یونیکد در نام‌گذاری پشتیبانی می‌کنند، پس از نظر فنی ممکن است. اما در عمل توصیه نمی‌شود: مشکلات کدگذاری، دشواری تایپ در محیط‌های مختلف، و ناسازگاری با ابزارها و همکاری بین‌المللی. نام‌ها را انگلیسی بنویسید و توضیحات را فارسی.

منظور از مقداردهی اولیه چیست؟

دادن مقدار به متغیر بلافاصله پس از تعریف آن. استفاده از متغیری که هرگز مقداردهی نشده، در برخی زبان‌ها خطا و در برخی دیگر منجر به مقادیر غیرقابل پیش‌بینی می‌شود — منشأ باگ‌هایی که یافتنشان بسیار دشوار است.