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

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

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

برای درک بهتر متغیر نوع Array یا آرایه ای در ویژوال بیسیک به مثال زیر توجه کنید:

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

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

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

در ریاضیات با ماتریس ها آشنا هستیم، در مثال دیگر فرض کنیم شما ماتریسی ۵*۸  را میخواهید وارد برنامه ی خود کنید، قطعاً تعریف متغیر به تعداد المان های یک ماتریسکار منطقی نیست در این مورد هم باید از متغیرهای آرایه ای استفاده نماییم.

در مثال اول متغیر آرایه ای مورد نیاز یک متغیر یک بعدی با تعداد بیست عضو میباشد و در مورد دوم به یک متغیر دو بعدی برای توصیف سطر و ستون یک ماتریس احتیاج داریم، متغیرهای آرایه ای را میتوان یک یا چند بعدی تعریف نمود و همینطور میتوان تعیین کرد که المان های آن از چه نوعی باشند، در مثال اول المان های متغیر مورد نیاز از نوع String و در مثال دوم المان ها از نوع Integer میباشند.

همانند آنچه در مقاله ی تعریف متغیرها در ویژوال بیسیک توضیح دادیم، در اینجا نیز اگر نوع متغیر (String  یا Integer در مثال بالا) را مشخص نکنیم، به صورت پیشفرض المان ها از نوع Variant خواهند بود.

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

در کد زیر دو متغیر آرایه ای (Array Variable) که دارای تعداد المان مورد نیاز برای مثال های بالا میباشند تعریف شده است، متغیر اول یک بعدی و متغیر دوم دو بعدی (یا در واقع یک ماتریس ۵*۸ میباشد) میباشد:

در متغیر Array در ویژوال بیسیک به صورت پیشفرض سطر و ستون شماره صفر هم داریم که با این حساب در کدهای بالا یک سطر و ستون اضافه تعریف کرده ایم، یعنی متغیر های ما از Personnel (0) تا Personnel (20) هستند که تعداد آنها ۲۱ عدد است، اگر بخواهیم شمارش از یک آغاز شود باید به روش زیر عمل کنیم:

اگر در قسمت Module Declaration عبارت Option Base 1 نوشته شود به این معنی است که مثلاً متغیر Array(2) دارای دو عضو میباشد، Array(1) و Array(2) ولی اگر این عبارت نوشته نشود – پیشفرض ویژوال بیسیک – Array(2) دارای سه عضو میباشد، Array(0)، Array(1) و Array(2).

شکل زیر نحوه ی نامگذاری المان ها در یک ماتریس ۲*۲ را نشان میدهد:

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

متغیر آرایه ای ثابت و دینامیک در ویژوال بیسیک

متغیرهای Array به دو دسته تقسیم میشوند، Fixed-Sized و Dynamic. کلاً برای متغیرهای Array از نوع Fixed-Size فقط یک بار میتوان مشخص کرد که متغیر چند بعدی باشد و چه تعداد المان داشته باشد و آن زمانی است که اولین بار متغیر توصیف میشود.

در بسیاری از موارد پیش می آید که ابعاد و تعداد المانهای مورد نیاز برای تعریف یک متغیر آرایه ای مشخص نیست و در طول برنامه بدست می آید، با توجه به اینکه لزوم برنامه نویسی حرفه ای (و استفاده بهینه از حافظه) ایجاب میکند که برنامه نویس به تناسب داده ی خود متغیر را تعریف کند، استفاده از متغیر آرایه ای نوع Dynamic توصیه میشود زیرا در این صورت تعداد ابعاد و المان های متغیر را به تناسب نیاز و به دفعات مورد نیاز میتوان تغییر داد.

متغیرهای Array از نوع Dynamic را به صورت بدون بعد، یعنی با یک پرانتز خالی در مقابل نام آرایه تعریف میکنیم، در مقاله ی تعریف متغیر در ویژوال بیسیک به تفصیل در مورد روش تعریف متغیرها صحبت کرده ایم، در جایی از برنامه که تعداد المان ها و ابعاد متغی برای ما روشن شد با استفاده از عبارت ReDim متغیر مورد نظر را با ابعاد دلخواه توصیف و استفاده میکنیم.

میتوان به تعداد دلخواه از عبارت ReDim برای توصیف یک متغیر Array در ویژوال بیسیک (در صورت دینامیک بودن) استفاده نمود در این حالت هر دفعه داده های متغیر قبلی از بین میروند، از طرفی باید دقت داشته باشید که در نوشتن نام متغیر به هیچ وجه اشتباه نکنید چون در این صورت (حتی اگر از عبارت Option Explicit استفاده کرده باشید) متغیر جدیدی ایجاد خواهد شد.

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

همانطور که گفته شد، برای توصیف یک Dynamic Array در ویژوال بیسیک میتوانید از عبارات Dim، Public، Private و Static مانند آنچه در مقاله ی تعریف متغیرها در ویژوال بیسیک توضیح دادیم استفاده نمایید، لازمه ی Dynamic بودن متغیر Array در ویژوال بیسیک تنها این است که پرانتز مقابل نام متغیر را خالی بگذاریم. مانند کد زیر:

در کد بالا متغیر ExcelProArray یک متغیر ارایه ای است که تعدا المان ها و ابعاد آن مشخص نشده از طرفی عبارت String نشان میدهد که تمام المان های (Element) این متغیر از نوع String هستند.

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

در خلال اجرای کدهای برنامه شما تصمیم میگیرید که متغیر شما چند بعدی باشد و یا چند المان (Element) داشته باشد، تعداد المان ها (Element) میتوانند خود به صورت متغیرهایی باشند که حین اجرای برنامه مقدار آنها مشخص میشود، با استفاده از عبارت ReDim میتوانید ابعاد و تعداد المانهای یک متغیر Array از نوع Dynamic را مشخص نمایید. مانند کدهای زیر:

در کد بالا n تعداد المانهای متغیر Array یک بعدی میباشد.

ReDim Preserve

همانطور که اشاره شد، از ReDim میتوان به دفعات برای تعین ابعاد و تعداد المان های یک متغیر ارایه ای دینامیک استفاده نمود، ولی نکته اینجا بود که در هر بار ReDim کردن متغیر داده های قبلی از بین میروند، برای اینکه داده های قبلی در متغیر باقی بمانند میتوان از عبارت ReDim Preserve استفاده نمود. در واقع استفاده از ReDim Preserve متغیر آرایه ای دینامیک مورد نظر را، ضمن حفظ مقادیر قبلی، گسترده (Expand) میکند.

در کد زیر، یک متغیر Array در ویژوال بیسیک به صورت دینامیک تعریف شده، حین اجرای کدها با استفاده از ReDim ابعاد و تعداد المان های آن مشخص شده و سپس با استفاده از ReDim Preserve ضمن حفظ داده های قبلی به تعداد المان های آن اضافه شده است.

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

نکته ی بسیار مهم اینست که در متغیرهای چند بعدی تنها یک بعد (بعد آخر)- Last Dimension- از ابعاد متغیر را میتوان Expand کرد و تنها مرز بالایی آن بعد را میتوان افزایش داد (Upper Bound of the Last Dimension) یعنی مثلاً در کدهای بالا فضاهای اضافه شده بعد از ۵ قرار میگرند و داده های از ۰ تا ۵ سرجایشان باقی میمانند.

اندازه ی متغیر Array در ویژوال بیسیک

متغیر Array در ویژوال بیسیک، به خاطر آرایه ای بودن ۲۰ بایت از حافظه را اشغال میکنند، مضاف بر اینکه به ازای هر بعد (Dimension) 4 بایت دیگر به آن اضافه میشود، بعلاوه حجم مورد نیاز هر المان نیز – بسته به نوع المان- با اعداد بالا جمع میشود، یعنی یک داده ی سه بعدی بدون در نظر گرفتن نوع داده های هر المان ۳۲ بایت حافظه اشغال میکند، اگر این اندازه از حافظه را با میزان حافظه ی اشغال شده توسط داده های انواع دیگر که قبلاً در جدولی به آنها اشاره شده مقایسه کنیم به ارزش تعیین دقیق ابعاد و تعداد المان های یک داده ی آرایه ای پی میبریم.

مثلاً یک متغیر از نوع Integer تنها دو بایت از حافظه را اشغال میکند، در حالی که یک متغیر سه بعدی با تعداد حداقل سه عضو از نوع Integer به مقدار ۳۸ بایت از حافظه نیاز دارد.

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

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