تا به حال باید به خوبی با نحوه عملکرد متغیرها آشنا شده باشید.
بیایید اولین برنامه ای که با متغیرها نوشتیم را دوباره مرور کنیم:
TextWindow.Write(“Enter your Name: “)
()name = TextWindow.Read
TextWindow.WriteLine(“Hello ” + name)
در این برنامه نام کاربر را در متغیری به نام name دریافت و ذخیره کردیم. سپس به کاربر «سلام» گفتیم.
اکنون، فرض کنید بیش از یک کاربر وجود دارد ، مثلاً ۵ کاربر وجود دارد. چگونه نام همه آنها را ذخیره کنیم؟
یکی از راه های انجام این کار این است:
TextWindow.Write(“User1, enter name: “)
()name1 = TextWindow.Read
TextWindow.Write(“User2, enter name: “)
()name2 = TextWindow.Read
TextWindow.Write(“User3, enter name: “)
()name3 = TextWindow.Read
TextWindow.Write(“User4, enter name: “)
()name4 = TextWindow.Read
TextWindow.Write(“User5, enter name: “)
()name5 = TextWindow.Read
TextWindow.Write(“Hello “)
TextWindow.Write(name1 + “, “)
TextWindow.Write(name2 + “, “)
TextWindow.Write(name3 + “, “)
TextWindow.Write(name4 + “, “)
TextWindow.WriteLine(name5)
وقتی برنامه فوق را اجرا کنیم به خروجی زیر می رسیم:
شکل ۱-۱۰ : بدون استفاده از آرایه
واضح است که باید راه بهتری برای نوشتن چنین برنامه ساده ای وجود داشته باشد تا مجبور نشویم که برای هر کاربر جدید مکرراً یک کد را بنویسیم.
راه حل در اینجا ذخیره و بازیابی نام بیش از یک کاربر با استفاده از یک متغیر است. اگر بتوانیم این کار را انجام دهیم، می توانیم از یک حلقه For که در فصل های قبلی یاد گرفتیم استفاده کنیم.
اینجاست که آرایه ها به کمک ما می آیند.
آرایه چیست؟
آرایه نوع خاصی از متغیر است که می تواند بیش از یک مقدار را در یک زمان نگه دارد.
اساساً منظور این است که بهجای ایجاد name1، name2، name3، name4 و name5 برای ذخیره پنج نام کاربری، میتوانیم فقط از name برای ذخیره نام هر پنج کاربر استفاده کنیم.
روشی که ما چندین مقدار را ذخیره می کنیم با استفاده از چیزی است که “شاخص” (ایندکس) نامیده می شود.
برای مثال، name[1]، name[2]، name[3]، name[4] و name[5] همگی میتوانند یک مقدار را ذخیره کنند. اعداد ۱، ۲، ۳، ۴ و ۵ را شاخص های آرایه می نامند.
اگرچه name[1]، name[2]، name[3]، name[4] و name[5] همه به نظر متغیرهای متفاوتی هستند، اما در واقع همه آنها فقط یک متغیر هستند.
ممکن است بپرسید مزیت این کار چیست؟
بهترین مزیت ذخیره سازی مقادیر در یک آرایه این است که می توانید شاخص را با استفاده از متغیر دیگری مشخص نمایید که به ما این امکان را می دهد که به راحتی توسط حلقه ها به مقادیر داخل آرایه ها دسترسی داشته باشیم.
حال، بیایید ببینیم چگونه میتوانیم دانش جدید خود را با بازنویسی برنامه قبلی با آرایهها به کار ببریم:
For i = 1 To 5
TextWindow.Write(“User” + i + “, enter name: “)
()name[i] = TextWindow.Read
EndFor
TextWindow.Write(“Hello “)
For i = 1 To 5
TextWindow.Write(name[i] + “, “)
EndFor
(“”)TextWindow.WriteLine
به دو خط پررنگ توجه کنید. اولی مقداری را در آرایه ذخیره می کند و دومی آن را از آرایه می خواند.
مقداری که در name[1] ذخیره میکنید تحت تأثیر آنچه در name[2] ذخیره میکنید قرار نمیگیرد.
از این رو برای اکثر اهداف می توانید name[1] و name[2] را به عنوان دو متغیر متفاوت با هویت یکسان در نظر بگیرید.
شکل ۲-۱۰ : استفاده از آرایه
برنامه فوق تقریباً همان نتیجه برنامه قبلی (بدون استفاده از آرایه) را می دهد با این تفاوت که در اینجا در انتهای Mantis کاما گذاشته شده است.
ما می توانیم با بازنویسی حلقه چاپ به صورت زیر این مشکل را نیز برطرف کنیم:
TextWindow.Write(“Hello “)
For i = 1 To 5
TextWindow.Write(name[i])
If i < 5 Then
(“,”)TextWindow.Write
EndIf
EndFor
(“”)TextWindow.WriteLine
در اینجا یک نمایش تصویری از آرایه []name، و نحوه ذخیره نامهای مختلف در آن نشان داده شده است.
همانطور که ملاحظه می کنید، در این فضای ذخیرهسازی، زمانی که به name[1] دسترسی پیدا شود، نام Shifu در خروجی ظاهر می شود و…
شکل ۳-۱۰ : نمایش تصویری از آرایه
استفاده از شاخص غیر عددی در آرایه
در برنامه قبلی دیدید که از اعداد به عنوان شاخص برای ذخیره و بازیابی مقادیر از آرایه استفاده کردیم.
به نظر می رسد که شاخص ها فقط به اعداد محدود نمی شوند و در عمل استفاده از شاخص های متنی نیز بسیار مفید است.
به عنوان مثال، در برنامه زیر، اطلاعات مختلفی را درباره یک کاربر میپرسیم و ذخیره میکنیم و سپس اطلاعاتی را که کاربر درخواست میکند چاپ میکنیم:
TextWindow.Write(“Enter name: “)
()user[“name”] = TextWindow.Read
TextWindow.Write(“Enter age: “)
()user[“age”] = TextWindow.Read
TextWindow.Write(“Enter city: “)
()user[“city”] = TextWindow.Read
TextWindow.Write(“Enter zip: “)
()user[“zip”] = TextWindow.Read
TextWindow.Write(“What info do you want? “)
()index = TextWindow.Read
TextWindow.WriteLine(index + ” = ” + user[index])
شکل ۴-۱۰ : استفاده از شاخص غیر عددی در آرایه
آرایه دوبعدی
فرض کنید می خواهید نام و شماره تلفن همه دوستان خود را ذخیره کنید تا بتوانید هر زمان که نیاز داشتید شماره تلفن آنها را جستجو کنید. (تقریباً مانند یک دفترچه تلفن)
چگونه می خواهیم چنین برنامه ای بنویسیم؟
در این مورد، دو مجموعه (بعد) از شاخص ها درگیر می شوند.
فرض کنید هر دوست را با نام مستعارشان شناسایی می کنیم. این اولین شاخص ما در آرایه است.
هنگامی که از اولین شاخص برای بدست آوردن متغیر دوست خود استفاده می کنیم، دومین شاخص، نام و شماره تلفن به ما کمک می کند تا به نام و شماره تلفن واقعی آن دوست برسیم.
توجه: شاخص های آرایه به حروف بزرگ و کوچک حساس نیستند. (درست مانند متغیرهای معمولی)
نحوه ذخیره این داده ها به این صورت خواهد بود:
“friends[“Rob”][“Name”] = “Robert
“friends[“Rob”][“Phone”] = “555-6789
“friends[“VJ”][“Name”] = “Vijaye
“friends[“VJ”][“Phone”] = “555-4567
“friends[“Ash”][“Name”] = “Ashley
“friends[“Ash”][“Phone”] = “555-2345
از آنجایی که در این آرایه (friends) دو شاخص داریم، این نوع آرایه را، آرایه دو بعدی می نامند.
هنگامی که این برنامه را راه اندازی کردیم، خواهیم توانست که نام مستعار یک دوست را به عنوان ورودی انتخاب کرده و سپس اطلاعاتی را که در مورد آن ذخیره کرده ایم، چاپ کنیم.
در اینجا برنامه کاملی است که این کار را انجام می دهد: