مفهوم آرایه و روش های ساخت آن در زبان جاوا اسکریپت

مفهوم آرایه و روش های ساخت آن در زبان جاوا اسکریپت


Array (اَرِی یا آرایه) یکی از اصلی ترین بخش های هر زبان برنامه نویسی است. در این فصل خواهیم دید که مفهوم Array چیست و چه زمان به کار می آید و از همه مهم تر، ما چه طور می توانیم با آن ها کار کنیم. به طور خلاصه:

«اگر بخواهیم مجموعه یی از داده‌ها را در کنار یکدیگر ذخیره سازیم، از آرایه استفاده خواهیم کرد.»

کاربرد لیست ها
در بخش های قبلی، راجع به متغیرهایی صحبت کردیم که دارای محتوای جدا و مستقل بودند. مثلاً متغیر “var myName = “Pouria یا متغیر عددی var firstNum = 7 همگی دارای یک محتوای مستقل از دیگران هستند. اما برخی اوقات پیش می آید که ما می خواهیم تعدادی از موارد را در کنار یکدیگر و در یک مجموعه نگهداری کنیم. برای نمونه، به لیست های زیر نگاهی بیاندازید:
– لیست خواننده های مورد علاقه
– لیست زبان های برنامه نویسی که بلد هستیم
– لیست برترین فیلم های سال
– لیست تاریخ تولد افراد خانواده
– لیست خرید هفتگی
– لیست کارهای روزانه
– لیست اهدافی که برای سال جدید برای خود تعیین می کنیم و … 

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

شاید این روش در کوتاه مدت و در برنامه های بسیار کوچک کاربرد داشته باشد اما مطمئناً پس از مدت کوتاهی، با مشکل مواجه خواهیم شد. مثلاً فرض کنید که بخواهیم این لیست خرید هفتگی را بر اساس حروف الفبا مرتب کنیم؛ کاری دشوار و زمان بر که در آن ضریب خطای ما هم بالا خواهد رفت. خوشبختانه، زبان جاوا اسکریپت -و هر زبان برنامه نویسی دیگری- به ما اجازه می دهد که لیستی از داده ها را در کنار یکدیگر و در زیر چتر یک متغیر خاص ذخیره کنیم. این متغیرهای خاص، Array یا «آرایه» نام دارند.

با کمک آرایه ها می توانیم گروهی از داده های مرتبط را در داخل یک متغیر نگهداری کنیم. نکته ی جالب درباره ی آرایه ها این است که ما می توانیم در داخل یک آرایه، هر ترکیبی از داده ها را نگهداری کنیم. مثلاً یک آرایه می تواند به طور همزمان، مجموعه ای از داده های متنی (String)، عددی، بولین (Boolean)، آبجکت ها، فانکشن ها و حتی یک آرایه ی دیگر باشد. بله، درست است؛ آرایه ها این قابلیت را دارند که آرایه های دیگر را نیز در داخل خود ذخیره کنند. به طور کلی، هر چه دلمان بخواهد می توانیم در آرایه ها ذخیره کنیم.

قوانین ساخت آرایه ها
هر Array از چند Element (اِلِمنت یا عضو) تشکیل شده است و هر اِلِمنت در یک آرایه، دارای نام اختصاصی خودش است که با نام آرایه به همراه عدد ایندکس آن عضو در داخل براکت [ ] نشان داده می شود. محتوا و اطلاعات مختلفی که در آرایه ذخیره می شوند، با نام “Array Element” یا همان «عضو آرایه» شناخته می شوند. آرایه ها برای شناسایی زیرمجموعه های خود، به هر کدام از عضوها یک عدد اختصاص می دهند که به این عدد، Index (ایندکس یا اندیس) گفته می شود. برای آن که بهتر بتوانیم این موضوع را متوجه شویم، ابتدا یک آرایه می سازیم. برای ساختن یک آرایه ی جدید، جاوا اسکریپت دو راه در پیش روی ما می گذارد:
– ساخت آرایه به روش Literal Notation 
– استفاده از کلیدواژه ی new در کنار آبجکت ()Array

ساده ترین روش برای ساخت آرایه در جاوا اسکریپت اصطلاحا Literal Notation گفته می شود به این شکل که در یک وهله، تمامی المنت ها را ایجاد کنیم. به طور مثال، آرایه ی لیست خرید هفتگی را می توان به صورت به یک آرایه تبدیل کرد:

به همین سادگی! این روش هیچ نیازی به کلیدواژه ی خاص ندارد و صرفاً با قرار دادن یک براکت می توانید آرایه ی خود را بسازید. به علاوه، این روش دارای تعداد کلمات و کد کمتری است و زمانی که بخواهید کدهای جاوا اسکریپت خود را به مرتب ترین و ساده ترین شکل ممکن بنویسید، حذف هر تکه ی کوچک از کد می تواند تأثیرگذار باشد. اگر بخواهیم اندیس های آرایه فوق را بهتر متوجه شویم، می توان آن ها را به صورت زیر متصور شد:

در این آرایه، عضو یا اِلِمنتی که در شماره ی ایندکس 0 قرار دارد، دارای مقدار “Bread” به معنی «نان» است. المنت با شماره ایندکس 4، مقدار “Chocolate” به معنی «شکلات» را در خود ذخیره کرده است. این نحوه ی شماره گذاری ایندکس ها دقیقاً مشابه آنچه که در فصل گذشته و مبحث استرینگ ها گفته شد می باشد و نحوه ی شماره گذاری مشابهی دارد. همین آرایه را می توان با استفاده از آبجکتی از پیش تعریف شده در زبان جاوا اسکریپت تحت عنوان ()Array ایجاد کرد (روش دوم ساخت آرایه):

همان طور که در کد فوق ملاحظه می شود، ابتدا با استفاده از کلیدواژه ی var و انتخاب یک نام برای آرایه ی خود -myArray- این آرایه را ایجاد کرده سپس یک علامت = قرار داده ایم و از کلیدواژه ی new که برای ساخت یک آبجکت جدید به کار می رود استفاده نموده و نام ()Array را نوشته و مقادیر مد نظر خود را با استفاده از کاما از یکدیگر مجزا کرده و برایش در نظر گرفته ایم.

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

همانند هر متغیر دیگری، آرایه ها هم می توانند هر اسمی که ما بخواهیم داشته باشند، البته تا زمانی که خلاف قوانین نامگذاری جاوا اسکریپت (مثلاً استفاده از کلمات رزرو شده مثل function یا if) نباشند. بدین ترتیب، با انتخاب تنها یک اسم برای آرایه، می توانیم لیست تقریباً نامحدودی از داده ها را در داخل آن ذخیره کنیم. البته اگر حقیقتش را بخواهید، محدودیتی برای تعداد اعضای قابل ذخیره در یک آرایه وجود دارد: هر آرایه می تواند نهایتاً 4,294,967,295 المنت را در خود نگه دارد که بعید به نظر می رسد ما برای نگهداری لیست خریدمان، جا کم بیاوریم!

در کنار قوانین نامگذاری، آرایه ها چند قانون و خصوصیت دیگر دارند که باید با آن ها آشنا باشیم:
– بر خلاف ریاضیات روزمره که شمارش خود را از 1 آغاز می کنیم، ایندکس آرایه از 0 شروع می شود.
– آرایه می تواند هر نوع داده ای (Data Type) را در خودش ذخیره کند.

