باز کردن منو اصلی

دامنه (علوم رایانه)

در برنامه‌نویسی، دامنهٔ (به انگلیسی: Scope) مرتبط با یک انقیاد نام (پیوند بین یک نام و یک موجودیت مانند متغیر) محدوده‌ای از برنامه است که این نام‌گذاری در آن اعتبار دارد. به بیان دیگر در کدام قسمت از برنامه می‌توان از این نام برای اشاره به موجودیت مورد نظر استفاده کرد. به این قسمت محدوده دامنه (به انگلیسی: Scope Block) گفته می‌شود. در قسمت‌های دیگر برنامه ممکن است همین نام به موجودیت دیگری اشاره کند (انقیاد متفاوتی داشته باشد) یا اصلاً به چیزی اشاره نکند.[۱][۲]

دامنهٔ یک انقیاد، به‌ویژه در متون قدیمی‌تر، با عنوان میدان دید یک موجودیت (به انگلیسی: Visibility of an entity) نیز شناخته می‌شود. در این روش نام‌گذاری، اصالت به موجودیت داده شده‌است در حالی که در نام‌گذاری دامنه، دامنه مستقیماً به انقیاد مرتبط می‌شود.

در تعریف دامنه از عبارت «قسمتی از برنامه» استفاده می‌شود که خود می‌تواند مفاهیم متفاوتی داشته باشد. «قسمتی از برنامه» می‌تواند قسمتی از «کد منبع برنامه» باشد که به آن دامنهٔ واژگانی یا دامنه ایستا گفته می‌شود.[۳] در بعضی از زبان‌ها «قسمتی از برنامه» می‌تواند به قسمتی از برنامه در زمان اجرا اشاره کند، که به آن دامنه پویا می‌گویند.[۱]

دامنه چیستویرایش

دامنه " دامین " بطور کلی در دنیای وب به معنای آدرس اینترنتی می باشد که به عبارتی تمام آدرس هایی که در مرورگر خود مشاهده می کنید، نامی است که برای آی پی سایت ها ثبت دامنه شده است. از این رو در حین ثبت دامنه یا ثبت دامین باید نهایت تلاش و خلاقیت خود را بکار بگیرید تا بتوانید نامی مناسب و درست برای زمینه ای که فعالیت می کنید یا قصد فعالیت را دارید، انتخاب کنید و این گونه در آینده ای نه چندان دور شما نسبت به انتخاب نام دامنه می توانید محبوبیت بیشتری در میان رقبای خود بدست آورید. به همین دلیل توصیه می شود که در حین انتخاب نام دامنه دقت کافی را خرج کنید.

تعریفویرایش

تعریف صریح دامنهٔ یک شناسه کاملاً بدون ابهام است. قسمتی از کد منبع است که انقیاد یک نام با موجودیت در آن اتفاق می‌افتد. تعریف دامنه از سال ۱۹۶۰ که در زبان برنامه‌نویسی الگول ۶۰ صورت گرفت، تغییری نکرده‌است.[۴]

الگول ۶۰ (سال ۱۹۶۰)ویرایش

این انواع از کمیت‌ها برجسته‌اند: متغیرهای ساده، آرایه‌ها، لیبل‌ها، سوییچ‌ها و رویه‌ها. دامنه یک کمیت مجموعه‌ای از عبارت‌های برنامه‌نویسی هستند که اعلان پیوند بین یک نام و شناسه در آن معتبر است.

دامنه ایستا و دامنه پویاویرایش

یک تفاوت عمده در دامنه‌ها معنی عبارت «قسمتی از برنامه» است. در زبان‌های با دامنه واژگانی (به انگلیسی: lexical scope) یا دامنه ایستا (به انگلیسی: static scope)، تحلیل نام‌ها به محلی از کد منبع بستگی دارد که تابع یا متغیر در آنجا تعریف می‌شود. از سوی دیگر، در زبان‌های با دامنه پویا (به انگلیسی: dynamic scope) تحلیل نام‌ها به وضعیت برنامه در زمانی که با نام انقیاد شده مواجه می‌شود، بستگی دارد. زمینه اجرای (به انگلیسی: execution context) برنامه نیز بر این تحلیل تأثیرگذار است. در عمل، در دامنه ایستا، تعریف یک متغیر با جستجو در محدودهٔ آن متغیر یا تابع آغاز می‌شود؛ در صورتی که یافت نشد، جستجو در محدوده‌های بیرونی‌تر (به انگلیسی: outer blocks) ادامه می‌یابد. اما در دامنه پویا، ابتدا در تابع صدا زده شده جستجو می‌شود، در صورت که یافت نشد، به تابعی که تابع فعلی را صدا زده رجوع می‌شود و جستجو به همین منوال در پشته توابع ادامه پیدا می‌کند.[۵] البته در هر دو حالت، جستجو از دامنه محلی (به انگلیسی: local scope) تعریف آغاز می‌شود.

امروزه بیشتر زبان‌های برنامه‌نویسی از دامنه ایستا استفاده می‌کنند با این حال دامنه پویا نیز در برخی از زبان‌ها مورد استفاده قرار می‌گیرد؛ مهم‌ترین این زبان‌ها نسخه‌هایی از لیسپ و زبان‌های اسکریپتی مانند پرل و برخی از زبان‌های قالبی هستند.

تحلیل واژگان در زمان کامپایل به آن انقیاد زودرس (به انگلیسی: early binding) و در زمان اجرا به انقیاد دیررس (به انگلیسی: late binding) معروف است.

جستارهای وابستهویرایش

منابعویرایش

  1. ۱٫۰ ۱٫۱ University of Michigan-Dearborn. "NAMES, BINDING, TYPE CHECKING, AND SCOPES". https://umdearborn.edu/cecs. Archived from the original on 7 September 2017. Retrieved 9 September 2017. External link in |وبگاه= (help)
  2. WG14 N1256 (2007 updated version of the C99 standard), 6.2.1 Scopes of identifiers, 2007-09-07
  3. The Go Programming Language Specification: Declarations and scope, Version of Nov 13, 2013
  4. WG14 N1256 (2007 updated version of the C99 standard), 6.2.1 Scopes of identifiers, 2007-09-07
  5. Borning A. CSE 341 -- Lexical and Dynamic Scoping. University of Washington.