تعریف متغیرها در ویژوال بیسیک و حوزه اعتبار آنها

در مقاله ای به معرفی مبحث متغیرها در ویژوال بیسیک پرداختیم، در این مقاله میخواهیم با مفهوم اعتبار متغیرها در ویژوال بیسیک آشنا شویم و نحوه ی تعریف متغیرها در ویژوال بیسیک را با حوزه ی اعتبار (Scope of Variable) مشخص یاد بگیریم.

لازم به ذکر است از انجایی که یادگیری مفاهیم این مقاله منوط به درک مفهوم متغیر در ویژوال بیسیک میباشد، تاکید میشود قبل از مطالعه ی این مقاله نگاهی به مقاله ی متغیرها در ویژوال بیسیک بیندازید.

مفهوم حوزه اعتبار متغیرها

حوزه ی اعتبار یا Scope یک متغیر در واقع محدوده ای است که قسمتی از حافظه به آن متغیر اختصاص یافته است و شما میتوانید به آن متغیر مقدار دهید، مثلاً فرض کنید یک متغیر در محدوده (Scope) یک پروسیژر خاص تعریف شده، میتوانیم در هر جایی از این پروسیژر به این متغیر مقدار بدهیم و حتی اگر مقداری ندهیم به صورت پیشفرض مقدار آن صفر در نظر گرفته شده ولی اگر در پروسیژر (Procedure) بعدی به این متغیر مقدار بدهیم اجرای کدها با خطا مواجه میشود زیرا ما به متغیری مقدار داده ایم که فضایی مختص آن وجود ندارد و در واقع با پایان یافتن اجرای پروسیژر قبلی عمر آن متغیر هم به پایان میرسد، حوزه ی اعتبار متغیرها مفهومی بسیار شبیه عمر متغیرها میباشد که در ادامه آن را معرفی میکنیم.

تعریف متغیرها در ویژوال بیسیک

عمر متغیرها در ویژوال بیسیک

به مدت زمانی که یک متغیر مقداری را در خود نگه میدارد عمر متغیر (Variable Lifetime) میگوییم، در طول عمر یک متغیر، مقدار آن ممکن است تغییر کند و لزوماً ثابت نیست ولی همواره دارای مقدار میباشد.

متغیرهایی که در Scope یک پروسیژر تعریف میشوند (Procedure-Level Variables)، با شروع اجرای پروسیژر همگی دارای مقدار میشوند و مقدار پیشفرض هریک به نوعی عددی یا محتوایی معادل مقدار صفر برای آن متغیر میباشد، در طول اجرای پروسیژر مقدار این متغیرها تغییر کرده و پس از پایان پروسیژر عمر متغیرها به پایان میرسد و آن قسمت از حافظه که در شروع پروسیژر به آنها اختصاص داده شده بود پس گرفته میشود.

در طول عمر متغیر اگر هیچ مقداری توسط برنامه نویس به آن اختصاص نیابد همواره مقدار آن برابر صفر خواهد بود.

تعریف متغیرها در ویژوال بیسیک

حوزه ی اعتبار متغیرها

به طور کلی مفهوم حوزه اعتبار (Scope) برای متغیرها (Variable)، ثابت ها (Constants) و پروسیژر ها (Procedure) در ویژوال بیسیک ایفای نقش میکند و معنا دارد، منظور از حوزه ی اعتبار (Scope)از نگاهی دیگر، موجود بودن (در دسترس بودن) یا Availability یک متغیر یا ثابت و یا پروسیژر برای استفاده توسط یک پروسیژر میباشد.

حوزه اعتبار و یا سطوح اعتبار (Scoping Level) در ویژوال بیسیک به سه دسته تقسیم میشوند، اول Procedure-Level، دوم Private Module-Level و سوم Public Module-Level شکل زیر این دسته بندی را خلاصه میکند:

Variable Scope

هنگامی که یک متغیر برای ویژوال بیسیک معرفی میگردد همزمان حوزه ی اعتبار آن هم مشخص میشود، در ادامه بیشتر توضیح خواهیم داد.

کد نویسان ویژوال بیسیک توصیه میکنند سعی کنید متغیرها را جداگانه و در Scope هر پروسیژر تعریف کنید    (Procedure-Level) تا با خطاهای ناشی از نامگذاری تکراری متغیرها و یا از بین رفتن داده ها در خلال اجرای پروسیژرها مواجه نشوید، ولی به هر حال کد نویسی حرفه ای بر لزوم استفاده از متغیرها با Scope هایی در سطح ماژول تاکید دارد.

متغیر با حوزه اعتبار پروسیژر

برای تعریف متغیرها با حوزه اعتبار پروسیژر (Procedure-Level Variable) از عبارت Dim استفاده میکنیم. معمولاَ بعد از نوشتن خط شروع پروسیژر و قبل از نوشتن کدهای ویژوال بیسیک به معرفی متغیرها میپردازیم تا نظم کلی برنامه حفظ شود.

در تمام طول مدت اجرای پروسیژر، این دسته از متغیرها همواره دارای مقدار میباشند و با پایان اجرای پروسیژر دیگر وجود نخواهند داشت، حتی اگر در خلال اجرای این پروسیژر  یک پروسیژر دیگر را Call کنیم باز هم این متغیر در طول اجرای پروسیژر Call شده دارای مقدار میباشد، در این مورد سعی کنید از نام های تکراری برای متغیرها استفاده ننمایید.

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

تعریف متغیرها در ویژوال بیسیک

متغیر با حوزه اعتبار ماژول

برای تعریف متغیر با اعتبار ماژول (Private or Public Module-Level Variable) باید آن را در قسمت Declaration هر ماژول تعریف کنید، در واقع کدهای تعریف اینگونه متغیرها Module-Level میباشند.

کدهای تعریف شده در قسمت Declaration کدهایی هستند که قبل از تعریف پروسیژرها در ماژول ها نوشته میشوند.

متغیرها با حوزه ی اعتبار ماژول به دو دسته تقسیم میشوند، دسته اول متغیرهای private Module-Level میباشند که در تمام پروسیژرهای نوشته شده در همان ماژول معتبر هستند و دارای مقدار میباشند و دسته ی دوم متغیرهای                Public Module-Level میباشند که در تمام ماژول های یک Project متعبرند و از آنها میتوان در تمام پروسیژرهای نوشته شده در ماژول های یک فایل اکسل (Project) استفاده نمود.

برای تعریف متغیرهای اختصاصی (Private) میتوانن از Dim یا Private استفاده نمود که استفاده از Private با توجه به گویا تر بودن کدها توصیه میگردد؛ همچنین برای تعریف متغیرهای عمومی (Public) میتوان از عبارت Public استفاده کرد.

در کد زیر متغیر اختصاصی با حوزه اعتبار ماژول تعریف شده است.

در کدهای بالا، با اجرای پروسیژر دوم، مانند پروسیژر اول عمل میشود. نکته ی مهم این است که همواره مقدار متغیر متناظر با آخرین مقداری است که در آن قرار داده شده است،

در کدهای زیر متغیر عمومی با حوزه اعتبار ماژول تعریف شده است. این متغیر میتواند در تمام پروسیژرهای موجود در تمام ماژول های ایجاد شده در Project مورد استفاده قرار گیرد.

تعریف متغیرها در ویژوال بیسیک

نمودار زیر خلاصه ای از مبحث Scope متغیرها در ویژوال بیسیک را نشان میدهد.

تعریف متغیرها در ویژوال بیسیک و حوزه اعتبار آنها

حوزه اعتبار پروسیژرها

مانند متغیرها، برای پروسیژرها هم میتوان حوزه اعتبار (Scope) تعریف کرد، به صورت پیشفرض تمام پروسیژرها به صورت Public هستند، یعنی در تمام ماژول های یک Project میتوان آنها را Call کرد، برا اطمینان میتوانید قبل از نام پروسیژر از کلمه ی Public استفاده کنید.

حوزه اعتبار پروسیژر در ویژوال بیسیک

اگر قبل از نام Procedure در ویژوال بیسیک از کلمه ی Private استفاده نمایید به این معنی است که شما تنها در همان ماژولی که پروسیژر در آن قرار دارد میتوانید آن را Call کنید و در ماژول های دیگر نمیتوانید از آن پروسیژر استفاده کنید.

تنها پروسیژرهای نوع Event هستند که به صورت پیشفرض Private میباشند و هنگام ایجاد آنها عبارت Private قبل از نام آنها توسط ویژوال بیسیک نوشته میشود.

اشتراک گذاری در شبکه های اجتماعی: share on facebook share on google plus share on linkedin

دیدگاهتان را بنویسید؟