ایندکس آرایه
از آنجایی که جاوا اسکریپت دست و پا ندارد، شمارش اعداد در این زبان برنامه نویسی با قوانین عجیب ما انسان ها متفاوت است؛ چه کسی گفته که شمارش اعداد باید از 1 شروع شود؟ همانطور که گفتیم، شمارش ایندکس ها درون آرایه از عدد 0 شروع می شود. به بیانی دیگر، اولین المنت ذخیره شده در داخل Array، ایندکس شماره ی «0» دارد و دومین المنت، ایندکس «1» را در اختیار دارد و به همین ترتیب تا انتها پیش می رود. پس به خاطر داشته باشید که برای مثال، [myArray[3 در حقیقت عضو چهارم آرایه است نه عضو سوم آن!

هشدار
شمارش ایندکس ها از صفر، یکی از دلایل اصلی باگ ها و مشکلاتی است که موجب سردرگمی و سردرد برنامه نویسان تازه کار می شود اما زمانی که به آن عادت کنید، بسیار نرمال و طبیعی به نظر خواهد رسید.

انواع دیتا تایپ قابل ذخیره در آرایه ها
هر اِلِمنت در آرایه می تواند هر نوع داده ای که بخواهد را در خود نگه دارد (برای آشنایی بیشتر با دیتا تایپ ها، به فصل دوم رجوع نمایید.) همچنین امکان ذخیره ی یک آرایه درون آرایه ای دیگر هم وجود دارد. در کنار این ها، می توان فانکشن ها و آبجکت ها را نیز به عنوان یک المنت درون آرایه ذخیره کرد. پس تقریباً داده ای باقی نمی ماند که نتوانیم آن را درون آرایه بریزیم. علاوه بر امکان ذخیره هر نوع داده ای در یک Array، ما می توانیم انواع مختلف داده ای را در کنار هم، داخل یک آرایه داشته باشیم. نمونه ی زیر را نگاه کنید:

همین طور که می بینیم، تمامی این داده ها در داخل آرایه ای با نام “item” ذخیره شده اند. ابتدا یک آرایه تعریف کرده ایم تحت عنوان item که خالی است (برای ساخت آرایه همان طور که ملاحظه می شود، هم می توان از آبجکت ()Array استفاده کرد و هم از یک جفت علامت [ ]) سپس تک تک ایندکس های آرایه ی خود را مقدار دهی کرده ایم.

المنت اول با ایندکس 0، عبارت استرینگ “Havij” را در خودش ذخیره کرده؛ المنت دوم با ایندکس 1، جمع دو عدد را در خود نگه می دارد و المنت سوم هم صرفاً حاوی یک داده ی عددی است. همچنین المنت آخر که عضو چهارم با ایندکس 3 است، در حقیقت، یک نوع فانکشن کوچک است که مقادیر دو المنت دیگر را ضرب کرده و جواب آن را در خود ذخیره می کند. آن طور که پیدا است، آرایه ها می توانند برای نگهداری لیستی از متغیرها و داده ها بسیار کاربردی و مفید باشند.

چگونه اطلاعات را در آرایه ذخیره کنیم؟
زمانی که یک آرایه را ایجاد می کنیم، می توان در همان ابتدا و زمان ساخت، مقادیر را نیز در آرایه قرار داد (مانند مثال های بالا) اما امکان اضافه کردن مقادیر در زمان های بعد نیز وجود دارد و می توانیم در ابتدا یک آرایه ی خالی ایجاد کرده و در آینده به آن مقدار بدهیم. اضافه کردن المنت ها یا مقادیر به یک آرایه دقیقاً مانند ساختن و یا ویرایش کردن متغیرها است، با این تفاوت که برای قرار دادن یک مقدار/المنت در آرایه، باید شماره ی ایندکس محل قرارگیری المنتی که می خواهیم بسازیم یا ویرایش کنیم را نیز مشخص کنیم. در مثال زیر، یک آرایه ی خالی می سازیم و سپس مقادیر دلخواهمان را به آن اضافه می کنیم:

بدین ترتیب این مقادیر به صورت پشت سر هم در آرایه ی peopleList ذخیره می شوند چرا که شماره ی ایندکس آن ها پشت سر هم است. اما همیشه مجبور نیستیم که ترتیب این اعداد را در زمان افزودن مقادیر رعایت کنیم. برای نمونه، در همین آرایه می توان المنتی را در شماره ی ایندکس 13 اضافه کرد:

اما اکنون که شماره ایندکس های 2 تا 12 را پشت سر گذاشته و مقدار خود را در مکان ایندکس 13 قرار داده ایم، خانه های بین ایندکس 2 و 13 دارای فضای خالی خواهند بود. حال اگر بخواهیم اندازه ی آرایه peopleList را مشاهده کنیم، با کمال تعجب خواهیم دید که از نظر جاوا اسکریپت، اندازه ی این آرایه برابر با 14 است:

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

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *